free · on-device · no word limit

Hold fn
Talk.
It's typed.

The free, local alternative to Wispr Flow. Whisper runs on your Mac's GPU, the text lands wherever your cursor is, and every dictation is kept with its audio.

Download for Mac macOS 15+ · Apple Silicon · 187 MB · v0.9.7
Hold fnwaiting for fn
you speak…
on your Mac · nothing sent
whisper · large-v3-turboMetalready

Real output, unedited: a 7.6-second sentence in a synthetic macOS voice, transcribed by FnFlow on an M4 Pro Mac.

1.2 sfrom release to text7.6 s sentence, Whisper kept warm
0.0%CPU while idlemeasured with ps on 0.9.2
45 msto load 1,258 dictationshistory read in parallel
0 bytessent while you dictatemodel download is the only network use
Benchmarks we actually ran

Gets your jargon right. The built-in engine doesn't.

Same recording, same Mac: the speech engine built into macOS against FnFlow's Whisper. Plain speech is fine either way; names, acronyms and tech terms are where it splits.

RunTime to textTerm errors
macOS built-in (SpeechAnalyzer)–3 of 3
FnFlow, cold start (0.8.1)2.26 s0
FnFlow, kept warm (0.9.1+)1.17–1.19 s0

7.6 s sentence, synthetic macOS voice, M4 Pro, 4 Oct 2026. Apple time not measured separately. Whisper large-v3-turbo via whisper.cpp with Metal and flash attention.

What ships in the box

Small model now, big model in the background.

We ran 32 real dictations through every light Whisper model to pick the one that ships inside the 187 MB download. Below ~200 MB, only small holds up in Russian; base and tiny turn sentences into noise. large-v3-turbo downloads on Wi-Fi after install and FnFlow switches to it on its own.

ModelSizeDiff, RUDiff, EN-heavyCold run
large-v3-turbo · later1.62 GBreferencereference4.01 s
small-q5_1 · built in190 MB24%41%1.36 s
base148 MB35%65%0.97 s
base-q5_160 MB34%70%0.73 s
tiny78 MB52%65%0.24 s

32 real dictations (24 Russian, 8 mostly English with Russian mixed in), ~10 s each, M4 Pro, 5 Oct 2026. Word diff = word-level edit distance against large-v3-turbo's output, not against a human transcript. Cold run = one whisper-cli call including model load; with the warm server a phrase takes about a second.

Where it types

Made for the apps you live in.

Electron apps hide their text fields from macOS until someone asks. FnFlow wakes up their accessibility tree, pastes, then reads the field back to confirm the text actually landed.

CursorVS CodeClaudeSlackObsidianMailNotes
Recording pill: recording, 7 seconds, live waveform Recording pill: transcribing with Whisper Recording pill: pasted Recording pill: saved, press Command V to paste
Never lose a dictation

Every recording stays, with its audio.

Bad transcript? Re-run the same audio with the other engine. Paste didn't land? It's one click away in history.

FnFlow history window in dark mode: filters, dictations grouped by day, transcript with player, Copy and Retry with Apple

Audio + text, on disk

JSON and CAF per dictation in a folder you own. Search, play back, copy again.

Retry with the other engine

Apple for plain speech, Whisper for jargon. Switch per recording, no need to talk twice.

Honest paste status

Pasted, paste sent, or saved for ⌘V. You always know where your words went.

Under the hood

Boring, local, inspectable.

Swift 6 · SwiftUI · macOS 15+

Native menu-bar app. No Electron, no web view, no background browser. Liquid Glass on macOS 26.

Apple SpeechAnalyzer

The on-device engine that ships with macOS 26. A second option there; on macOS 15 FnFlow runs on Whisper.

whisper.cpp 1.9.4 (MIT), built in

Built from a pinned commit, statically linked, Metal shaders embedded. No Homebrew. Flash attention on the GPU, CPU fallback if Metal fails.

Warm model on 127.0.0.1

Starts when you press fn, so it loads while you talk. Shuts down after 3 idle minutes to free ~1.6 GB.

~/Library/Application Support

History as JSON + CAF, files mode 600. Old recordings go to the Trash, not into the void.

os_log, no transcripts

Timings and errors in Console.app for debugging. Your words are never logged.

vs Wispr Flow

Same gesture. Different deal.

FnFlowWispr FlowSuperwhisper
PriceFree$15 / month$8.49 / month or lifetime
Free usageUnlimited2,000 words / week3,000-word trial, then free tier
Where speech is processedOn your MacCloudOn your Mac or cloud
Rewrites your wordsNoYesOptional
Keeps audio of each dictationYes––

Competitor data from their websites and reviews, September 2026. "–" = not verified.

Early

New, and honest about it.

No wall of tweets yet. No invented ones either. Run it on your own jargon and tell us where it slips.

Download for Mac
Pricing

Free. No word counter.

$0no account
  • Unlimited dictation
  • Custom vocabulary: spelling hints + replacements
  • Whisper built in, Apple engine on macOS 26
  • History with audio, retry, search
  • Paste check in Electron and native apps
Download for Mac
Known limits
  • Apple Silicon only, macOS 15 or later; the Apple engine needs macOS 26
  • Best accuracy after the 1.6 GB model finishes downloading in the background
  • English and Russian are tested; other languages may work with Whisper
  • No iPhone or Windows version

FAQ

Why fn?

It's the one key almost nobody uses while typing. Hold to talk, double-tap for hands-free. Set macOS "Press 🌐 key to" to "Do Nothing" first.

Does it work in Cursor and other Electron apps?

That's what it was built for. FnFlow asks Electron apps to expose their text fields, pastes, then checks the field. If an app still refuses, the text waits in history and the pill tells you to press ⌘V.

Is anything sent to a server?

No. Recognition runs locally. The network is used once to download a model. The warm Whisper server listens on 127.0.0.1 only.

Why is it faster after the first dictation?

The model is loaded when you press fn and kept in memory for 3 minutes. Turn that off in Settings if you'd rather save the ~1.6 GB.

Can it learn my project's names?

Yes. Add terms in Settings → Vocabulary and FnFlow passes them to Whisper as a spelling hint on every run. On a test sentence that turned "update Zapot" into "update Saypad" and "по Устгарсе" into "Postgres". Replacements ("кубернетес" → "Kubernetes") fix the finished text with any engine.

Does it clean up my speech with AI?

No. It types what you said. Whisper adds punctuation; nothing is rephrased.

Where is my data?

~/Library/Application Support/FnFlow: one JSON and one audio file per dictation. Delete moves them to the Trash.

Hold fn. Talk. Ship.

Download for Mac Free · macOS 15+ · Apple Silicon · 187 MB