100% Free & Open Source (MIT) • No Subscriptions
Dot
Write as fast as you can think.
Sub-50ms push-to-talk voice dictation for macOS. Hardware-dormant microphone, upstream zero data retention, and provider independence.
Download for macOS
brew install --cask anandlo/tap/dot
Copy
⌥ Option
⌘ Command
D
Click or press on keyboard
Ready to dictate…
Active Cursor Output
38ms stop latency
Hold ⌥⌘D to speak. Your words paste directly at your cursor upon release.
The macOS Voice Landscape
Voice dictation tools on macOS generally fall into two categories: local-first utilities that require downloading gigabytes of model weights and run CPU/memory-heavy inference, or commercial cloud apps that charge $96 to $180 per year while running persistent background listening daemons. Dot takes a different engineering approach.
| Utility | Architecture & Runtime | Latency & Workflow | Privacy & Model Freedom |
|---|---|---|---|
| Hex (Anomaly) | Local-first Rust app. Requires downloading ~600MB–1.2GB model weights. English-only (Parakeet). ~450MB+ resident RAM. | Hold-to-talk shortcut. On-device generation delay proportional to speech length. | 100% on-device. Audio never leaves the machine. Open source. |
| MacWhisper (Jordi Bruin) | Local Whisper.cpp wrapper. Models range from Base (~140MB) to Large (~2.5GB). High CPU/fan usage on long audio. | Built for transcribing audio files and podcast batches. Not designed for sub-50ms live streaming dictation. | 100% on-device. Freemium (€39 Pro for larger models). Closed source. |
| Wispr Flow & Superwhisper | Proprietary cloud or hybrid. Electron runtime (~250MB–400MB RAM). Persistent background helper processes. | ~1.0s to 3.0s processing lag. Vendor-locked transcription APIs. | Audio passes through third-party cloud infrastructure. $96 to $180/year recurring subscriptions. |
| Dot (Open Source) | Pure Swift 6 & AppKit. < 15 MB RAM. 12 MB binary with zero model downloads required to begin. | < 50ms stop latency. Provisional trailing VAD commits speech the millisecond the key is released. | True hardware push-to-talk (mic dormant outside keypress). Upstream ZDR enforced. Keychain isolated. 100% Free (MIT). |
Architecture & System Boundaries
Dot separates the lightweight user experience shell from the audio processing pipeline. It uses documented macOS system APIs, avoids bulky runtime wrappers, and never writes unencrypted credentials to disk.
Push-to-Talk
CGEventTap hardware gating. The audio input stream is initialized only upon physical key-down and severed immediately on key-up. There are zero background microphone polls and zero wake-word listening threads.
Stop Latency
< 50ms via provisional trailing VAD. Rather than waiting for speech to end to start transcribing, Dot streams provisional PCM chunks in real-time. On key release, the trailing silence boundary is computed instantly and committed directly to the cursor via the macOS Accessibility API.
Dual Engine
On-device Neural Engine or hosted BYOK. Run 100% offline with macOS built-in
SFSpeechRecognizer (zero network, zero key), or connect low-latency APIs (Groq Whisper Large v3 Turbo at ~300ms, OpenAI, Deepgram, Azure, ElevenLabs), or self-hosted Ollama & vLLM endpoints.Keychain Isolation
kSecClassGenericPassword. Stored credentials reside strictly in the encrypted macOS Keychain. Switching providers retains each key so you never have to re-enter credentials, with 1-click single key deletion or global purge.
Zero Data Retention
Enforced upstream headers. Cloud API requests strictly mandate non-logging parameters (
mip_opt_out=true on Deepgram, enable_logging=false on ElevenLabs, storeAudio=false on Azure). Upstream providers never log audio or train on your voice.Resource Footprint
< 15 MB resident RAM. Handcrafted in Swift 6, AppKit, and SwiftUI. Zero Electron, zero webviews, and zero third-party framework overhead.