Keyboard Studio Language Technology Use

Keyboard Studio is an experimental, browser-based way to make a Keyman keyboard by answering questions about your language instead of writing code. It began as a hackathon project, built by people who use Keyman, teach it, and share its goal of every language being typeable. The keyboards it makes go through the same review as every other keyboard in the Keyman library.

Built on Keyman

Keyboard Studio would not exist without Keyman

Keyman has helped people type their own languages since 1992. For many communities it was the first time their language could be typed at all.

1992

Keyman's first release, on Windows

6

platforms today: Windows, Mac, Linux, iOS, Android, and the web

900+

reviewed keyboards in keymanapp/keyboards

Free

and open source

Behind those keyboards are Keyman Developer and the keyboards repository, each keyboard built, reviewed, and maintained by people who cared about getting it right. Much of the Bible translation, literacy, and language development work we have been part of depends on the foundation that Keyman provides.

What Keyboard Studio uses from Keyman

Where this came from

A hackathon idea that grew

We are staff and summer associates in SIL's Language Technology Use department. We work with language communities and have relied on Keyman for years.

Many of us have spent years teaching keyboard development in workshops around the world. Again and again, the people who knew their language best were the ones who struggled most to finish a keyboard. They weren't struggling with their language. They were struggling with everything around it: the code, the files that must stay in step, the packaging, and the details a reviewer will rightly ask about.

Keyman Developer is most fruitful for a skilled keyboard author, someone at home with all of that, who can use the complete control it offers. Many first-time authors we've met needed something different: fewer choices at once, a working example to start from, and a suggestion for each answer.

  1. Over many yearsWorkshops

    Teaching keyboard development alongside people building keyboards for their own languages.

  2. Summer 2026A hackathon

    Our first idea was small: a helper that lets AI coding assistants work with Keyman keyboards, so people already using Keyman Developer could write keyboard code faster.

  3. Along the wayA bigger question

    What would it take for someone who has never built a keyboard to finish one?

  4. TodayStill an experiment

    It has grown, but it is far younger and less tested than the Keyman Developer pipeline, and it is not an official Keyman project.

Keyboard Studio is our attempt to offer that path: one more way into the Keyman ecosystem, not a way around it. The work still flows into the same repository and the same review.

What it takes today

Finishing a keyboard asks one person to wear many hats

A skilled keyboard author wears all of these comfortably. Many first-time authors wear only the first. The studio tries to carry the rest for them, and it won't always get it right.

Linguist

Today: knows the characters, their order, and how they combine.

In the studio: still the author's job, and the one we hope they can focus on. The studio proposes a character inventory; the author corrects it by sight and answers by example.

Programmer

Today: writes .kmn by hand: stores, groups, deadkeys, virtual-key names, modifier logic.

In the studio: the author picks behaviours from live demos, and the studio writes the .kmn.

Release manager

Today: keeps .kpj, .kps, HISTORY.md, LICENSE.md and versions in step, by hand.

In the studio: 40 review criteria are built in from the start, and the version and history rules are checked as you go.

Web designer

Today: writes welcome.htm, readme.htm and the help .php, and keeps the two help pages identical.

In the studio: help pages are generated from the keyboard itself (typing guide, layout pictures, phone and tablet notes), and a check confirms the two pages still match.

Windows user

Today: Keyman Developer is a Windows application.

In the studio: a browser. Keyman's compiler runs inside the page as WebAssembly.

English reader

Today: an English interface and English documentation.

In the studio: a translatable interface (English and French so far, more through Crowdin), and concepts shown by live demo rather than by reading.

Consistency keeper

Today: keeps desktop, touch, and documentation consistent by hand.

In the studio: one working copy feeds everything. Touch is derived from the locked desktop layout, docs from both, and checks compare modifier names, targets, layers, and copyright holder across files.

Unicode specialist

Today: codepoints, combining marks, composition order, PUA, fonts.

In the studio: characters are chosen by sight. Codepoints are validated, PUA keyboards go to experimental/, math-Latin look-alikes are blocked, and required fonts must be in the package.

How it tries to help

Start from a real keyboard, and never from a blank question

You start from a keyboard that already works

Very few keyboards are built from nothing. In the Keyman repository, most keyboards for a given script cluster around a handful of layouts. For example, 380 of 484 Latin-script keyboards sit on a QWERTY layout. See how all 920 keyboards group.

The studio makes that the starting point on purpose. Every keyboard begins as a copy of one existing keyboard, and you change what your language needs. Anything the studio can't model in that keyboard is kept as it is, never dropped.

When your script has only one or two keyboards in the repository, or none, the studio starts from a basic layout or US QWERTY instead, and you will do more of the work.

Every question comes with a suggested answer

A blank field where a reasonable default could have been worked out is a bug.

When the studio can make a reasonable guess, from the keyboard you started with, your language's code, or keyboards for related languages, it offers that guess and tells you where it came from. You confirm it or change it.

Where a guess could be wrong in a way that matters, such as who holds the copyright, it asks instead of guessing.

Keyboard Studio's character discovery step for Bafut. On the left, 30 proposed characters from SLDR, each shown with its code point, with options to keep them, type the whole alphabet, or go step by step. On the right, a live on-screen Cameroon QWERTY keyboard with its keys highlighted.
Character discovery for Bafut. The studio proposes an alphabet from SLDR, marked "machine-generated, please check", for the author to keep or change. On the right, the starting keyboard (Cameroon QWERTY) is live, so the author can type with it at any point.
Two kinds of work

A new keyboard, or a new version of an existing one

The author's first real decision is what they are making. Both run the same steps on the same working copy. They differ in the keyboard ID, what the pull request contains, and what the history says.

