PRIVACY GUIDE · JULY 2026
Don't trust "offline" claims. Test them.
Every dictation app on the market now calls itself private. Some are. Some mean "we encrypt your audio before we store it." The difference isn't on the marketing page — it's in your network traffic. Three tests settle it in about ten minutes.
Why "private" stopped meaning anything
As of July 2026, essentially every dictation app claims privacy: private by design, your data stays yours, offline mode. These are labels, not properties. Some apps transcribe in the cloud and call transport encryption privacy. Some transcribe locally but still send analytics, telemetry, and "product improvement" data. A few genuinely do everything on-device.
You can't tell them apart by reading their websites. You can tell them apart by measuring what leaves your machine. Here are the three tests, from most precise to most blunt. They work on any macOS dictation app — including ours.
Test 1 — nettop: watch the wire while you talk
nettop ships with macOS and shows every process with open network connections,
live. This is the definitive test.
- Open Terminal (Applications → Utilities → Terminal).
- Run
nettop. You'll get a live table: process name, connections, bytes in, bytes out. - To watch only the dictation app, find its PID in Activity Monitor (search the app name, note the PID column), then run
nettop -p 12345with that PID. - Click into any text field and dictate steadily for 30 seconds, eyes on the table.
What you should see
Genuinely offline: nothing. The process either doesn't appear in nettop
at all, or its bytes_in and bytes_out counters sit flat while you speak.
Cloud in a trench coat: a connection opens the moment you start dictating,
and bytes_out climbs for as long as you talk. That is your audio leaving the
machine in near-real-time — on the order of hundreds of KB per minute of speech.
One legitimate burst: on first launch, an offline app downloads its speech model — a single large transfer, typically hundreds of MB, then done forever. That burst is the model arriving, not your voice leaving. After it completes, dictation should produce silence on the wire.
Test 2 — Little Snitch: name the hosts
nettop tells you that an app is talking; a connection monitor tells you to whom. Little Snitch (paid, with a demo mode) and LuLu (free, open source) both show every live connection per app, including the remote hostname.
- Start the network monitor, dictate for 30 seconds, then inspect the dictation app's entry.
- What you want: zero connections. Full stop.
- What you might find instead: connections to analytics providers, crash-reporting endpoints, "api" subdomains, or CDN hosts that open when the mic opens.
Hostnames are the tell. A connection to an update server at launch is boring. A connection to a transcription or telemetry endpoint that opens when you start speaking is the answer to your question — whatever the settings page calls itself.
Test 3 — airplane mode: the blunt instrument
Turn Wi-Fi off (and unplug Ethernet, if you use it). Then run the full loop: open the app, dictate a paragraph into a text field, stop, read the text.
- Truly offline app: everything works, indistinguishable from online. Dictation, cleanup, custom vocabulary — all of it.
- Legitimate failures: the first-run model download (needs network exactly once), update checks, and license validation on apps that activate online. These should fail at those specific moments, loudly, and nowhere else.
- Illegitimate failures: dictation itself errors, hangs, or silently produces nothing. If your words can't become text without a network, your words were going to the network.
Reading the results: legitimate traffic vs red flags
| Traffic | When | Verdict |
|---|---|---|
| Speech model download (hundreds of MB, one burst) | First launch, or a model update | Legitimate — the model arriving |
| Update check (a few KB) | App launch | Legitimate — version metadata only |
| Crash report | After a crash, with your consent | Legitimate if opt-in and disclosed |
| Sustained upload while you dictate | During dictation | Red flag — that's your audio |
| Connections to analytics / telemetry hosts | Any time | Red flag for an "offline" claim |
| Periodic screenshot-sized uploads when idle | Any cadence | Red flag — capture, not dictation |
One nuance on sizing: a minute of speech, compressed for transport, is a few hundred KB — suspiciously close to the size of a screenshot. You don't need to do forensics on byte counts. The simple rule covers almost everything: an offline dictation app has no reason to send anything while you dictate.
What we did with LockedIn Flow — and how to check us
LockedIn Flow is built on FluidAudio, an on-device speech framework. FluidAudio exposes a
hard switch — ModelHub.offlineMode — that makes the framework refuse every network
fetch in code. Our self-test mode sets that flag and then transcribes a file: if the
transcription succeeds, it was offline by construction, because the network was
refused, not avoided. Recognition runs on the Apple Neural Engine; cleanup runs on a local
model. There's no account and no telemetry endpoint to call even if it wanted to.
But don't take our word for it — that's the whole point of this article. Download the trial,
let the model download finish, run nettop -p on us, and dictate. The counter should
sit flat. If you ever catch traffic during dictation, that's a bug, and we want to hear about it:
feedback@lockedinflow.com. More on the architecture in our
Wispr Flow comparison, and what it costs on the
pricing page.
FREE 14-DAY TRIAL · NO CARD · NO ACCOUNT
Test us. We insist.
Everything unlocked for 14 days. Run test 1 on us first, if you like — flat counters or don't buy.
Download for macOSTest procedures verified on macOS as of July 26, 2026. App behavior changes with versions — run the tests against the build you actually have.