A macOS menu bar app for local speech-to-text transcription using on-device ASR models.
All audio is processed entirely on-device — nothing leaves your Mac. (Optional transcript refinement via OpenRouter sends the transcript text to a cloud provider you choose; this is off by default.)
⚠️ Personal Project NoticeThis code was written for my own use. It is not supported in any way. No issues, no PRs, no questions answered, no guarantees it works. You're welcome to use it, fork it, modify it, sell it, burn it, whatever. Just don't expect anything from me. Good luck.
- macOS 26.0+ (Tahoe)
- Apple Silicon required
Download the latest DMG from Releases, open it, and drag Jabber to Applications.
swift buildFor a release build with signing:
./scripts/release.sh --skip-notarize # local testing
./scripts/release.sh # full signed + notarized DMG- Launch Jabber — it lives in your menu bar
- Click the icon or use the global hotkey to start dictation
- Speak, and text appears wherever your cursor is
Model options are available in Jabber's main window (menu bar → Open Jabber, or Cmd-, while Jabber is active):
- Parakeet TDT v2 (~443MB) — fast, accurate English transcription on the Neural Engine
- Nemotron (~600MB) — NVIDIA Nemotron Speech Streaming, English-only with native punctuation & capitalization
- Apple Speech — built-in macOS 26 speech recognition, recommended for non-English dictation
During onboarding, you'll pick a language and Jabber recommends the best model for it.
Jabber requires two macOS permissions to provide the full experience:
- Microphone: required to capture speech.
- Accessibility: required for type-into-active-app mode.
On first launch or first use, macOS may ask for microphone permission and may open a system permission prompt for accessibility when you type into the active app.
If permission prompts do not appear:
- Open System Settings > Privacy & Security
- Enable Jabber for Microphone
- Enable Jabber for Accessibility
Jabber uses Sparkle for auto-updates. On first launch (after the second run), it will check for updates automatically.
- Download Sparkle from releases
- Run
./bin/generate_keysto create a keypair (stored in Keychain) - Export the private key:
./bin/generate_keys -x sparkle_private_key - Add the private key as
SPARKLE_EDDSA_PRIVATE_KEYsecret in GitHub - Add your public key to
SUPublicEDKeyin Info.plist
The workflow generates appcast.xml as an artifact. Host it at:
https://rselbach.github.io/jabber/appcast.xml
MIT — see LICENSE.
Jabber uses the following open-source models and libraries:
| Model | Creator | License | Link |
|---|---|---|---|
| Parakeet TDT 0.6B v2 | NVIDIA | CC BY 4.0 | huggingface.co/nvidia/parakeet-tdt-0.6b-v2 |
| Nemotron Speech Streaming | NVIDIA | OpenMDW-1.1 | huggingface.co/nvidia/nemotron-speech-streaming-en-0.6b |
| Apple Speech | Apple | Apple SLA | Built-in macOS 26 Speech framework |
Parakeet's CoreML conversion is maintained by FluidInference. Nemotron's CoreML conversion is by aufklarer.
| Library | License | Link |
|---|---|---|
| FluidAudio | Apache 2.0 | Parakeet ASR for Apple platforms |
| speech-swift | Apache 2.0 | ASR/TTS models for Apple Silicon |
| Sparkle | MIT | Software update framework |
| mediaremote-adapter | MIT | Media remote control |