Skip to content

Repository files navigation

WM Keyboard logo

WM Keyboard

An Android keyboard that keeps its brain on the device.

843 languages, Avro-style Bangla phonetic typing, a toolbox that goes well past emoji, and a prediction stack that never phones home.

Download Docs Android Kotlin Compose Offline core License


WM.Keyboard.-.Private.Offline.Android.Keyboard.Official.Trailer.mp4

Why this exists

Every keyboard I tried made me pick two out of three: types Bangla well, has the features I actually use, and doesn't ship my keystrokes to somebody's analytics pipeline. So I built one that does all three.

The whole intelligence layer runs on device. Dictionaries, transliteration, autocorrect, glide typing, emoji search, grammar checking and dictation are bundled, or downloaded once and then run locally. Network access exists only where it has to, like translation or GIF search. Each of those is a tool you open yourself.

It is written in Kotlin with Jetpack Compose, keyboard surface included. The code splits across 22 Gradle modules, which keeps the engines testable and free of Android dependencies.

What you get

Languages 843 languages and 1,274 layouts from a data-driven registry: native scripts, InScript variants, romanized entries, CJK, even constructed ones. A fresh install picks up whatever your phone is already set to.
Bangla, done right Avro-compatible phonetic typing for the Bengali script, with a lenient index, so asi, achi and achhi all land on আছি. Probhat layout too, with aspirates on shift, plus conjunct-aware backspace.
Prediction Trie-lattice beam decoder shared by tapping and glide, n-gram context ranking, likelihood-gated autocorrect, and on-device learning of your words, bigrams and trigrams.
Emoji and friends Emoji 17.0 catalog with semantic search in 125 languages, per-person skin tones, kaomoji, GIFs, stickers, and long-press to send Google's animated emoji.
The toolbox Clipboard with history and pinning, snippets, translate, calculator, unit and currency conversion, camera, OCR and QR scanning, media controls, an app launcher, text editing, and more.
Themes A real theme editor: palettes, fonts, key shapes, textures, decals, particles, photo backgrounds, plus Material You and AMOLED. Themes export and import as files.
AI, voice, handwriting Speech recognition with a continuous mode, offline Whisper dictation, ML Kit handwriting, Harper grammar checking through a Rust JNI bridge, and an optional local LLM.
Extensibility Addon repositories serve 12 kinds of addon. Lua plugins run sandboxed. Layouts and themes import from other keyboards, including Florisboard and HeliBoard.
The full inventory, if you want numbers

FEATURES.md tracks the surface across 12 areas:

Area Families Features Capabilities
Typing core: prediction, autocorrect, learning, spell check 9 49 172
Input behaviour: glide, gestures, cursor, editing, keys 11 72 128
Languages, scripts, layouts, transliteration 11 59 186
Themes and appearance 14 73 179
Emoji, GIFs, stickers, kaomoji 16 88 93
Toolbar and the tool set 10 77 282
Clipboard, snippets, text expansion 7 36 179
AI, voice, handwriting, scanning 11 70 162
Privacy, backup, storage, statistics 12 54 136
Accessibility, form factors, platform integration 12 56 105
Extensibility: addons, plugins, imports, formats 5 35 164
Modes, rows, field adaptation, runtime 12 97 200
Total 130 766 1986

Entries marked RARE there are things few or no mainstream keyboards ship. There are over 400 of them.

Privacy is the default, not a setting

  • No analytics SDK, no crash reporting, no server of this project's to phone home to. (One exception: Google's ML Kit sits under handwriting and the scanners in the full edition, and it reports its own diagnostics to Google. The privacy policy spells that out.)
  • Learned words, clipboard history and typing stats stay in app storage and can be wiped in one tap.
  • Password and secure fields turn off learning, suggestions and clipboard capture on their own.
  • Incognito mode does the same on demand.
  • Network tools are opt-in per tool, and the offline build never links them at all.
  • Backups are AES-GCM encrypted and written wherever you point them through the storage picker.

Installing

Signed APKs live on the releases page. Each release carries eight of them: full and lite, each built for arm64-v8a, armeabi-v7a, x86_64, and a universal APK that covers all three. Almost every phone made since 2017 wants arm64-v8a. Check your download against the SHA256SUMS.txt in the same release. Not on Google Play or F-Droid yet.

Building

Install JDK 17 or newer to launch Gradle. Gradle then provisions its own JDK 21 toolchain through Foojay on the first build. Install the Android SDK with compileSdk 36.1 available. Android Studio's bundled JBR works well as JAVA_HOME.

./gradlew assembleFullDebug
./gradlew testFullDebugUnitTest
./gradlew staticAnalysis

Two flavors ship. full is everything. lite swaps the ML Kit and on-device model paths for stubs, which matters on storage-constrained devices. The build channel (Play versus direct download) is a flag in local.properties. It decides whether ML Kit models and the LLM runtime ship inside the APK or download on demand.

Install the APK. Open the app and follow the setup card. Turn on WM Keyboard in system settings, then select it as your input method.

Project layout

Modules are layered bottom-up. Every dependency points downward, and each module declares its own in build.gradle.kts.

app/                  Settings app, manifest, resources, bundled assets, most unit tests
feature/
├── ime/              WMKeyboardService and the Compose keyboard UI (the keyboard itself)
├── addons/           Addon install, reconcile, download
├── tools/            Network tool clients: AI, GIF and sticker, search, link preview
└── llm/              On-demand LiteRT-LM runtime (Play channel only)
core/
├── settings/         SettingsRepository (DataStore), KeyboardSettings, modes, power saving
├── intelligence/     Grammar (Harper JNI), local LLM, handwriting, spell checker service
├── feedback/         Key sounds and haptics
├── voice/            SpeechRecognizer plus offline Whisper dictation
├── plugins/          Lua plugin sandbox
├── addons/           Addon store and repository data layer
├── content/          Clipboard, snippets, fonts, media, stickers
├── tools/            Offline tool engines: calc, units, currency, symbols, calendars
├── icons/            Icon packs and the SVG parser
├── theme/            ThemeSpec, palettes, rendering
├── emoji/            Catalog loader, semantic search, usage tracking
├── prediction/       Trie, SuggestionEngine, UserLexicon, dictionaries, gestures
├── input/            Composers (CJK, cluster scripts) and the input pipeline
├── language/         Scripts, layouts, transliteration
├── common/           Utilities, direct boot, debug log, shared contracts
└── config/           Build flags and API keys
tools/dictc/          Host-side dictionary compiler, shares :core:prediction sources
native/               Rust sources for the Harper grammar engine

Documentation

The full documentation site is at wmkeyboard.pages.dev. Its source lives in docs/ and runs on Astro Starlight. Run npm run dev inside that folder for a local preview.

Architecture How the pieces fit and why
Building Toolchain, flavors, channels
Dictionaries The .wmdict and .wmng binary formats
Plugin API Writing a .wmplugin
Addon repos Hosting themes, layouts, packs
Privacy What touches the network and when

Contributing

The engines under core/ are plain Kotlin with no Android dependencies, so they are easy to test and easy to extend. Dictionaries and the emoji catalog are plain text assets meant for hand editing, and a new language mostly comes down to a word list and a layout definition.

Good places to start: a dictionary for a language that has none, emoji keywords in your language, a theme, or a layout you miss from another keyboard. Open an issue first for anything larger so we can agree on the shape of it.

License

MIT. See LICENSE.

About

A modern, privacy-first Android keyboard: offline intelligence, 350+ languages, themes, tools and an addon ecosystem.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

5 stars

Watchers

2 watching

Forks

Releases

Contributors

Languages