Push-to-talk dictation for macOS, 100% on-device. Hold a key, speak, release — your text is transcribed locally and pasted right at your cursor. Pick your engine: Qwen3-ASR, NVIDIA Nemotron 3.5 or Voxtral Mini — all running via MLX.
🌐 talkink.app — website & one-click download
- 🔒 Local & private — your voice and text never leave your Mac. No cloud, no subscription.
- ⚡ Fast — ~30–40× faster than real time on a MacBook Air M4 (8-bit model).
- 🌍 Multilingual — auto-detects across the model's ~40 locales; 9 fixed locales selectable (EN/FR/DE/ES/IT/PT/TR/AR/NL). Punctuation & capitalization included.
- ⌨️ Paste anywhere — auto-pastes at the cursor; always on the clipboard as a fallback.
- 📜 History — every transcription is kept locally and is searchable / re-copyable in-app.
- 🟢 Open source (MIT), 100% native Swift — no Python at runtime.
- Talkink lives in the menu bar (no Dock icon).
- Hold the push-to-talk key (Right Option ⌥ by default) → recording starts.
- Speak.
- Release → local transcription in a fraction of a second → text is pasted at your cursor (if Accessibility is granted) and copied to the clipboard.
- It's also saved to History in case you need it again.
A floating pill (NVIDIA green) shows the state: recording → transcribing → done.
The recording pill, reacting to your voice:
Requirements: Apple Silicon Mac (M1–M5), macOS 14 or later.
- Download
Talkink.dmgfrom the latest release. - Open it and drag Talkink onto the Applications folder, then eject the disk image.
- Launch Talkink from Applications. No security warning — Talkink is signed and notarized by Apple (since v0.3.0).
Is it safe? Yes, twice over: the download is notarized by Apple (scanned and ticketed), and Talkink is fully open source — you can read every line in this repo and build it yourself.
Coming from Söyle (Talkink's former name, ≤ v0.3.3)? Your settings and history carry over automatically. If push-to-talk stops responding, remove the old Söyle entries from System Settings → Privacy & Security → Input Monitoring and Accessibility (− button), then add Talkink and enable it — one time.
| Permission | Why | Note |
|---|---|---|
| Microphone | To hear you | — |
| Input Monitoring | Detect the push-to-talk key everywhere | On macOS 26 you may need to add Talkink yourself: “+” or drag Talkink.app into the list (Talkink opens the pane and a Finder window for you) |
| Accessibility (optional) | Paste at the cursor | Skip it and Talkink just copies to the clipboard (paste with ⌘V) |
On the first transcription, Talkink downloads the model (~1.2 GB) once — you'll see "Loading model…". After that: hold Right Option ⌥, speak, release → your text appears at the cursor and on the clipboard. That's it. 🎤
git clone https://github.com/hasso5703/talkink.git
cd talkink
scripts/build_app.sh Release
open dist/Talkink.appRequires full Xcode 16+ (the Metal compiler is needed — see BUILDING.md). A locally built app is signed with your own (or an ad-hoc) identity and runs directly.
Menu bar → Open Talkink → Settings tab:
- Push-to-talk key — Right Option (default), Left Option, Right Control, or Fn / 🌐.
- Language — Auto (detect) or a fixed locale.
- Model — bf16 (default, best quality) or 8-bit (fastest).
- Auto-paste at cursor, feedback sounds, launch at login, check for updates.
Talkink's transcription is 100% on-device. The only network calls are:
- First-run model download (~2.5 GB for the recommended Qwen3-ASR 1.7B; other catalog options range from 760 MB to 4.1 GB) from Hugging Face into
~/.cache/huggingface. Downloads are resumable — quit anytime, it continues where it stopped. - Update check (optional, toggle in Settings) — a request to the GitHub Releases API at launch. No usage telemetry is sent.
- Push-to-talk does nothing → grant Input Monitoring (System Settings → Privacy & Security → Input Monitoring). Talkink re-arms itself within a few seconds; relaunch it if the key still does nothing.
- Talkink doesn't appear in the Input Monitoring list → a macOS 26 issue that hits many apps (Karabiner-Elements included): answering the permission prompt doesn't register the app. Click “+” in the list (or drag
Talkink.appinto it), then enable the toggle. - After updating from an old version (Söyle ≤ v0.2.0), the key/auto-paste stopped working (toggles look on but do nothing) → macOS ties permissions to the app's code signature, and early builds were signed differently. In System Settings → Privacy & Security, remove the old Söyle entries from Input Monitoring and Accessibility (− button), then add Talkink and enable it. One time — the identity has been stable since v0.3.0.
- It stopped working after rebuilding from source → ad-hoc signatures change each build; run
scripts/dev_sign_setup.shonce to create a stable local signing identity so grants persist. - Using Fn / 🌐 as the key → set System Settings → Keyboard → "Press 🌐 to" = Do Nothing.
- Model download stalls → check your connection and
~/.cache/huggingface.
| Component | Role | License |
|---|---|---|
| Qwen3-ASR | Default model (1.7B / 0.6B, 30 languages) | Apache 2.0 |
| NVIDIA Nemotron 3.5 ASR | Lightest/fastest option (cache-aware FastConformer-RNNT, 600M) | NVIDIA model license (OpenMDW-1.1) — see model card |
| Voxtral Mini | Alternative engine (4B, 13 languages, auto-detect) | Apache 2.0 |
| mlx-audio-swift | Native Swift/MLX STT implementations (Prince Canuma) | MIT |
| mlx-community | MLX-converted weights (8-bit / bf16 / 4-bit) | per model license |
| MLX | Compute on Apple Silicon (Apple) | MIT |
Each downloaded model is governed by its own license (see the model cards). By using Talkink you agree to the license of the model(s) you download.
- Live text while you speak (streaming
generateStream) - Notarized + Sparkle in-app auto-update (v0.3.0)
- Homebrew cask
- Custom dictionary (proper nouns, jargon)
- Hands-free toggle mode
Talkink's code is MIT. See the table above for component and model licenses.


