Dictionaries & words
Personal dictionary, custom word lists, the blacklist and emoji keywords.
WM Keyboard keeps your words in four separate screens, reached from two different corners of Settings: what it has learned from your typing, dictionaries you import yourself, words it must never suggest, and emoji search keywords for languages beyond English and Bengali. This page is the field reference for all four. For the reasoning and full mechanics behind each, see the guide pages linked in every section.
Personal dictionary
Section titled “Personal dictionary”Every word the keyboard has learned from your typing, plus any you add by hand, sorted with the most-reinforced word first. Each row reads “Added by you” once its weight reaches 200, and “Seen N×” below that. Add word opens a single-field dialog and adds 200 to the word’s weight: a word the keyboard has never seen lands at exactly 200 and reads “Added by you” immediately, and a word you’d already typed 50 times goes to 250 rather than back down to 200. A trash icon on each row removes that word (and drops it from any word pairs it was part of), and every add or remove signals a running keyboard session to reload the list rather than silently overwrite your edit.
The dialog takes anything you type, but the store won’t: a word over 32 characters (measured after lowercasing) is dropped silently, so the dialog closes and the list is exactly as it was. The same limit applies to words learned from typing.

Before you’ve typed or added anything, the screen reads “Nothing here yet — words appear as you type (with ‘Learn from typing’ on under Privacy), or add one above.” The screen itself carries no toggles. Everything that governs whether a word gets learned in the first place (Learn from typing, Incognito, Follow private browsing) lives on the Privacy screen instead. See Personal dictionary for the full learning-weight mechanics, what disqualifies a field, and how to clear everything at once.
The list is capped at 10,000 words
Section titled “The list is capped at 10,000 words”Nothing on the screen says so, but the store is bounded, which is the answer when words you know you typed are no longer in the list. The check runs when the keyboard is dismissed after learning something new, and only then: if the list has gone over 10,000 words, it’s trimmed back to 9,000 in one go. Cutting a thousand rather than one keeps it from re-trimming on every dismissal from then on.
What gets cut is decided by a decaying score, not by raw weight. The file keeps a counter that ticks once per save that had something new in it, and a word’s score is its weight halved for every 64 ticks since you last typed it. A word you still use holds its place, while a typo learned last year quietly sinks to the bottom whatever its count was. Words at weight 100 or more count as deliberate (anything from Add word starts at 200, well clear of that) and go only after every organic word has already gone. Losing a word loses the word pairs built on it too.
Two smaller caps sit alongside it, on the next-word data rather than on the words: 5,000 first words for word pairs, 2,000 two-word contexts, and at most 32 followers remembered for each, all trimmed least-used-first. None of them ask before trimming and there’s no undo, so a word you want kept for good is worth adding by hand rather than leaving to be relearned.
Custom dictionaries
Section titled “Custom dictionaries”One group per enabled language, each listing the word lists you’ve imported for it, with the headline showing the filename without its extension, the subtitle showing the word count, and a trash icon to remove it. Import word list (or Import another, once one exists) opens a file picker; From URL opens a dialog to pull one down instead. A language with no lists yet still gets its own group and both buttons, ready for a first import; a language that isn’t currently enabled doesn’t get a group here even if it already has imported files sitting on disk.

Format, per the screen’s own description: one word per line, optionally followed by a space and a frequency number; lines starting with # are ignored; imported words are never autocorrected away. A local-file import over 32 MiB is rejected before it’s even read (“That file is too large to import.”); a URL import enforces the same 32 MiB cap mid-download, but any failure there (oversized, dead link, network error) surfaces as the same generic “Could not download that list — check the URL and try again.” Only http:// and https:// URLs are accepted. A successful import reports “Added N words to <language>.”; an empty file reports “No words found in that file — is it a word list?” Every successful import or removal signals a running keyboard session to reload.
Lists are additive (several can sit under one language), and for English and Bengali specifically, they stack on top of the bundled dictionary rather than replacing it. This is a different mechanism from the downloadable wordlists reached from a language’s own Dictionary section, which do replace the built-in English/Bengali list; see Downloadable dictionaries for that pipeline, its size tiers, and the full list of every available wordlist.
Suggestion blacklist
Section titled “Suggestion blacklist”Words the keyboard must never suggest or autocorrect to, listed alphabetically with a trash icon per row. Add word opens the same single-field dialog shape as the personal dictionary; whatever you type is stored trimmed and lowercased, so capitalization and stray spaces don’t create duplicate entries. The list is empty by default, and nothing is blacklisted until you add something yourself.

