
A Swipe Keyboard Whose Decoder Has No Alphabet
CleverKeys runs a real transformer swipe decoder on-device with zero network permissions, and feeds key coordinates in as model input so one file reads any layout.
CleverKeys is an open-source gesture keyboard for Android that runs a real transformer decoder in your pocket instead of in someone else's datacenter. It is for people who want swipe typing that works well and never phones home. Every layer of the stack, the model, the training data, the tokenizer, and the app, is inspectable and reproducible. As far as I know it is the only open-source keyboard shipping a public ML pipeline like that.
The decoder does not know your layout
The engineering choice I like most is that the 2.9 MB decoder has no alphabet baked into it. Key coordinates are a model input, not a fixed assumption. That means one file reads QWERTY, Dvorak, or AZERTY without retraining, because the layout is just geometry handed to the model at runtime. The Russian sibling model makes the point even sharper: it was trained on zero real Russian swipes and still works, because what the model learns is the shape of a gesture over a set of coordinates, not a memorized keyboard.
Under the hood it is a CTC encoder with trie-beam decoding, plus a layout-agnostic geometric decoder, running on ONNX Runtime with XNNPACK. On a Pixel 7 it decodes a swipe in about 142 ms, comfortably under its 200 ms target. It is 100% Kotlin and GPL-3.0.
Private because it cannot be otherwise
CleverKeys ships with zero network permissions. That is not a privacy policy you have to trust, it is a property the OS enforces: no analytics, no telemetry, no cloud sync, and literally no way for the app to make a network call. Zero network calls, by construction.
The rest is the practical stuff that makes a keyboard worth switching to. There are 208 swipe gestures, eight directions per key and per layer, with 204-plus built-in commands plus custom macros. There is an unlimited persistent clipboard with pins, todo and tag filters, drag-to-reorder, and media support that survives reboots without root. It even does reliable swipe typing inside Termux, which most keyboards cannot. Eleven languages ship today.
Install it through Obtainium, which tracks GitHub releases directly and skips the 24 to 48 hour F-Droid indexing lag, or try the web demo from the live site before you commit.
Have something that needs building, or stabilizing?
These notes are the work log. The paid work runs through Moonshine Labs, my product and engineering studio. Tell us what you're building, or grab a call.
Work with us →