Android keyboard · on-device
The model runs
on your phone.
Lexo predicts your next word with a 0.5B language model and transcribes your voice with an offline speech recognizer. Both run on the device. Nothing you type or say is sent anywhere, and you don't have to take that on faith.
Free tier stays free. One-time $9.99 unlock for neural suggestions and dictation, 30-day trial. No subscription, no ads.
Keystrokes 0
- type below -
Leaving the device 0 bytes
- nothing -
Illustrative, not a live capture of your machine. The real check takes two minutes: install PCAPdroid or NetGuard, type and dictate in Lexo, and watch the log stay empty. Turn crash reports on above to see the one thing that would appear if you enabled it in the app - it ships off.
What's actually running
Measured on the shipping build, version 1.0.3 (4199).
-
Suggestion model
Qwen2.5-0.5B-Instruct, quantized to q8_0 - a 531 MB GGUF running through llama.cpp on CPU, 256-token context, four threads.
-
Why not bigger
Qwen2.5-1.5B bought 1.1 points of next-word top-1 accuracy (19.0% → 20.1%) for roughly 2.4× the decode cost. The ceiling is the predictability of short informal text, not model size.
-
Speech recognizer
NVIDIA Parakeet, ~0.6B, int8 ONNX through sherpa-onnx, with a silero voice-activity gate. Roughly 0.05 real-time factor on a Pixel 9 Pro XL - a ten-second window decodes in about half a second.
-
Transcript cleanup
An ELECTRA-small tagger, int8, about 3 ms per turn. It tags tokens for deletion, casing and punctuation, then a rule pass handles spoken punctuation and numbers. It is not a second model rewriting your speech, and it fails open: uncertain means it leaves your words alone.
-
First-run download
~1.2 GB, once, over Wi-Fi, verified by md5. The models live in the app's private files directory, so app updates stay small and never re-download them.
-
Languages
English, Spanish, Portuguese, Swedish, German and French for typing and prediction. English is meaningfully the strongest.
-
Built on
The open-source FlorisBoard project. Lexo itself is closed source, which is a real objection for some people and worth saying plainly.
Check it without trusting me
The design point is that nothing you type or say leaves the phone. That's a claim, and claims should be checkable. Here's everything you need to check this one.
Lexo declares exactly five permissions: RECORD_AUDIO for dictation, VIBRATE for haptics, POST_NOTIFICATIONS for download progress, plus INTERNET and ACCESS_NETWORK_STATE.
INTERNET covers three things and none of them is your text. The one-time model download. Google Play billing, for the paid unlock. And anonymous crash reporting through Firebase Crashlytics, which is off unless you turn it on at Settings › Advanced › Other › Send crash reports. Crash reports carry stack traces, the device model and the app version. They never carry what you typed or what you said.
So point PCAPdroid or NetGuard at Lexo. Past the model download, typing and dictating generate no traffic at all. If you turn crash reporting on, you'll see Crashlytics check in, and turning it back off stops that too. I'd rather tell you exactly what the capture looks like than promise silence and have you catch a heartbeat.
The models are open weight - Qwen under Apache-2.0, the Parakeet recognizer under CC-BY-4.0 - and the runtimes are llama.cpp (MIT) and sherpa-onnx (Apache-2.0). There's nothing secret on the model side.
What costs money
Free, permanently
$0
- Next-word suggestions from a word-frequency prior plus your own vocabulary
- A personal dictionary that never leaves the phone
- Swipe typing, layouts, emoji, clipboard history, themes, one-handed mode
One-time unlock
$9.99
- Neural suggestions from the 0.5B model
- Offline voice dictation with cleanup
- 30-day trial covering both, before you pay
- Not a subscription. No ads, at either tier.
Writing
Notes on building this, with the measurements included.
-
Running a 0.5B language model inside an Android keyboard
Why an IME is one of the more constrained places to put a model, and what it took to fit one there without making the keyboard feel slow.
-
Offline dictation on Android, end to end
The voice pipeline: a pseudo-streaming transducer, a learned cleanup tagger, and why the cleanup stage fails open.
-
Android keyboards compared, including where Lexo loses
Lexo against Gboard, SwiftKey, FUTO and others, written to be useful even when the answer is a different keyboard.
Where it's weak
- Swipe typing is brand new. Glide shipped on 1 August, on by default. Gboard and SwiftKey have had a decade to tune theirs. Judge it during the trial rather than taking my word for it.
- English is much stronger than the rest. Five other languages ship, and the gap is real. Qwen's tokenizer coverage moves this more than anything in the app code.
- The download is big. About 1.2 GB before you can use the on-device models. That's the price of the models being on the device.
- De-Googled ROMs are rough. Licensing and billing verification lean on Play services, so purchases can fail to activate on Huawei, Aurora, LineageOS and GrapheneOS. That's on me to fix.
- Cleanup won't rewrite you. The dictation cleanup fixes disfluencies, casing and punctuation. It won't restructure a rambling sentence the way a generative pass could, because there isn't one.