Before you add anything, the screen reads “Nothing blacklisted yet — add a word above.” Back on the Typing screen, the nav row’s subtitle changes with the list: “Words to never suggest or autocorrect to” while empty, or “N words never suggested” once it has entries. See Suggestion blacklist for exactly which suggestion paths it filters and how it interacts with the personal dictionary.
Emoji keywords
Section titled “Emoji keywords”The densest of the four screens: a single Download automatically toggle up top, then one group per language with up to two kinds of row inside it.
Download automatically (WM KeyboardEmojiEmoji panelEmoji keywordsDownloads) defaults to on, so turning a language on fetches its keywords in the background, around 100 KB, once. Off leaves the per-language Download buttons below as the only way to get them.
Each language group can carry a bundled-catalog row (only shown for the 125 languages the wmkeyboard-data repo covers) and any number of user-imported packs below it:
- Bundled catalog row — shows “N emoji · size download” before downloading (for example “3,943 emoji · 74 KB download”), a progress bar and Cancel button while downloading, “N emoji · size” plus a delete icon once downloaded, or an error message with a Retry button on failure.
- Imported packs — one row per file, headline the filename minus extension, subtitle “N emoji”, trash to remove, plus Import pack/Import another and From URL buttons that work exactly like Custom dictionaries.

A language’s group appears here if it’s currently enabled, has a downloaded catalog, or has an imported pack, so deleting a pack for a language you’ve since turned off is still possible. Import format: a tab-separated file, one emoji per line, then its comma-separated keywords, and optionally another tab and a display name; lines starting with "# " are ignored (a bare # isn’t a comment here, since it starts the keycap row); the repo’s own JSON dictionaries import as-is too. The size cap is 8 MiB (smaller than Custom dictionaries’ 32 MiB), enforced identically for local files and URL downloads. But because every URL-import failure collapses onto the same code path, a dead link or network error reports the same “That file is too large to import.” as a genuinely oversized file. A successful import reports “Added keywords for N emoji to <language>.”; an empty file reports “No emoji found in that file — is it a keyword pack?”
See Emoji search in your language for why 125 languages, what auto-download does in practice, and how a pack changes what you see while typing.
Details & edge cases
Section titled “Details & edge cases”- Custom dictionaries silently truncates malformed lines, not just skips them. The parser splits each line on its last space; if that trailing token isn’t a number, the frequency defaults to 1, but the line is still cut at that last space, so a genuine multi-word phrase, or any word with a trailing non-numeric token, loses everything after the final space rather than importing as written. Worth checking a hand-written list for stray trailing words before importing.
- Emoji-pack URL imports report the wrong error more often than not. Custom dictionaries distinguishes a too-large file from a failed download, but the emoji-pack importer doesn’t. Any URL failure, for any reason, shows “That file is too large to import.”
- The two import screens share a shape but different limits. Custom dictionaries caps at 32 MiB and Emoji keywords at 8 MiB; both accept only
http:///https://URLs and both stack multiple lists per language rather than replacing what’s there. - None of these four screens are gated by edition. Full and lite builds show identical dictionary, blacklist, and emoji-keyword screens.
- Three separate stores, easy to conflate. The personal dictionary is what you’ve typed; custom dictionaries are lists you import; the blacklist is what to withhold. A word can sit in more than one at once, but the blacklist always wins as a candidate, regardless of what’s learned or imported.
Related pages
Section titled “Related pages”- Personal dictionary — learning weights, incognito interaction, and clearing everything at once.
- Suggestion blacklist — every suggestion path it filters and how it interacts with autocorrect.
- Suggestions & prediction — how completions, corrections, and next-word prediction fit together.
- Downloadable dictionaries — the other word-list mechanism, reached via Languages, with size tiers and the full wordlist table.
- Emoji customization — the conceptual explanation behind emoji keyword packs.
- Backup & restore — the Dictionary section of a manual export, off by default, and Android-backup opt-in.
