Local, on-device voice-to-text for the desktop.
Hold a key, talk into any app, and get clean, formatted text dropped right at your cursor — transcribed locally with Whisper, polished by AI, and never uploaded.
Murmur is a tiny menu-bar app that turns speech into text anywhere you can type.
- 🎙️ Hold-to-talk, anywhere — press and hold ⌥ Space in any app, speak, release. The text appears at your cursor.
- 🧠 Transcribed locally with Whisper — runs on your CPU or GPU (Metal on macOS). No audio ever leaves your machine.
- ✨ Polished by AI — a cleanup pass strips filler words, fixes punctuation and capitalization, and formats the result.
- 🔒 Private by design — no account, no sync, no telemetry, no cloud. Download, grant mic access, and talk.
- 🗂️ A real desktop app — searchable history, words-saved stats and a streak, every setting on one screen.
- 🪶 Light & native — a Tauri app (Rust + system webview), ~7 MB installer, with a frosted floating overlay.
- 🌍 Multilingual — English, Spanish, French, German, Japanese, Chinese, with auto-detect.
- 🖥️ Optional remote server — offload transcription to a beefier machine over an OpenAI-compatible endpoint.
you speak whisper ai polish inserted
───────── ───▶ ────────────────── ───▶ ─────────────── ───▶ ────────────
hold ⌥ Space transcribe on-device filler & grammar at your cursor
┊
✗ the cloud — never touched ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┘
Audio is captured, resampled to 16 kHz mono, transcribed by Whisper in memory, cleaned up, then written to the focused field via the clipboard + a synthetic paste. Nothing is written to disk or sent anywhere.
![]() |
![]() |
| Home — every dictation, searchable, with stats and your streak. | Voice & model — mic, hotkey, language and the Whisper picker. |
Murmur ships every OpenAI Whisper size — pick the one that fits your machine. Smaller is faster, larger is sharper, and they all run entirely on-device. Models download on first use and you can switch any time.
| Model | Download | Speed | Accuracy | Best for |
|---|---|---|---|---|
tiny |
75 MB | 32× realtime | ●●○○○ | Quick notes |
base |
142 MB | 16× realtime | ●●●○○ | Everyday chat |
small |
466 MB | 6× realtime | ●●●○○ | Balanced |
medium |
1.5 GB | 2× realtime | ●●●●○ | High accuracy |
large-v3 |
2.9 GB | 1× realtime | ●●●●● | Best quality · default |
Most dictation tools stream your microphone to someone else's servers. Murmur doesn't. Both transcription and the AI cleanup pass run on the one machine you control:
- Processed on-device — audio is transcribed in memory and discarded; never written to disk, never sent anywhere.
- No account, no cloud — no sign-up, no sync, no telemetry, no background phone-home.
- Open source, forever — every line is auditable here. MIT-licensed and free.
Grab the latest installer from the Releases page.
One-liner — downloads the latest universal build, installs it, and clears the Gatekeeper flag:
curl -fsSL https://raw.githubusercontent.com/kurenn/murmur/main/scripts/install-macos.sh | bashOr install the .dmg manually. Murmur is not notarized by Apple (no paid Developer account), so macOS
blocks the unsigned app on first open ("Apple could not verify…" / "will damage your computer"). It's safe —
allow it once:
- System Settings → Privacy & Security → click Open Anyway next to the Murmur message, or
- run
xattr -dr com.apple.quarantine /Applications/Murmur.appin Terminal.
On macOS 15+ the old right-click → Open no longer bypasses Gatekeeper — use Open Anyway or the command above.
| OS | File | Notes |
|---|---|---|
| Windows | .msi or .exe |
Requires WebView2 (preinstalled on Windows 10/11). |
| Linux | .AppImage or .deb |
AppImage: chmod +x Murmur*.AppImage && ./Murmur*.AppImage. |
On first launch, grant Microphone access — and on macOS, Accessibility (to paste at your cursor) and Input Monitoring (for the fn-key trigger).
Prerequisites: Rust (stable), Node.js 18+, and the Tauri v2 system dependencies for your OS.
git clone https://github.com/kurenn/murmur.git
cd murmur
npm install # installs deps + the git pre-commit hook
npm run tauri dev # run the app with hot-reload
npm run tauri build # produce a native installer in src-tauri/target/release/bundleRun transcription on another machine (e.g. a desktop with a GPU) and point the app at it from
Settings → Remote server. The bundled server exposes an OpenAI-compatible
/v1/audio/transcriptions endpoint:
cd server
./install.sh # creates a venv + installs the Whisper server (use Python 3.12)
./run.sh # serves on http://0.0.0.0:8000See server/README.md for details.
npm test # frontend specs (Vitest + Testing Library)
cd src-tauri && cargo test # backend specs (pure logic: polish, resample, config, …)A pre-commit hook (installed by npm install) runs tsc + Vitest on frontend changes and
cargo test on backend changes; CI (ci.yml) re-runs everything on macOS.
Releases are built on native macOS / Windows / Linux runners by release.yml.
murmur/
├── src/ # React + TypeScript UI (dashboard, overlay, onboarding, design system)
├── src-tauri/ # Rust backend
│ └── src/
│ ├── lib.rs # app wiring, tray, hotkey, commands, window setup
│ ├── audio.rs # microphone capture (cpal)
│ ├── transcribe.rs # Whisper (local) + remote transcription, WAV/resample
│ ├── polish.rs # AI/heuristic text cleanup
│ ├── inject.rs # clipboard + synthetic paste (accessibility-gated)
│ └── … # config, history, state
├── server/ # optional remote Whisper server (Python)
└── docs/ # the marketing site (GitHub Pages → kurenn.github.io/murmur)
MIT © Abraham Kuri Vargas. Free and open source — no trial, no seat count, no paywall.

