The tiny, fast keyboard for every Android — runs on Android 1.5+, under 1 MB, 60+ layouts, offline suggestions, emoji and clipboard history.
Download APK · Website · Report a bug
- 60+ layouts generated from Unicode CLDR — QWERTY, QWERTZ, AZERTY, Dvorak, Colemak, Cyrillic, Arabic, Hebrew, Thai, Devanagari and more
- Offline word suggestions & auto-correct for 13 languages (en, de, fr, es, it, pt, nl, pl, tr, sv, uk, ru, ar), with fuzzy matching and a personal dictionary
- Emoji panel with categories, recents and flags
- Clipboard history for text and images, with an image shelf you can send into apps that accept images
- Editing tools row: cursor arrows, select, cut/copy/paste, undo/redo, Ctrl/Alt/Fn modifiers
- Swipe-down symbols & key hints, long-press accents, optional number row
- Dark / light / AMOLED / blue themes, adjustable key height and long-press delay
- Haptic and sound feedback, key preview popups
- Private by design: no
INTERNETpermission, no analytics, no accounts. Everything stays on your device - Runs on old phones: minSdk 3 (Android 1.5) up to Android 14, so it fits devices most keyboards dropped long ago
- Tiny and lean: whole APK under 1 MB, ~3,700 lines of Java, no third-party libraries
| Settings | Languages | Layouts |
|---|---|---|
![]() |
![]() |
![]() |
| Clipboard | Symbols | My words |
|---|---|---|
![]() |
![]() |
![]() |
- Download
UsableKey-*.apkfrom the latest release and install it. - Open UsableKey, tap Enable keyboard (Step 1), then Switch to UsableKey (Step 2).
- Pick your languages under Languages.
Requirements: JDK 17+, Python 3, Android SDK with platforms;android-34 and build-tools (set ANDROID_HOME, default ~/Android/Sdk). No Gradle needed.
python3 build.py # check + build -> out/usablekey.apk
python3 build.py install # build and adb install
python3 build.py layouts # regenerate layouts from CLDR
python3 build.py dict # regenerate dictionaries (FrequencyWords)
python3 build.py emoji # regenerate emoji listThe first build creates a local signing key at ~/.android/usablekey.keystore.
Source files are kept under 100 lines each (python3 build.py check).
Pushing a tag like v1.0.0 triggers GitHub Actions to build the APK and publish a release:
git tag v1.0.0 && git push --tagsRelease APKs are signed with a throwaway CI key, so updating from a locally built APK requires uninstalling first.
src/dev/usablekey/ Java sources (ime, input, layout, predict, clip, emoji, media, settings, view)
assets/ dictionaries (.dic), layouts (lay/), emoji list
tools/ pure-Python build system and data generators
docs/ GitHub Pages site and screenshots
Made by Mohamad Almousli — al-mo.de · @mkalmousli
MIT © 2026 Mohamad Almousli





