Android keyboard
Thoughts in.
Words out.
Lexo is built around one job: getting what's in your head onto the screen with as little friction as possible. Tap, and a language model running on the phone ranks what you're likely to say next. Talk, and what lands in the text field is a finished sentence rather than a transcript you have to go back and clean up yourself.
Free for 30 days, everything unlocked. After that it's $9.99 once, not a subscription. No ads either way.
You said
um can you uh send me the deck tomorrow morning question mark
It typed
Can you send me the deck tomorrow morning?
A worked example, not a live demo. Every keyboard can transcribe; the gap is what you're left holding afterwards. The fillers, the capital C and the spoken "question mark" are handled by a tagger that runs in about 3 ms on the phone, and when it isn't confident it leaves your words exactly as you said them.
Ways in
-
Tap
A 0.5B language model reads the context and ranks what you're likely to type next, on top of a word-frequency prior and your own vocabulary. Fewer keys per sentence, no round trip to a server.
-
Speak
Hold the mic and talk. An offline recognizer transcribes it and a cleanup tagger strips the fillers, restores casing, and turns spoken punctuation into punctuation. You get a sentence, not a transcript.
-
Swipe not shipped
Glide typing, decoded by a neural classifier rather than a dictionary lookup. It's built and it isn't in the build on Play, so don't buy for it yet.
-
Translate not shipped
Write in your language and send in theirs, English paired with Spanish, Portuguese, Swedish or French, on device. It's built and turned off in the release build, because it isn't good enough to charge for yet.
The last two are listed because they're the direction, not because you can use them today. If a feature isn't in the Play build, it doesn't count.
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.
None of it leaves the phone
The models run locally, so your text and your audio have nowhere to go. That's a claim like any other, and it should be checkable rather than promised, so here is everything you need to check it.
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
Being straight about this, because "free tier" would oversell it: almost everything that makes Lexo different from the keyboard you already have is behind the unlock. What you keep without paying is an ordinary keyboard. It's a real one, and it doesn't nag or expire, but it isn't the reason to install this.
What keeps working, unpaid
$0
- Next-word suggestions from a word-frequency prior plus your own vocabulary
- A personal dictionary that never leaves the phone
- Layouts, emoji, clipboard history, themes, one-handed mode
- No countdown, no locked keyboard, no ads
Free trial, then one-time unlock
30 days free
- Free for the first 30 days. Both of the below, no card, nothing to cancel
- Neural suggestions from the 0.5B model
- Offline voice dictation with cleanup
- Then $9.99 once. Not a subscription. No ads, either way.
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 isn't in the build you can install yet. Glide is written and merged, decoded by a neural classifier rather than a lookup, but it hasn't gone out to the Play build. When it does, Gboard and SwiftKey will still have had a decade to tune theirs. Judge it yourself then 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.