Offline voice dictation on Android: what the options actually do
"Offline dictation" gets used for at least four different things on the Play Store: recognition that runs on the phone, recognition that runs on a server but caches text when you lose signal, an app that bundles a downloadable model but still calls home for other reasons, and an app that just says "private" on the listing. This is a rundown of the real options and what each one does with your audio. I make one of them, so read the part about where mine falls down.
Lexo is the keyboard this pipeline ships in. Thirty days free, then $9.99 once. Get it on Google Play
Everything below about someone else's product is quoted from that product's own documentation, read on 2026-07-26, with the page named. Where their docs don't say, I say they don't say instead of filling it in. Test on your own phone before betting anything on this.
What "offline" should mean
Three separate questions hide under the word, and products answer them differently:
- Does the audio leave the phone? This is the one people mean.
- Does the transcript leave the phone? Different question. Some systems recognize locally and then send the text somewhere for a cleanup or edit pass.
- Does it work in airplane mode? The one you can test in a minute, and the one that settles most arguments.
Google's on-device recognition and Gboard voice typing
Android has a built-in on-device speech recognizer with per-language packs you download. Google's support instructions route you through Settings > System > Languages & region > Speech > On-device recognition > Add a language.
Google's advanced voice typing page (read 2026-07-26) is more precise about the boundary than most third-party summaries are, and it deserves credit for that. It says: "The text you speak stays on your device and isn't sent to Google servers except when you use the 'Fix it' or detailed edits features." For those edit features it adds that "both your voice command transcript and the full text from the input field are sent to Google servers to process your request. No audio data is sent." The same page says advanced voice typing requires "Pixel 6 or up," and lists English, French, German, Italian, Japanese and Spanish.
Separately, Google's "Learn how Gboard gets better" page (read 2026-07-26) describes an opt-in donation program where "snippets of your audio input on Gboard are sent to and stored by Google to improve speech recognition."
What this adds up to: on a recent Pixel, in a supported language, Google's dictation is genuinely on-device and genuinely good. Off that path, on an older phone or a language without a pack, what happens is device-dependent and the docs don't promise you anything. That's the real caveat, not a conspiracy. Test yours with the network off.
FUTO Voice Input
A standalone voice input app that any keyboard can call. Its site (voiceinput.futo.tech, read 2026-07-26) says it is "designed to work entirely on-device with no data stored," links its source on GitLab, and sells a license as a one-time payment that also covers FUTO Keyboard, while the app is available free.
Their page does not name the underlying model, so I won't guess at it here. If you want an offline recognizer whose source you can read, this is the obvious first stop, and it pairs with keyboards that have no network access of their own, like HeliBoard.
Whisper-based apps
Whisper is OpenAI's speech recognition model, released with open weights under an MIT license, and it's the reason a wave of "offline transcription" apps exists at all. It runs fine on a modern phone through whisper.cpp and similar runtimes.
Two things to know before you pick one:
- "Whisper-based" does not mean local. Plenty of apps built on Whisper call a hosted API. The model being open says nothing about where a given app runs it. Airplane mode is how you tell.
- Whisper is a batch model, not a streaming one. It transcribes a chunk of audio at a time, so apps built on it usually either wait until you stop talking or re-run on a sliding window. That shapes how the app feels more than raw accuracy does. Its documented failure mode is fluent invention: on silence or noise it can emit confident text nobody said.
Lexo
Lexo (com.lexo.keyboard) is a keyboard with dictation built in, so there's no second app and no handoff. Being straight about the price: dictation is not the free tier. It sits behind the same one-time $9.99 unlock as the neural typing suggestions, after a 30-day free trial that starts when you finish setup. When the trial runs out, the keyboard keeps working on its word-frequency tier and the mic key stops until you buy.
The pipeline: 16 kHz audio through a silero voice-activity gate, then an NVIDIA Parakeet transducer (int8 ONNX) decoded through sherpa-onnx. It's an offline model run in a pseudo-streaming loop, re-decoding a trailing window about once a second and committing text behind a short lag, which gives you live-feeling transcription without the accuracy cost of a true frame-synchronous streaming model. On a Pixel 9 Pro XL the decode runs at roughly a 0.05 real-time factor, so about half a second of compute for a ten-second window.
Cleanup is where I want to be exact, because this is the step people assume is an LLM. It isn't. A small ELECTRA-based tagger with three heads (int8 ONNX, around 3 ms per turn) labels each token for deletion, casing and punctuation, catching fillers, stutters and self-corrections. Then a deterministic rule pass handles spoken punctuation, acronyms, number formatting, and register detection so it doesn't force capital letters and full stops into a terminal window. The whole stage fails open: if it's slow or unsure, you get the raw transcript rather than a mangled one.
Nothing about the audio path touches the network. The app declares INTERNET for three things and none of them is your speech: a one-time model download of about 1.2 GB on first run, Google Play billing, and anonymous crash reporting through Firebase Crashlytics. Crash reporting is off unless you turn it on, with a toggle at Settings > Advanced > Other > Send crash reports. Crash reports carry stack traces, device model and app version, never audio or transcripts.
The cleanup step is the whole experience
People compare dictation tools on word error rate and then pick based on something else entirely. What actually decides whether dictation feels usable is what happens to the transcript after recognition, and there are three levels:
- Nothing. You get "um so i think we should uh maybe ship it friday" and you fix it by hand. Fast, accurate, unpleasant.
- A tagger plus rules. Deletes disfluencies, adds casing and punctuation, formats numbers. Conservative by construction: it can only delete and relabel tokens, so it can't invent a sentence you didn't say. This is what Lexo does today.
- A generative rewrite. Run a language model over the transcript and let it restructure. This is why some dictation products feel like magic, and it's also why a rambling paragraph comes back tidy. It costs you a model big enough to do it, which usually means a server, and it can change what you said.
If you're comparing products, work out which of the three you're getting. A tool doing level three over a network will beat a level-two on-device tool on how the output reads, every time. It just isn't the same product.
How to test any of this in about a minute
- Turn on airplane mode. Dictate a long sentence. If you get text, recognition is local. If it stalls or errors, it wasn't.
- Do it again after a fresh install, before the app has downloaded anything. Some apps are local only after a model download that they don't mention up front.
- Come back online and watch it with NetGuard or PCAPdroid while you dictate. Local recognition with a cleanup pass that phones home looks fine in airplane mode and still sends your transcript when it can.
- For Lexo, here's what a capture should show: the one-time model download, then silence while you dictate, plus a Crashlytics heartbeat until you turn crash reporting off. If you see anything else, tell me.
Where Lexo loses
- Arabic dictation is broken right now. Not degraded, broken. Don't install it for that.
- English is much stronger than anything else. Spanish, Portuguese, Swedish, German and French also ship. Google's language coverage is in a different league and I'm not going to pretend otherwise.
- No generative cleanup. The tagger fixes fillers and punctuation; it will not turn a rambling thought into a tight paragraph the way a full LLM rewrite can. That's a deliberate tradeoff to keep the pass local and non-inventive, but it is a real capability gap.
- It's closed source. FUTO's recognizer publishes its source and mine doesn't. What I can offer instead is a five-permission manifest and an invitation to run the capture yourself, which is a weaker guarantee than reading the code.
- Big first-run download, about 1.2 GB of models, and the speed numbers above are from a Pixel 9 Pro XL. An older phone will be slower, and I don't have a published number for yours.
- Play Integrity blocks installing it on GrapheneOS and LineageOS, and the purchase path needs Play services. On a de-Googled ROM, FUTO Voice Input is your answer, not this.
- Crash reporting is opt-in. Real toggle, never carries audio or transcripts, and nothing is sent while it is off.
Picking one
On a recent Pixel in a supported language, Google's on-device voice typing is good and it's already installed. If you want an offline recognizer whose source you can read, or you're on a custom ROM, FUTO Voice Input. If you want offline dictation and an on-device suggestion model in one keyboard, with no second app in the chain, that's Lexo on Google Play.
Related: private and offline Android keyboards compared, and running a 0.5B language model inside an Android keyboard.