Privacy is a core constraint. Local Whisper does not send audio or transcript text to a hosted speech API.

Runtime boundary

Setup, model downloads, wh update, and wh doctor --fix can use the network to install packages, fetch models, or update the checkout. Qwen3-ASR uses community-maintained MLX conversions and a community-maintained runtime rather than Qwen’s official PyTorch stack. After the selected 1.7B or 0.6B snapshot is downloaded, inference remains in process on the Mac. When Qwen Vocabulary context is enabled, Local Whisper reads the same local replacement rules already used by its post-transcription Vocabulary pass, builds a bounded prompt of at most 4,096 characters, and passes it directly to the in-process Qwen runtime. The capability gate allows only the validated Qwen3-ASR 1.7B and 0.6B models to receive that context. No unsupported engine, hosted endpoint, telemetry service, or model download request receives the Vocabulary data.

Permissions

The app does not request contacts, location, camera, or analytics permissions.

Audio lifecycle

  1. Local Whisper records a temporary WAV file under ~/.whisper/.
  2. The selected local engine transcribes the audio.
  3. Grammar text is sent only to the selected local, on-device, localhost, or private LAN backend when grammar is enabled.
  4. The result is copied to the clipboard for double-tap dictation, or pasted at the cursor for hold-to-record and auto-paste dictation.
  5. Audio is retained under ~/.whisper/ for backup according to history settings.

Vulnerability reporting

Report vulnerabilities privately through GitHub private vulnerability reporting:
Do not open public issues for security vulnerabilities. Include reproduction steps, demonstrated impact, and a suggested fix when available. Out of scope:
  • Issues requiring physical access to the machine
  • Issues requiring the user to grant Accessibility or Microphone permission to a malicious process
  • Prompt injection via grammar backend responses, because Local Whisper copies text and does not execute it