Track 1

Make a new keyboard

Starts from
An existing keyboard, used as a starting point. For example, a country keyboard cut down to one language
Keyboard ID
New, and checked against release/, experimental/ and legacy/
Result
A new keyboard folder
In Developer
Like copying a project
History
Created from source_id vX.Y, with credit to the original keyboard in the pull request
Track 2

Make a new version

Starts from
The current released version of the same keyboard
Keyboard ID
Unchanged
Result
A version bump in the existing folder
In Developer
Like editing the project and bumping its version
History
Cumulative HISTORY.md, a strictly greater version, and the original welcome.htm prose kept. Checks confirm nothing was lost on the way in
Authoring workflow for both tracks The author gives the language and script, then chooses one starting keyboard: a suggested match, their own choice, or US QWERTY. They then choose a track. Track 1 names a new keyboard; Track 2 keeps the existing identity. Both tracks share prefill, characters, the desktop gallery, a locked desktop layout, a derived touch layout, and docs. They split again at submission: Track 1 submits a new keyboard, Track 2 a new version. Checks and the compiler run on every edit from prefill to docs, and every answer arrives as a proposal with its source. EVERY ANSWER ARRIVES PROPOSED, WITH ITS SOURCE CHECKS + COMPILER ON EVERY EDIT Language and script autonym, English name, ISO 639 code, target script Choose one starting keyboard never a blank file Suggested match from related keyboards Author's choice any release/ keyboard or .kmn US QWERTY when nothing is closer Which track? TRACK 1 · NEW KEYBOARD Name the new keyboard new display name, ID derived from it TRACK 2 · NEW VERSION Keep the keyboard's identity same ID, from the current release Prefill from the starting keyboard script group, BCP47 tag, characters to confirm Character inventory only what the starting keyboard lacks Desktop behaviour gallery dead keys, modifiers, rotas, as live demos Desktop layout locked Touch layout derived from the locked desktop layout Docs and package details help page, author, copyright, language tags TRACK 1 Submit new keyboard new folder under release/ HISTORY: "Created from source vX.Y" TRACK 2 Submit new version version bump in the same folder cumulative HISTORY, fidelity checks .kmp download, source .zip, or draft pull request
Track 1 only Track 2 only Shared by both
What gets checked

Keyman's compiler checks the keyboard. The review checklist covers the rest.

Keyman's compiler, kmcmplib, validates the keyboard program, and the studio runs it in the browser on every edit. Much of what reviewers ask about on a pull request is in the files around the program: the package, history, licence, help pages, language tags, and touch layout. The studio turns the repository's review checklist into checks and questions, so authors can fix many of these before a reviewer ever sees them.

Fixes reviewers often ask for, and where the studio catches them

  • Missing usealtgr tag when RALT is used7.5 check
  • Wrong Copyright (C) syntax4.5 built in
  • NCAPS leftoverskmcmplib
  • Blank .kvks on-screen keyboard7.16 check
  • welcome.htm and help .php drifting apart11.9 check
Keyman's compiler (kmcmplib)
14

Named validation checks in developer/src/kmcmplib/src/.

  1. Identifier validation
  2. Duplicate group names
  3. Duplicate store names
  4. CAPS / NCAPS consistency
  5. Unreachable rules
  6. Deprecated store IDs (TSS_LANGUAGE…)
  7. Deadkey resolution
  8. platform() arguments
  9. if() store resolution
  10. Codepoint validity (U+XXXX)
  11. Context statement ordering
  12. context(N) offsets
  13. index(store, N)
  14. Named code constants

In the studio: the full compiler runs in the browser as WebAssembly, so every compiler error and warning reaches the author. Nine of these checks also run in TypeScript as the author types.

The keyboards review checklist
149

The repository's review checklist written out as criteria, plus keyboard-design heuristics and checks for adapted keyboards. Each criterion is handled in one way:

40
Built in from the start.

The studio produces it correctly, so the author can't get it wrong: folder placement, .kps file lists, licence syntax, README links, help-page header.

67
Checked automatically.

A named check stops the output until it is fixed: version rules, HISTORY format, copyright consistency across files, targets, fonts, welcome.htm/.php parity, touch-layout limits.

32
Asked in plain language.

Needs judgement, so it becomes a question with a proposed answer: is the description meaningful, are the tags minimal, does the RTL flag match the script.

10
Left to people.

Can't be known from the files. The author confirms these before submitting, and the reviewers make the call.

Browse every criterion, by checklist section
Built inChecked AskedLeft to people
IDSectionCriterionHandled by

What it can't do yet

We would rather you hear this from us

  • It is experimental. Expect rough edges, and expect reviewers to sometimes ask for changes.
  • It does not yet support CJK, Ethiopic, or Hangul jamo-composition input methods.
  • A keyboard that passes the studio's checks is not guaranteed to be accepted. Review is still review.
  • Some things can't be checked by software. The studio asks the author to confirm each of these before submitting, and the Keyman reviewers still make the final call:
Who it is for

Who it is for, and who it isn't

It is for

Linguists, community members, teachers, and literacy workers who know a language well and have not built a keyboard before.

It isn't a replacement for Keyman Developer

If you already write keyboards in Keyman Developer, it is still the most powerful tool. It can do far more than the studio, and the studio does not try to match it. We have deliberately kept the studio to a narrower set of well-understood keyboard designs.

Working alongside the Keyman team

If we make a reviewer's job harder, that is our bug

Every keyboard submitted from the studio goes through the Keyman team's normal review. If the studio produces something that makes reviewers' work harder, we want to hear about it. Open an issue.

Everything here is open source. If any idea or piece of code is useful to Keyman, we would be glad to see it there.