Free, fast, offline voice-to-text for macOS.
Hold fn, speak, release — text appears at your cursor. Works fully offline by default with no accounts, no servers, and no data leaving your machine. Optionally connect cloud providers for higher-accuracy transcription and AI post-processing.
Grab the latest DMG from GitHub Releases, open it, and drag Chirp to Applications.
brew install --cask stefanpenner/chirp/chirp
brew install bazelisk
bazel run //:Chirp
- Hold-to-talk — Press
fn(configurable) to record, release to transcribe - Works everywhere — Text is typed at your cursor in any app
- Speculative preview — See partial transcription as you speak
- Fast — Parakeet TDT 0.6b v3 with Silero VAD, all on-device
- AI Modes — Pipeline presets switchable from the menu bar. Ships with "Offline" and "Offline + Fixup" (on-device T5 grammar correction); create your own with cloud STT, LLM post-processing, or any combination
- Cloud providers — Optional OpenAI, Anthropic, and Google APIs (plus any OpenAI-compatible endpoint)
- Speaker verification — Enroll your voice so Chirp only transcribes you, ignoring other speakers
- Noise reduction — Apple Voice Processing for noise suppression, echo cancellation, and automatic gain control
- Menu bar app — Lives in the menu bar, no dock icon
- Auto-updates — Built-in update checks via Sparkle
Chirp needs two permissions on first launch:
- Microphone — macOS will prompt automatically
- Accessibility — Required for typing text at your cursor: System Settings → Privacy & Security → Accessibility, add Chirp and enable the toggle
On first launch, Chirp downloads the speech recognition model (~465 MB). This is a one-time download stored in ~/Library/Application Support/Chirp/.
Chirp checks for updates automatically. You can also check manually from the menu bar → Check for Updates…
brew upgrade chirp
- macOS 15+
- ~700 MB disk space (app + model)
In the default offline modes, all processing runs locally. Audio is processed in memory, never recorded or stored. No telemetry, no tracking.
When you use a cloud AI mode, audio or text is sent to the provider you configure. No data is sent unless you explicitly create and activate a cloud mode.
- sherpa-onnx — speech recognition engine (Apache 2.0)
- ONNX Runtime — model inference runtime (MIT)
- NVIDIA Parakeet TDT 0.6b v3 — speech-to-text model (CC-BY-4.0)
- Silero VAD — voice activity detection (MIT)
- Sparkle — auto-update framework (MIT)
Full license texts are in THIRD_PARTY_NOTICES.
brew install bazelisk
bazel build //:Chirp # build
bazel run //:Chirp # build and launch
bazel test //... # run tests
bazel run //:package -- 0.3.0 # create signed DMG


