zee
Voice transcription that stays out of your way.
Supports Groq, OpenAI, Mistral, ElevenLabs and Deepgram models.
Push-to-talk, tap-to-toggle, or real-time streaming. Pure Go. Sub-second fast.
- Offline, on-device — on Apple Silicon, transcribes fully locally via Parakeet (parakeet.cpp, CPU) with no API key and no network. Cloud providers are optional and switchable from the tray.
- System tray app — lives in the menu bar. Switch microphones, transcription providers, and languages from the tray menu. Dynamic icons show recording and warning states.
- Two recording modes — push-to-talk (hold hotkey) or tap-to-toggle (tap to start/stop).
- Real-time streaming — when a streaming-capable model is selected (e.g. Deepgram Nova-3), words appear as you speak and auto-paste into the focused window incrementally.
- Fast batch mode — HTTP keep-alive, TLS connection reuse, pre-warmed connections, streaming encoder runs during recording (not after). Typical key-release to clipboard: under 500ms.
- Auto-paste — transcribed text goes straight to clipboard and pastes into the active window. In streaming mode, each new phrase pastes as it arrives.
- Silence detection — VAD-based voice activity detection warns when no speech is heard. In streaming mode, auto-closes recording after 30 seconds of silence.
- Pure Go encoding — MP3 and FLAC encoders, no CGO. Three formats:
mp3@16(smallest),mp3@64(balanced),flac(lossless). - Multiple providers — Groq, OpenAI, Mistral, ElevenLabs, and Deepgram, switchable from the tray menu at runtime.
- 36 languages — select transcription language from the tray menu or via
-langflag. - Cross-platform — minimal dependencies, pure Go where possible.
- macOS (Apple Silicon)
- Linux
- Windows
curl -fsSL https://raw.githubusercontent.com/sumerc/zee/main/install.sh | bashDownloads the latest DMG, verifies its SHA256 against checksums.txt, copies Zee.app to /Applications, and clears the quarantine attribute. Pin a version with VERSION=vX.Y.Z bash.
- Download
Zee-<version>.dmgfrom the latest release - Open the DMG and drag Zee.app to Applications
- Clear quarantine:
xattr -cr /Applications/Zee.app
For terminal usage:
# Apple Silicon (the only supported target)
curl -L https://github.com/sumerc/zee/releases/latest/download/zee_darwin_arm64.tar.gz | tar xz./zee # offline, on-device (no key needed)
GROQ_API_KEY=xxx ./zee # Groq Whisper (cloud)
DEEPGRAM_API_KEY=xxx ./zee # Deepgram (streaming auto-enabled when a streaming model is selected from the tray)
./zee -debug-transcribe # include transcription text logsNote: When running from a terminal, macOS permissions (Microphone, Accessibility) are granted to the terminal app (e.g. Ghostty, iTerm2, Terminal), not to zee itself.
Requires Apple Silicon, plus cmake and the Xcode Command Line Tools (for the one-time on-device STT engine build).
git clone https://github.com/sumerc/zee && cd zee
make build # builds the local STT engine (cmake) + CLI binary;
# first run also fetches the default models (~900 MB) into models/parakeet/v1/
make app # macOS DMGThe submodule, static libraries, and models are all set up automatically by make build — no manual steps.
On Apple Silicon, zee works offline out of the box — no key required. To use a cloud provider instead, set its key (pick the provider from the tray), then run zee:
export GROQ_API_KEY=your_key # batch mode (Groq Whisper)
export OPENAI_API_KEY=your_key # batch mode (OpenAI Whisper)
export DEEPGRAM_API_KEY=your_key # streaming mode (Deepgram)
export MISTRAL_API_KEY=your_key # batch mode (Mistral Voxtral)
export ELEVENLABS_API_KEY=your_key # batch mode (ElevenLabs Scribe)
zee # starts in menu bar, hold Ctrl+Shift+Space to recordNote:
exportonly works in the current terminal session. To make API keys available toZee.appwhen launched from Spotlight or Applications, uselaunchctl:launchctl setenv GROQ_API_KEY your_keyAdd this to your
~/.zshrcso it runs on every login.
zee runs as a system tray app in the menu bar. Hold Ctrl+Shift+Space to record, release to transcribe. Result auto-pastes into the focused window.
Use the tray menu to switch microphones, providers, and languages — or use -setup for initial device selection.
On first run, macOS will prompt for permissions:
-
Microphone — Required for audio recording. System Settings → Privacy & Security → Microphone.
-
Accessibility — Required for global hotkey and auto-paste. System Settings → Privacy & Security → Accessibility.
If permissions aren't granted, zee will fail silently or the hotkey won't register. Run with -doctor to diagnose permission issues.
make test # unit tests
make test-integration # integration tests (builds binary, requires GROQ_API_KEY)
make integration-test WAV=test/data/short.wav # single-file integration test (requires GROQ_API_KEY)
make benchmark WAV=file.wav RUNS=5 # multiple runs for timing| Flag | Default | Description |
|---|---|---|
-format |
mp3@16 | Audio format: mp3@16, mp3@64, or flac |
-autopaste |
true | Auto-paste into focused window |
-setup |
false | Select microphone device |
-device |
(default) | Use named microphone device |
-lang |
en | Language code (e.g., en, es, fr) |
-debug |
true | Enable diagnostic logging |
-debug-transcribe |
false | Enable transcription text logging |
-doctor |
false | Run system diagnostics and exit |
-logpath |
OS-specific | Log directory (use ./ for current dir) |
-hints |
- | Vocabulary hints for transcription (comma-separated) |
-transcribe |
- | Audio file to transcribe and exit |
-benchmark |
- | WAV file for benchmarking |
-runs |
3 | Benchmark iterations |
-version |
false | Print version and exit |
| Variable | Description |
|---|---|
ZEE_LOG_PATH |
Log directory override |
ZEE_PPROF |
pprof server address (e.g., :6060) |
ZEE_CRASH=1 |
Trigger synthetic crash for crash-log testing |
ZEE_LONGPRESS_DURATION |
Hybrid hotkey long-press threshold (e.g., 350ms) |
ZEE_SAVE_LAST_AUDIO=1 |
Enable tray action to save the last recording sample |
Started as a vibe-coding project but turned into a standalone app I use daily for all my speech-to-text. Built with AI, love, and care — the kind of polish you get when you actually use the thing you're building.
