FluidVoice shipped v1.6.8 on 11 August. Buried in the notes is a fix for microphones being silently mis-selected in clamshell mode, and after disconnects, reconnects, and audio-route changes. I read that line twice. Nobody writes a fix that specific until a lot of people have shouted at them.
A README describes what a project wants to be. The release notes record what keeps breaking. If you want to know whether a tool survives contact with your actual desk — the dock, the AirPods, the USB mic you unplug on Fridays — the second document is the one to read. A changelog is a confession.
altic-dev/FluidVoice is a free macOS dictation app written in Swift, sitting at 10.3k stars and 987 commits. It ships as a Homebrew cask. You press a global hotkey, speak, and the text lands in whatever app has focus, inserted through the accessibility APIs. Speech-to-text runs entirely on your Mac, and an optional second model rewrites the transcript before insertion. The stated pitch is a local replacement for Wispr Flow, which costs $144 a year. Licence is GPLv3 as of February 2026, Apache 2.0 before that.
Why bother, when macOS already dictates
The honest objection is that this problem was solved a decade ago and shipped in the operating system for free. Apple’s dictation works, costs nothing, and needs no 3.5 GB download.
The answer isn’t accuracy. On-device Parakeet and Whisper are good, but so is Apple’s recogniser for most English. The answer is everything wrapped around the recognition step: a live overlay showing words as you speak before they’re committed, a choice of models so you can trade latency against language coverage, and a per-app rewriting layer that formats a Slack message differently from a commit message. That last one is where the project gets interesting, and where it gets into trouble.
The part I find interesting: two models, two jobs
FluidVoice runs a two-stage pipeline, and the two stages have completely different characters.
Stage one is transcription, and it’s a menu. Parakeet TDT v3 is the default at roughly 500 MB and 25 languages. Parakeet Flash is around 250 MB, English only, tuned for the lowest latency. Nemotron Speech 3.5 covers about 40 languages at roughly 670 MB. Cohere Transcribe is the accurate slow one at about 1.4 GB. Whisper runs from 75 MB to 2.9 GB across 99 languages and is the only path on Intel Macs. Apple Speech needs no download at all. Pick your trade-off, swap it whenever.
Stage two is Fluid Intelligence, running a custom model called Fluid-1. Roughly 3.5 GB, fully local, no API key. It cleans fillers, fixes capitalisation, and adapts tone to whichever app you’re dictating into.
Here’s the design decision that makes the whole thing work and simultaneously makes it unpredictable: stage two is a generative model rewriting your text, not a formatter applying rules. That is why it can turn a rambling sentence into a tidy Slack message, and it’s also why it can decide your sentence is an instruction rather than content. One reviewer dictated a short phrase and had a chatbot-style refusal pasted into their document. Issue #539 reports the app writing sentences the user never spoke, and was closed as not planned.
A formatter can be wrong about a comma. A rewriter can be wrong about what you meant.
# the fast way
brew install --cask fluidvoice
# or build it yourself, signed debug build
git clone https://github.com/altic-dev/FluidVoice.git
cd FluidVoice
./build.sh # output lands in DerivedData/Build/Products/Debug/
If you have no signing identity, ./build.sh unsigned works, but each rebuild ties the binary to a new version and macOS may make you revoke and re-grant Accessibility permission. Worth knowing before you start iterating.
What it actually costs to run
macOS 15 Sequoia or later, no exceptions. Apple Silicon for every model except Whisper, which is the fallback path for Intel Macs. Budget about 1 GB for a voice model and another 3.5 GB if you want the enhancement layer, so 4.5 GB before you’ve dictated a word.
On speed, treat the front-page claims as the developer’s own numbers rather than a benchmark. The more informative figure is in a release note: first-word capture latency was cut from around 350 ms to under 100 ms, explicitly to stop the app eating the start of sentences. That tells you both that the problem existed and roughly how big it was.
Caveats, honestly
The headline feature is not the open-source part. GPLv3 covers the Swift app. Fluid Intelligence is a separately maintained private runtime, kept closed so the core can stay free. I assumed that “open source, on-device AI” meant I could read the model runtime. I was wrong, and the README is clear about it if you read past the badges.
Microphone handling is the recurring failure class. Reviewers report dictation going silent after switching to AirPods, the wrong input being selected after an update, and pinned USB mics losing their status on replug. v1.6.8 added a saved microphone priority list with device history, which is a good fix and also confirms how long this has been a problem.
A rollback button is a first-class UI element. The app ships “Get previous Builds” so you can retreat from a bad release. Releases land roughly weekly from one maintainer with no QA team. That button exists for a reason, and the reason is not confidence.
Analytics are on by default. The README’s own privacy heading says opt-in while the text below it says enabled by default. The developer is specific that voice, audio, and transcripts are never collected, and the toggle works. But default-on telemetry in an app marketed on nothing leaving your Mac is a choice worth noticing.
You cannot file a bug. Issue creation is restricted on the repository. For a project with 10.3k stars and a visible queue of open bugs, that’s a real constraint on how you get problems in front of the maintainer.
Skip this if you need verbatim output. Quotes, medical notes, contracts, anything where paraphrase is a defect rather than a feature. The rewriting layer is the product; you can turn it off, but then you’re using a model picker with a nice overlay.
Where it sits next to Wispr Flow
| FluidVoice | Wispr Flow | Handy | |
|---|---|---|---|
| Best at | Free, local, model choice, per-app tone | Polish, stability, iOS and Windows | Simplicity, MIT, near-verbatim output |
| Falls down on | Reliability, closed AI core, macOS 15+ only | $144/year, cloud processing | No AI layer, minimal punctuation |
What I’d steal
The idea worth taking isn’t the model stack, it’s the distinction the project hasn’t drawn clearly enough: cleaning up dictation and rewriting dictation are two different products that happen to use the same technology. Ship them as one feature and you get a tool that’s brilliant on Tuesday and hands you a refusal message on Wednesday.