Dictation is the fastest way onto a screen, and the easiest way to hand a recording to a server I do not own. I do not run a dictation app that sends audio off the device. Personal data is in scope in my household, so dictation audio is unexportable as a rule that picked the stack before I named an app. This is the ground behind Sovereign & local AI.
TL;DR
- The cloud-dependent apps were rejected outright: sending audio off the device fails the one non-negotiable criterion.
- Inference runs on-device on both platforms, with no network required.
- Parakeet is the primary model over Whisper, and the language is set by hand per session, never auto-detected.
The decision, and the criteria that mattered
The decision was which dictation stack to run on the Mac and the iPhone, and three criteria were fixed before any option was introduced.
- On-device inference only. Zero audio egress, zero network required. A hard disqualifier, not a preference.
- French and English bilingual quality on short clips. My dictation runs in seconds, not in meetings.
- Explicit per-session language control. No auto-translation between the two languages.
Fixing the criteria first makes the rest a decision, not a preference for one vendor: every option is measured against the same three lines.
Two ways to run dictation
Dictation splits two ways, on where the audio goes. Cloud-dependent apps upload the recording and return text; that convenience is why the class exists. On-device apps keep the recording local: Wispr on macOS, open source under Apache 2.0, free, and requiring no account, and Spokenly on iOS with its Local Only Mode enabled explicitly in settings.
The app choice and the model choice are separate decisions, because both apps can run either candidate. The candidates are NVIDIA Parakeet, which the record carries as Parakeet V3 on macOS and V2 on iOS, against OpenAI Whisper distil-* variants. Parakeet V3 is a ~400MB download covering 25 languages; Whisper is the wider-known family.
The comparison, against the stated criteria
| Option | On-device inference only | French and English on short clips | Language set per session |
|---|---|---|---|
| Cloud-dependent apps | Fail: audio is uploaded | Not weighed | Not weighed |
| Wispr, Spokenly | Pass: no network required | Runs either model | Per-session selector |
| NVIDIA Parakeet | Pass | Primary: beat Whisper on French/English clips of 5–10s | French or English, pinned by hand |
| OpenAI Whisper | Pass | Fallback: kept, not chosen | French or English, pinned by hand |
The cloud class fails the first column, so its other two cells are never weighed. The last two rows carry the model decision.
What I run, and why
I restricted the stack to on-device inference only: Wispr on macOS with Parakeet V3, and Spokenly on iOS with Local Only Mode enabled explicitly in settings. Any candidate that sends audio off-device is disqualified regardless of its other merits. On the model side, Parakeet is the primary, V3 on macOS and V2 on iOS, with Whisper retained as a fallback. Language never auto-detects: I set French or English explicitly per session through the Spokenly per-session language selector, available since a February 2026 release.
Each part won for the same reason the cloud class lost: it keeps inference local. That line is the register shared with local-first runtime tiers, where the split between local and cloud is decided per profile.
What I gave up
The criterion came before the comparison, so the cloud apps’ merits were surrendered rather than weighed. Whatever a cloud app does better, I gave it up without pricing it. The rule also narrows the field to the two apps that keep inference local.
Parakeet’s lead is not absolute. Whisper stays installed as the fallback, and the benchmark that put Parakeet first is the record’s own claim, not a measurement of mine. Two decisions next door run the same way: the cutoff-survival test ranks every dependency by whether it survives a vendor cutoff, and one EU model is the default workhorse.
When the other option is right
The rule is not a verdict on cloud dictation in general. Where audio egress is acceptable, because no personal data is in scope, a cloud app’s merits can be weighed normally against an on-device one, and it may win on features I never got to price. The on-device choice answers one constraint, not every one.
The model follows the same shape: where Parakeet does not handle a clip, Whisper is the fallback.
Two neighboring registers stay off this page. Moving the household mail, docs, and calendar out of the cloud follows the same motive elsewhere, conditional on publication (AT-21) –>, keeping a backup to the recipe rather than the bytes is a separate rule, and a self-hosted messaging island is its own build.
This stack is mine to operate, and its trade-offs sit on the about page. If this is the shape of your problem, let’s talk.