
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.
- 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
- 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
curl -L https://github.com/sumerc/zee/releases/latest/download/zee_darwin_arm64.tar.gz | tar xz
# Intel
curl -L https://github.com/sumerc/zee/releases/latest/download/zee_darwin_amd64.tar.gz | tar xzGROQ_API_KEY=xxx ./zee # Groq Whisper
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.
git clone https://github.com/sumerc/zee && cd zee
make build # CLI binary
make app # macOS DMGSet at least one API key, 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.
