Why this exists
There's an open-source dictation project called yaprflow. Out of the box, it covered the basics but didn't really feel like Wispr Flow.
I forked it and rebuilt the missing pieces feature by feature, trying to mirror Wispr Flow as closely as I could. Auto-paste into the focused field. Hold-to-talk and tap-to-toggle on the same key. Modifier-only hotkeys like ⌘⇧. A floating Wispr-style pill with audio bars at the bottom of the screen. Start and stop chimes. A clipboard history window with search. F-key support (F13 through F19, arrows, Page / Home / End).
The result is M1w234/yaprflow-mw: my fork, free, Apache 2.0, no signup wall.
Does it need internet?
Once it's installed, no. The speech model runs on Apple's Neural Engine, on your Mac. Audio never leaves your computer. There are no accounts and no telemetry. You can dictate on a plane.
For the install itself, yes. You'll need internet once to clone the repo from GitHub and download the speech model from Hugging Face. After that, it's fully offline.
What you get
- Auto-paste. Synthesized ⌘V drops the transcript straight into whatever field is focused. Won't paste into the wrong window if you ⌘Tab away mid-recording. Bails on password fields.
- Two hotkey gestures. Hold-to-talk or tap-to-toggle, pick whichever feels right. Modifier-only chords (like ⌘⇧) get both: hold to talk, or double-tap to lock recording on.
- F-key hotkeys. F13 through F19, arrows, Page / Home / End all bindable. No "must include a modifier" guard.
- Wispr-style overlay. Floating pill at the bottom-center of the screen with three audio-level bars that bounce as you speak.
- Start / stop chimes. Soft system sounds confirm the mic is open and closed. Togglable.
- Clipboard history. ⌃⌥V opens a searchable history window that auto-pastes back into the app you were in.
- Optional grammar correction. An on-device MLX language model polishes transcripts before paste. Off by default, toggle on if you want it.
- 100% local. Audio never leaves your Mac. No accounts. No telemetry.
Install it
Two paths. If you already use Claude Code, take the easy one. If not, follow the manual steps.
Path 1: Let Claude Code do it (recommended)
If you have Claude Code installed (desktop app, CLI, or browser version), open it in a fresh directory and paste this prompt:
Please install yaprflow for me from this repo: https://github.com/M1w234/yaprflow-mw.git
Read CLAUDE.md and README.md first. Clone the repo, install any missing prerequisites (Xcode, huggingface_hub, Metal Toolchain), download the speech model, and run ./scripts/dev-build.sh. Walk me through the manual steps that need me to click something in System Settings (Microphone permission, Accessibility permission, hotkey binding).
Claude Code reads the project's CLAUDE.md for the gotchas (the broken upstream model-fetch script, the Accessibility permission reset after rebuilds) and handles them. The only things it can't automate: clicking "Allow" on macOS security prompts, and installing Xcode from the App Store (which is ~12 GB and needs your Apple ID).
Path 2: Manual install
You'll need these first:
- macOS 14 (Sonoma) or later. Apple Silicon recommended. The speech model is optimized for the Neural Engine.
- Xcode 16+. Install from the App Store, then run
xcode-select --install for the Command Line Tools. - Metal Toolchain. Xcode 16 doesn't ship this by default. If the build fails with
cannot execute tool 'metal', run xcodebuild -downloadComponent MetalToolchain (about 700 MB, one time). - Python 3 with
huggingface_hub. Install with: pip install huggingface_hub - ~500 MB free disk. Speech model is roughly 450 MB plus build artifacts.
Then in Terminal:
git clone https://github.com/M1w234/yaprflow-mw.git
cd yaprflow-mw
HF_HUB_DISABLE_XET=1 huggingface-cli download FluidInference/parakeet-tdt-0.6b-v2-coreml \
--include "Preprocessor.mlmodelc/*" "Encoder.mlmodelc/*" "Decoder.mlmodelc/*" \
"JointDecision.mlmodelc/*" "parakeet_vocab.json" \
--local-dir Models/parakeet-tdt-0.6b-v2
./scripts/dev-build.sh
The dev-build.sh script does the full loop: builds the app, signs it ad-hoc, replaces /Applications/yaprflow.app, strips macOS Gatekeeper quarantine, and relaunches it. About 3 minutes on a cold build, 30 seconds on incremental builds.
One last step: grant Accessibility permission
Auto-paste needs macOS Accessibility access so it can synthesize ⌘V. Modifier-only hotkeys like ⌘⇧ need it too.
- Click the waveform icon in your menubar, then Auto-Paste.
- When prompted, grant access in System Settings → Privacy & Security → Accessibility.
- The menu row should now read "On" (instead of orange "Needs Permission").
If you rebuild from source later and auto-paste suddenly stops working, the code signature changed and macOS silently invalidated the permission. Reset it with tccutil reset Accessibility com.tmoreton.yaprflow, then re-click Auto-Paste in the menu.
Credits
The heavy lifting (the speech pipeline, MLX integration, the menubar app architecture, grammar correction) is all Tim Moreton's work on the original yaprflow. My fork just adds the UX polish to make it feel like Wispr Flow.
Speech model: FluidInference's Parakeet TDT 0.6B v2 (CoreML), CC-BY-4.0.
License: Apache 2.0, same as upstream.