Type

An Android keyboard that fixes typos with a language model running on the phone. Nothing you type leaves the device.

Download APK Source on GitHub

 

On-device

The model runs inside the keyboard process through llama.cpp. The only network use is downloading the model file you choose.

Corrections you can trust

Model output is checked against edit distance and a 56k-word dictionary before it may touch your text, and every change comes with an undo chip.

Adaptive keys

Letters that cannot continue a word shrink and fade. Hit areas never change, so names and slang stay typable.

Words as keys

When only a couple of words can finish what you typed, the keyboard offers them whole; an abc key brings the letters back.

Knows what comes next

A compact on-device model of word sequences suggests the next word after each space and ranks completions by the words before them.

What it does

Type is a normal QWERTY keyboard with one difference: when you finish a word that isn't in the dictionary, a small language model looks at the last few words and decides what you meant. If it is confident, the word is replaced and an undo chip appears in the bar. Backspace right after a correction also puts the original back.

While a word is still being typed, the dictionary and a sequence model do the work instead: the bar offers the most likely next word right after a space, completions are ranked by the words before them ("should ha" puts have up front), letters that can't continue any word fade away, and when only a few words remain possible they take over the keyboard as buttons. The correction model is only consulted mid-word once what you've typed can no longer start any dictionary word. The ✨ button runs a whole-sentence pass.

Which model

Chosen by replaying 45 typo-and-context cases and 8 sentences through each candidate with the exact prompts the keyboard uses (the harness is tools/eval.py). Typos fixed / correct-and-unusual words left alone / sentences fixed, with per-word latency on an M4; on a Pixel 9 the recommended model corrects a word in about a third of a second:

ModelFixedKeptSentencesms/word
Qwen2.5 1.5B Q835/359/108/883
Llama 3.2 1B Q430/359/106/855
SmolLM2 360M Q831/358/105/836
Qwen3 1.7B Q832/359/105/895
Gemma 3 1B Q832/356/101/884
Qwen3 0.6B Q825/359/101/850
Qwen2.5 0.5B Q824/359/101/840

The app offers SmolLM2 360M when you want the download small, Llama 3.2 1B as a middle ground, and Qwen2.5 1.5B as the recommended pick. "Kept" misses are mostly harmless: the keyboard rejects any model output that is far from what you typed, so a bad guess usually means no correction rather than a wrong one.

Install

  1. Download the APK and open it on the phone. Android will ask you to allow installs from this source.
  2. Open Type. Step 1 turns the keyboard on in the system settings; step 2 switches to it.
  3. Pick a model. SmolLM2 360M is quick on anything; Qwen2.5 1.5B is the accurate one and worth it on a recent phone. Models live in the app's private storage.

Without a model the keyboard still works and falls back to dictionary suggestions.

How the correction works

The prompt has a fixed part (instructions and a handful of examples) and a short per-request part. The fixed part is decoded once and kept in the model's cache, so each correction only pays for a couple of dozen tokens plus the few it generates. Output is constrained with a grammar to a single word, then checked against edit distance and the dictionary before it is allowed to replace what you typed.

Build it yourself

git clone --recursive git@github.com:thingg-co/type.git
cd type
./gradlew assembleDebug
adb install app/build/outputs/apk/debug/app-debug.apk

Needs Android Studio's SDK with NDK 28 and CMake 3.31. English only for now; the layout and dictionary are data files, so other languages can be added without touching the input logic. ./gradlew test runs the dictionary, policy and filter suites; tools/eval.py replays the model prompts.