Can Keyman create "native" layouts?


Can I use Keyman to create keyboard layout native to the target OS, so that they can be used by other people that don’t have Keyman installed?

Something similar to the Microsoft Keyboard Layout Creator, but cross-platform.

Thank you!

For desktop keyboards they must have Keyman installed. For mobile layouts I believe you can create an app for the Google Play store.

You might want to look at Home - Keyboard App Builder - Keyboard App Builder . It combines the Keyman keyboard and the platform-specific Keyman engine into an app.

Thank you drowe, but I am looking for a desktop solution (Windows/Mac), not mobile.

Thank you Lorna!
Can Keyman export a layout in a format that, say, Ukelele can use?

No, unfortunately it does not. I haven’t used Ukelele much, but when I did the code was very similar to a SIMPLE .kmn file. That is, if the .kmn had rules like:

  • “hv” > U+1200
  • “hu” > U+1201
  • “h” > U+1205

The code might be easily massaged into what Ukelele needed. But, if there were stores or context rules, it didn’t work.

The basic answer is that Keyman keyboards do a bunch of things that the system-level keyboards on Windows and macOS do not.

Keyman keyboards also work quite differently to the system keyboards, being context- and rule-based, rather than key sequence- and table-based. The Keyman context and rule model does not really translate well to a key sequence/table-based solution.

Also, both Windows and macOS have tools available to build system keyboards – MSKLC and Ukelele.

So for those reasons, we’ve never tried to export Keyman keyboards to system keyboards. (Going the other way is far easier, and we already import from MSKLC/Windows keyboards; anyone want to write a Ukelele or xkb importer?)

Keyman and system keyboards on our supported platforms

(I know you were mostly interested in Mac/Windows, but for completeness, and for future reader benefit, I’ll list all our supported platforms here)

  • Windows kbdxx.dll style keyboards in particular are quite constrained; they were designed many years ago and have not substantially changed for a long time. Windows supports third party input methods through the Text Services Framework, and Keyman functions as a first class citizen of that framework. You can use Keyman Engine for Windows to create your own input method app + installer, and avoid bundling the whole Keyman app. (Even an MSKLC keyboard has an installer, after all, and is a “program”, being a .dll file.)
  • Mac is our newest platform. Keyman functions as an input method on macOS. We have, in theory, a Keyman Engine for macOS that you could bundle as your own input method app, but we have not yet documented it for use.
  • On iOS and Android, it is not possible to add a system keyboard. The model on those platforms is to install an app to add extra keyboards. So Keyman works appropriately there – and Keyboard App Builder (Android only), and Keyman Engine (both platforms), allow keyboard developers to build their own apps that supply Keyman keyboards, without needing the whole Keyman app itself.
  • On Linux, Keyman is just another package available through the system package manager (well, ideally… it’s not yet in some distros – we’d welcome Keyman package maintainers for distros such as Red Hat). For example, Wasta Linux supplies Keyman as standard part of its distribution.
  • On Web, there is no system keyboard :slight_smile: Here, Keyman is another library available for website developers.

The future: CLDR Keyboards

That’s the story today. However, the Keyman team is closely involved in a project to create a standard cross-platform keyboard description language, as part of the Unicode CLDR project. We are currently writing the first implementation of this standard in Keyman, and adding development tools for these keyboards to Keyman Developer. This is a multi-year effort.

The hope is that in the future, platform vendors will also support this standard, and at that point, you won’t need the Keyman app to use keyboards from this standard.

How can you help?

We really welcome involvement and support from anyone who wishes to see this project succeed. It’s a big effort and we’re a small team! If you’d like to be involved in any way at all, please get in touch (DM or reply here).