On-device, push-to-talk voice-to-text for macOS. Hold a key, speak, release — the transcript lands in whatever app has focus. Capture and transcription run entirely on your Mac; the only part that can reach the network is an optional cleanup pass you control.
A free, open-source alternative to Wispr Flow, Superwhisper, and MacWhisper.
- Fast and local. Apple's SpeechAnalyzer streams live partials while you talk; on release, Parakeet TDT re-reads the audio for a markedly more accurate final. Both models run on the Neural Engine, on your machine.
- Private by default. No audio ever leaves your Mac. The optional polish pass sends only text, and only when you enable it (see On-device vs. cloud).
- It learns your words. A glossary, learned corrections, and snippet expansion fix the names and jargon that generic recognizers keep getting wrong.
- Yours to change. Readable Lua plus a small Swift daemon. MIT-licensed.
Speech-to-text runs locally through ~/bin/hs-dictate, a small Swift daemon. While
you speak, Apple's SpeechAnalyzer / SpeechTranscriber (macOS 26) streams live
partials into an on-screen pill. On stop, Parakeet TDT re-reads the take's audio for
a more accurate final transcript (CoreML on the Neural Engine), falling back to
Apple's text automatically. Both models come from the
FluidAudio SwiftPM package and
download on first run (~570MB) to ~/Library/Application Support/FluidAudio/.
The daemon stays warm between takes with the models loaded and the mic engine hot, so takes start instantly and work offline.
| Key | Action |
|---|---|
| Hold Right ⌘, speak, release | Push-to-talk: transcribe and paste |
| Tap Right ⌘ | Hands-free: keep listening until you tap Right ⌘ again |
| Esc | Cancel the current take and discard it |
Murmur watches Right ⌘ with its own flagsChanged event tap. A short press counts
as a tap (hands-free); a longer press is a hold. Pressing any other key while
Right ⌘ is down means you were typing a normal ⌘-shortcut, so dictation silently
cancels and the shortcut goes through untouched.
Murmur does not install these for you — see the links.
- macOS 26 or later (for SpeechAnalyzer).
- Hammerspoon — the automation host Murmur runs in.
- Xcode Command Line Tools (Swift 6 toolchain) to build the daemon.
- ~570MB free for the on-device models (downloaded on first run).
git clone https://github.com/josephvore/murmur.git ~/murmur
~/murmur/install.shThe installer symlinks the Lua modules into ~/.hammerspoon, copies the example
data, ensures ~/.hammerspoon/init.lua starts Murmur (without touching the rest of
your config), and builds the Swift daemon into ~/bin/hs-dictate. If the Swift
toolchain isn't ready yet, everything else still installs — build the daemon later
with:
~/.hammerspoon/murmur/hs-dictate/build.shmacOS prompts the first time things run. Grant Hammerspoon:
- Accessibility — to paste and to read the surrounding context.
- Microphone — to capture audio.
Capture and transcription are fully on-device — no audio ever leaves your Mac.
The optional polish pass is the only exception. When enabled, it sends the transcript text to a cloud LLM to fix fillers, false starts, and punctuation (the Wispr-Flow-style cleanup). Murmur delegates this to its sibling app Hone (part of the Loadout suite), which talks to OpenAI / Groq / Cerebras using a key from your macOS Keychain.
- With Hone installed and a key set — every take gets the cloud polish.
- Without it — Murmur runs fully on-device: local cleanup only, nothing sent to the network. Words are never lost; they're just less polished.
To force fully-local operation even with Hone present, use the Literal profile
or set autoRefine = false at the top of murmur.lua.
- Auto — pick the treatment based on context.
- Prompt — tuned for prompts and instructions.
- Message — tuned for chat and email.
- Literal — no cloud polish; local cleanup only, fully on-device.
Your personal dictation data lives in ~/.hammerspoon/murmur/:
dictation_glossary.txt— canonical spellings of names and terms.dictation_corrections.tsv— learned "wrong → right" replacements.dictation_snippets.tsv— text expansions.
Murmur auto-learns frequently-seen proper nouns into the glossary so the recognizer stops mishearing them. These files are copied on install and are never overwritten on re-install, so your edits and learned terms stay put.
Pure-Lua replay tests for the cleanup pipeline (no Hammerspoon required):
lua ./tests/test_murmur.luaMurmur is part of the Loadout suite of free, open-source macOS utilities, which remains the source of truth for the shared code. This repository is the standalone home for the dictation app. Licensed under MIT.