-
Notifications
You must be signed in to change notification settings - Fork 4
Glossary
Every other page defines its own jargon on first use, then leans on this page instead of repeating itself. If a term shows up here, its full write-up (with screenshots, settings, and edge cases) lives on the guide page linked from that entry.
IME stands for input method editor, Android's umbrella term for any keyboard app, WM Keyboard included. Concretely it's WMKeyboardService, the background service Android hands text-field focus to whenever you tap into one. Every other term on this page is a piece of it. The service is declared direct-boot aware in the app manifest, which matters enough to get its own entry below.
Subtype is Android's own term for one entry in its system-wide "Choose input method" sheet. WM Keyboard registers one InputMethodSubtype per enabled layout. Each one carries the layout's language tag and a stable id derived from the layout id, so a layout keeps the same subtype identity across restarts and app updates. The app's own activeLayoutId stays the source of truth. The OS subtype is mirrored to match it, and a switch made from Android's own sheet is followed back the other way.
Whether your layouts show up as subtypes at all is Languages & layouts / System language switcher / List languages in the Android switcher, and it ships off. Off registers an empty subtype set, so the switcher lists WM Keyboard under its own name the way a keyboard with no subtypes does. Turn it on and a companion Show app name first toggle appears (off by default) that prefixes the subtype label with "WM Keyboard · " instead of leaving it as the plain language name. See Switching languages for the full picture, including the three other ways to switch that never touch Android's subtypes.
Composing text is the standard Android concept of text that's been typed but not yet committed to the field. It's tracked internally as a buffer that gets pushed to the field with each keystroke and flushed once you move on. What it actually holds depends on which composer is running:
- Latin-script typing. The word currently in progress. It feeds the suggestion strip's completions and corrections.
- Avro (Bangla phonetic). The romanized source you typed, not the Bengali-script output, and it can't be reversed back into it. The fixed Bangla layouts keep no composing buffer to resume at all.
- CJK conversion. The untransliterated reading (pinyin syllables, kana, a stroke code) until you pick a candidate. See Chinese, Japanese & Korean.
The horizontally scrolling row of ranked character or word candidates that a CJK conversion composer shows in place of the ordinary suggestion strip whenever its composing buffer isn't empty. That covers Pinyin, T9 Pinyin, Zhuyin, Cangjie, Cangjie Quick, Stroke, Jyutping, and every Japanese scheme. Candidates pack left-aligned and sized to their text rather than spaced evenly, and a chevron opens an expanded, wrapping grid. How deep that grid goes depends on the scheme. See Lattice below. Full detail, including the tap-to-commit flow, is on Chinese, Japanese & Korean → The candidate bar.
The umbrella term for any of the fourteen kinds of content you can install into WM Keyboard: themes, layouts, dictionaries, emoji keyword packs, snippet packs, Espanso packs, sticker packs, icon packs, fonts, emoji fonts, key sounds, sound packs, plugins, and vocabulary packs. You install one from a repository (a small JSON index) by adding its URL. A repository just indexes files the app already reads, so there's no packaging, signing, or build step. Six of the fourteen types have an export button in the app (themes, layouts, snippets, sticker packs, icon packs, and vocabulary packs) and what it writes is exactly what a repository serves. The rest are ordinary file types (.ttf, .mp3, a word list) or are built by their author. With one exception, an addon is inert data, and nothing runs when you install or use it. See What are addons? for the full type table, size limits, and trust model.
The one addon type that isn't pure data. A plugin is a small Lua script, sandboxed so it has no key-event API, no field-read API, no clipboard API, no network or file access, and no way to see another app or the device beyond its own on-device storage. It draws its own toolbar panel and only runs while that panel is open.
Two rules apply to plugins that don't apply to the other thirteen addon types. A plugin must publish a checksum or the install is refused before any network call happens. And a plugin installed from a repository always lands switched off rather than running immediately. Installing is refused outright if Tools / Plugins / Allow plugins is off (off by default). That's a separate setting from the Plugins toolbar tool, which only controls whether a Plugins panel appears on the toolbar, not whether plugins are allowed to run. See WM Keyboard plugins.
WM Keyboard ships as two Gradle build flavors (full and lite) from a single flavor dimension. That dimension flips five build flags on or off together: ML Kit handwriting, ML Kit scanners, grammar checking, the local LLM, and offline Whisper. "Edition" is the word this documentation uses for the same thing, and "flavor" is the Gradle-level name developers use.
Lite hides exactly five toolbox tools (Handwriting, Text scan/OCR, QR & barcode scanner, Document scanner, Grammar check) and two nested options inside tools that exist on both editions: Whisper's engine choice inside Voice typing, and the on-device LLM choice inside AI writing tools. Both editions share a package name and signing config, so installing one over the other is a normal update with your data intact. The measured 0.3.0 release APKs run about 66 MB for Full on arm64-v8a and under 9 MB for Lite. Check which you have at About / App / Version, which names the flavor directly. Full comparison: Full vs Lite.
The window between the device powering on and you entering your PIN, pattern, or biometric for the first time since that boot. During it, credential-encrypted storage can't be read at all, and touching it throws. That covers the app's normal filesDir, its settings DataStore, learned words, clipboard, and snippets. WM Keyboard declares itself direct-boot aware specifically so Android doesn't swap in a different keyboard during that window, since you need a working keyboard to type your own unlock PIN. The single gate is whether the OS reports the user unlocked, which defaults to unlocked if the platform has no concept of it at all.
What runs in that window is deliberately narrow. Appearance and behavior settings (layout, theme, sizing, sounds) are mirrored into a separate, non-credential area of storage on every change, so they're available from boot, with API keys and tokens filtered out of that mirror. Personal stores like your learned words, clipboard, and snippets run memory-only instead. They discard anything written until you unlock, rather than merging it in afterward. Bundled dictionaries are inflated into that same pre-unlock area once and serve both states, while downloaded or imported dictionaries stay credential-only. 46 of the app's 74 tools work during this window. See The toolbar for which.
Don't confuse this with the lock screen. A phone unlocked once since its last reboot counts as "unlocked" here even if you lock the screen again immediately after. That's a separate concept, covered on Incognito & secure fields. Fuller mechanics: Your data on device and the architecture notes.
Credential Encrypted and Device Encrypted are Android's own platform shorthand for the two storage areas direct boot splits behavior across. You won't find those initialisms used literally anywhere in this codebase or its other pages. Both consistently spell them out instead: "credential-encrypted storage" for the normal, PIN-protected area, and "device-protected storage" for the small area readable from boot. If you've seen those phrases elsewhere in these docs, this is the platform vocabulary they map to.
A prefix tree used for word completion, behind a shared read-only interface (WordSource). The mutable, node-based Trie holds words learned at runtime, your personal vocabulary. Everything else uses the same immutable, flat-array layout instead, in two forms: an in-heap PackedTrie for imported word lists, and a memory-mapped MappedTrie that reads straight off a compiled .wmdict file with no heap footprint at all. That second one backs the bundled dictionary and anything downloaded.
The flat-array layout cuts retained memory for the ~17K-word bundled English word list roughly sevenfold, from about 6.5 MiB down to well under 1 MiB. The memory-mapped form goes further still, since it never lands on the heap in the first place. All three return identical query results. See Suggestions & prediction and Downloadable dictionaries.
A learned pair of words (the one you typed, and the one you typed right after it) used to predict what comes next. Your own bigrams accumulate as you type and are stored alongside your personal word list. A small bundled set of common English word-pair frequencies fills next-word prediction from your very first keystroke, before you've typed enough for your own history to take over. Your own bigrams always outrank that bundled set once they exist. Privacy / Your data / Learned words has a Delete the learned words button that wipes both your learned words and your learned bigrams at once, since they share one file. See Suggestions & prediction and Your data on device.
The shared decoder behind every CJK conversion scheme except the code-table ones. Given a composing buffer already split into reading units, it scores whole candidate paths through the buffer rather than ranking prefixes longest-first. A shorter first word that leaves a better remainder can therefore outrank a longer one, which is what makes committing a whole sentence with repeated space presses work. Pinyin, T9 Pinyin, Zhuyin, Jyutping, and the Japanese schemes all use it, so they can rank candidates up to 100 deep. Cangjie, Cangjie Quick, and Stroke skip it entirely. They map a shape or stroke code to exactly one character through a fixed lookup table instead, which is also why their candidate lists cap out at 24. See Chinese, Japanese & Korean.
- Toolbar vs. toolbox. The toolbar is the strip of tools you've pinned. The toolbox is the grid behind the toolbar's grid button, holding every other enabled tool that isn't pinned. A tool lives in exactly one of the two at any given moment, never both. See The toolbar.
- "Unlocked" means storage, not the lock screen. Direct boot's notion of unlocked tracks whether credential-encrypted storage has been decrypted this boot. That happens once and stays true even if you lock the screen again afterward. The lock-screen-specific behavior (what typing does while the device is actually locked right now) is a distinct setting, covered on Incognito & secure fields. Don't conflate the two.
- CE/DE is platform vocabulary, not this codebase's. If you go looking for the bare initialisms in the source or elsewhere in these docs, you won't find them. See CE / DE storage above for the phrases actually used.
- Composing text has no single shape. What it holds (a word in progress, a romanization that can't reverse, or an untransliterated reading) depends entirely on which composer is running. Composing text above covers all three cases, and each language page covers its own in full.
- Home
- Accessibility
- Addons
- Development
- Emoji
- Languages
- Plugins
- Privacy
-
Reference
- Gesture cheat sheet
- Typing
- Hardware shortcuts
- Deep links & launcher shortcuts
- Key press
- Link builder
- Dictionaries & words
- File formats
- Languages
- Importing from other keyboards
- Appearance
- Importing from Espanso
- Keyboard themes
- Keyboard font
- Troubleshooting
- Glossary
- Icons
- Easter eggs
- Layout & size
- Key layouts
- Rows & bars
- Keyboard modes
- Emoji
- Phone number formats
- Tools
- Addons & plugins
- Reference - Accessibility
- Fingerprint lock
- Reference - Data saver
- Reference - Permissions
- Privacy
- Reference - Selection actions
- Servers
- Reference - Backup & restore
- About & diagnostics
- Statistics
- Settings A–Z
- Smart
- Start
- Themes
-
Tools
- Clipboard manager
- Voice typing
- Offline voice (Whisper)
- Handwriting
- Scanner (OCR, QR, documents)
- Camera tool
- Translate
- Search, Wikipedia & dictionary
- Media controls
- AI chat
- AI tools
- Utility tools
- Snippets & text expansion
- Text editing & cursor tools
- Instruments
- Trackpad
- Calendar
- App launcher
- Learn from text
- Vocabulary
- Resize the keyboard
- The toolbar
- Typing