Skip to content

Keyman layouts

github-actions[bot] edited this page Sep 15, 2026 · 6 revisions

862 of the layouts in WM Keyboard started life as Keyman keyboards. That's where most of the language catalogue's long tail comes from: Adyghe, Hatran, Osage, Cypro-Minoan, and several hundred more that no other Android keyboard ships a layout for.

They behave like any other layout once enabled. Each appears under its language in Languages & layouts, is editable in the layout editor, and exports as a file like any other. Before that, most sit behind a More layouts row on the language's own screen, since Amharic or Arabic alone can have hundreds.

That's Khmer Angkor, rendered from the same layout data the app ships.

Where they come from

Keyman is an SIL Global project. Its repository holds around 930 keyboards, most of them for minority and historical languages, and the release-quality ones are MIT licensed. Every keyboard used here is credited by name and copyright holder in About / Open-source licences / Keyman keyboard layouts.

WM Keyboard isn't affiliated with SIL Global or the Keyman project. We converted the key grids with our own code; these aren't the upstream files.

What converts, and what doesn't

A Keyman keyboard is two things: the visual key grid, and a set of rules that decide what each keypress actually types. Only the grid is converted. The rules are downloaded separately, which the next section covers.

What comes across:

  • The key grid itself, including every layer the keyboard defines
  • Long-press alternates
  • Flicks, for the four directions WM Keyboard supports
  • The shift layer, folded into per-key shift labels where the two grids line up

What doesn't:

  • Multi-tap keys. WM Keyboard has no equivalent gesture, so those alternates are dropped.
  • Diagonal flicks. Keyman has eight flick directions and WM Keyboard has four. A flick aimed north-east isn't quietly remapped onto the north key, because typing the wrong character is worse than the gesture doing nothing.
  • Fonts. Keyman packages ship their own. WM Keyboard uses its own font system instead, which already covers these scripts.

Typing rules

This is the part worth understanding before you enable one of these layouts.

On a positional keyboard, each key types the character printed on it. Those work correctly with nothing extra, and that's most of the 862.

On a mnemonic keyboard, the printed key caps and the typed output are deliberately different. A mnemonic Khmer keyboard has you press the key where k sits on a US layout to get ក, and a set of rules performs that mapping. Those rules aren't in the app.

The grids ship with WM Keyboard; the rules are downloaded per keyboard, from keyman.com, when you ask for them.

Languages & layouts / (a language)

When you switch a layout on, the app asks. If that layout needs rules and doesn't have them yet, a prompt offers to fetch them there and then, which is the moment you're deciding to type in the language rather than the moment you notice the output looks wrong. Choose Not now and nothing is lost: the row is still there.

Each layout has its own Typing rules for (layout name) row directly beneath it. The name is in the row on purpose, because a language can offer several Keyman keyboards and their rows stack one after another. Press it to download; press it again later to remove them. Nothing is fetched until you ask.

Until you do, the layout types its key caps. The grid is still right, the long-press alternates are still there, and nothing damages your text. It just isn't doing the character mapping its author wrote. If you enable one of these and the output doesn't match the caps, that's this.

Rules are only fetched for keyboards whose upstream licence permits it, and the downloaded file has to parse as a keyboard before it's kept.

Undetermined languages

Five keyboards in the upstream repository declare no language at all. Rather than invent one, WM Keyboard skips them unless the script by itself identifies the language, which is how one of the IPA keyboards gets in. You can still add any of the five by importing its file, and you pick the language yourself when you do.

Importing one yourself

Layout & size / Key layouts / Import from another keyboard

Pick a .keyman-touch-layout file. The app reads the grid, then shows you what the conversion did and asks which language the layout belongs to. See Importing from other keyboards for how that dialog works.

A touch layout file holds no rules, so a layout imported that way types its key caps.

You can also open a .kmp keyboard package straight from a file manager. A package carries both the grid and the rules, so it's the one route that gives you a working keyboard in a single step, and it's how you'd install a keyboard that isn't in the bundled set at all. The app reads the grid out of the compiled keyboard inside the package, installs the rules alongside it, and tells you which of the two it found.

A package built for desktop computers only has no on-screen keyboard in it, so there's nothing to add. The app says so rather than adding an empty layout.

Reporting a bad layout

These were converted in bulk, and nobody on the project reads most of these languages. If a grid is wrong, a key is in the wrong place, or a character is missing, open an issue and say which layout. Upstream fixes flow back in when the conversion is re-run.

Clone this wiki locally