This document is intended to give an overview of the main keyboard technologies currently available on various platforms, particularly in terms of meeting requirements to enter text for complex scripts.

For more ScriptSource entries about keyboarding, see scriptsource.org/topic/keyboards.

Standard keyboard systems work mainly by mapping a single keystroke (with or without a modifier like Shift) to a single character on screen. This works fine for simple scripts, but more complex or larger scripts cannot be handled this way, so additional features are needed within the keyboarding systems to meet these needs - for example typing e then ‘ to output é.  An introduction to keyboard design theory, whilst out of date in implementation details, gives an excellent technical overview of various issues to consider when creating complex keyboards.

On most platforms there are now multiple keyboarding systems available, so a choice has to be made about which is appropriate for a particular situation. This article gives a summary of the main systems available, and will be improved with more details over time. There are many other keyboard systems available; here we aim to cover those most likely to be useful for handling more complex scripts.

In addition to the “systems” described below, there are also other input methods suitable for entering small amounts of text - for example web-based pickers can be used on any operating system to write text in complex scripts in a browser which can then be copied and pasted into an application.

At the end of this document there are comparison charts between some of the systems.

Clearly, to enter text for a complex script, a font needs to be installed that supports that script, but font issues are not covered here.

Windows systems

MSKLC (Microsoft Keyboard Layout Creator)

MSKLC is a freeware Microsoft tool for creating new keyboard layouts using the Windows-native keyboard file format, and so gives seamless integration with Windows systems. It can use an existing Windows keyboard as a starting point. However, it is limited in its ability to cope with more complex scripts.

Keyman

Keyman is a powerful, commercial tool from  Keyman for creating keyboard input methods. It allows for more complex input processing than MSKLC and so meets a wider range of needs. It does not use the Windows keyboard driver format, so a separate client needs to be installed on each computer using the keyboard. There are many existing Keyman keyboards available. More information on Keyman can be found on SIL's  NRSI site. There are now other keyboarding systems which can work with Keyman .kmn source files.

InKey

Inkey is based on  Autohotkey, an open source macro-creation and automation tool. The language used by InKey (and Autohotkey underneath) provides great flexibility and allows complex keyboard behaviours to be programmed. The separate open source Inkey Keyboard Creator is available to facilitate the initial creation of the keyboard, including an option to import Keyman .kmn files. More complex tasks have to be done by editing the Inkey .ahk source file directly, after which the keyboard creator cannot be used to make further changes.

Inkey is currently under private beta release, but the authors have indicated that the next version will be released under a free, open source license.

Ekaya

Ekaya is an open source keyboarding system that uses the open source KMFL library to parse the Keyman .kmn files, so keyboards developed with Keyman should work with Ekaya as an alternative to the Keyman client. (Note that Ekaya may not offer the exact same functionality as the latest Keyman desktop version).

Keymagic

 Keymagic is an open source keyboarding system which works on several platforms. Whilst similar to KMFL, it uses its own source format rather than Keyman .kmn files.

MAC OS X systems

Ukelele

Ukelele is a freeware keyboard layout editor for OS X which provides a graphical interface for .keylayout files (the standard keyboard format for OS X).

Keyman

Keyman is now available on Mac OS X! This beta release of Keyman brings the power of Keyman Desktop and its extensive library of keyboards for over 1,000 languages to Mac OS X. Use all the keyboards you are familiar with on Windows on Mac OS X. You can even create your own custom keyboards with Keyman Developer 9.0 (a Windows product).

Keymagic

Keymagic is also available for OS X - the Keymagic section under Windows systems has more information.

Linux Systems (including Ubuntu)

Most standard Linux installations include X Windows and the XKB keyboard manager (see below) which includes many keyboards. In addition, the  iBus input method framework (IME) can be turned on and configured, and more keyboards/IMEs are available through that. So it is worth looking through standard XKB and iBus keyboards prior to considering developing your own.

XKB (X windows KeyBoard extension)

XKB is the underlying (pre-installed) keyboard manager for X windows, the standard windows system on Linux (Ubuntu included). This means that a completed keyboard can be submitted for inclusion in all future platforms and devices using X. The user need not install any additional software to use the keyboard. See  linux.lsdev.sil.org/wiki/index.php/Category:XKB_Keyboards for some documentation on using XKB including creating new keyboards for this system.

KMFL (Keyboard Mapping for Linux)

KMFL is an open source keyboarding system for Linux systems, particularly Ubuntu, which is compatible with Keyman 7 (or earlier) .kmn source files, so brings the power of Keyman keyboarding to a Linux environment. Although designed for Linux/Unix systems in general, full downloads and instructions are currently only available for Ubuntu.

Keymagic

Keymagic is also available for Ubuntu - the Keymagic section under Windows systems has more information.

Android systems

Devices running Android provide a choice of languages and input methods. Extra input methods and separate language packs can be installed from the Google Play store.

Multiling is one of the possible solutions to explore for extending writing systems support.

Keyman has developed a product,  Keyman for Android, which includes a free edition.

Note that, as with all systems, for each keyboard there needs to be an appropriate font available; on Android, facilities to add new fonts to be used for all applications are very limited (and currently only possible when rooting/jail-breaking the device). Some applications come bundled with fonts to extend their own functionality, but they will only work within the particular application.

Web-based systems

This covers web-based keyboarding systems that allow users to type in different scripts/languages without installing keyboard layouts or software on their computers, but directly, through web applications in the browser.

KeymanWeb

Keymanweb is a commercial subscription-based keyboard system which can be built into websites.

Google Virtual Keyboards

The status of these is unclear. The  Google Developers website states that they are deprecated, but provides no information about alternative plans for them.

Other Input Methods

This section covers other ways of entering Unicode text that fall short of being a full keyboarding system.

Such alternative input methods can be useful if you do not know a script well enough to use the native keyboard, or if the native keyboard is not available. For longer runs of texts these alternative approaches are not ideal.

Web-based pickers

With these, the text is entered in a text box within the picker, running directly in a browser. The text can then be copied into any document/application that supports Unicode. These can be used with any operating system provided the corresponding fonts are available (and smart rendering is available for certain advanced scripts).

For examples, see Richard Ishida's  Unicode character pickers, branah.com's  virtual keyboards or Tomasz Szynalski's  TypeIt where pickers are available per language or script, and laid out in such a way as to help with identifying the characters required. Some of these pickers provide a search feature or allow an existing string of text to be analysed.

Character Pickers

There are various utilities available to search for, copy and paste an extended character from one of the Unicode blocks.

For example, for Windows there are  BabelPad and  Unibook, for Ubuntu  Gucharmap, and for OS X  Font_Book.

Cross-platform applications such as  Libreoffice.org also provide glyph palettes (or “Insert special characters”) to find, copy and paste the characters you need.

USV entry methods

Some operating systems also provide a way to type in a character directly using its Unicode Scalar Value (USV).

On Windows, this is achieved by holding down the Alt key and entering "+" followed by the USV number using the numeric keypad in a text area. On Ubuntu this is achieved by holding down Shift and Ctrl, and entering 'U' followed by the USV number in a text area.

This method of finding characters is sometimes referred to as “using Alt Codes”. The drawback is that you need to know the numerical value corresponding to the character you are looking for. Making use of a character picker when the existing collection of characters is searchable is usually a more useful solution.

Keyboard Systems comparison charts

These charts are designed to assist with comparison of some of the main systems. There are separate tables for usage (ie what the keyboard can do) and keyboard development.

More systems will be added to the charts as research continues.

Keyboard usage comparison chart
FeaturesMSKLCKeymanInkeyEkayaXKBKMFLUkelele
Operating system W W/M W W L L M
Input options
             
a) Map a single key to an output (including the use of modifiers) Y Y Y Y Y Y Y
b) Use deadkeys (which are not output) Y Y Y Y Y Y Y
c) Rotors to cycle through options N N Y N N N N
d) Mnemonic and/or positional layouts P MP M MP P MP P
Output options
               
e) Output multiple values from one input Y Y Y Y ? Y Y
f) Map to Unicode code points above Plane 0 Y Y Y Y Y Y Y
g) Replace previously output characters N Y Y Y N Y N
h) Context sensitive output N Y Y Y N Y N
i) Store in different order from input N Y Y Y N Y Y
j) Enforce normalization in keyboard N Y Y Y ? Y Y
k) Keep track of original keystroke order N Y Y Y N Y N
l) Advanced backspace handling N Y Y Y N Y N
Other options
             
m) Freely downloadable Y N Y Y Y Y Y
n) On-screen keyboard available Y Y N N Y N Y
o) Can include user-selectable options for keyboard N Y Y N Y N N
Notes:

- The letter at the start of each feature is a link to the fuller Feature Descriptions table. Similarly that table has links back to this chart.
- Operating systems: Microsoft Windows (W), Mac OS X (M), Linux (L), Android (A). See detailed entries about individual systems for operating system versions etc
- For MSKLC and Ukelele this is really a list of what the underlying operating system keyboard system can do since that is what they produce

Feature descriptions
FeatureExample
Usage: Input options
 
a) Can map a single key to one of the outputs this system supports. This includes using keys with modifiers like shift and alt 'd' ->  U+0E01
b) Use deadkeys - any key can be designated as a deadkey (which is not displayed on screen) and any single key following the deadkey can be mapped for output '-r' ->  U+024D
c) Rotors - can cycle through a number of possible output variants - for example by repeatedly pressing a key  
d) Is input based on the hardware positon (P) of the key or the mnemonic code (M) transmitted after processing by the operating system keyboard layout (If keyboards can be written both ways, MP is shown)
Usage: Output options
 
e) The output from a single input option can be multiple Unicode values '&' -> U+0E31 U+0E48
f) Can map inputs to Unicode code points above Plane 0 (the application must also be able to handle Plane 0 and higher)  
g) Can replace previously output characters 'r' -> 'r' and 'r-' ->  U+024D
h) The output can be based on the context - eg previously output characters '0' ->  U+02E9 if after another pitch character
i) Can do reordering, for example so that a prevowel is typed before a consonant but stored after it Users want to type  U+1031 before  U+1000 even though they are stored in the opposite order
j) Can enforce normalization in keyboard so that data is stored in a canonical form even if entered in different order  
k) Keep track of original keystroke order so that, even if output is reordered, then system can track keystroke order - eg for backspace handling or double-press detection  
l) Has options for advanced backspace handling With "e" + "'" -> é, can choose if backspace just deletes the accent or whole character
Usage: Other options
 
m) Freely downloadable - there is no cost to use the software  
n) An on-screen keyboard can be displayed to show the keyboard layout and optionally used for input  
o) Can include features to change the behaviour of the keyboard which can be selected by the user after installation  
Keyboard development comparison chart
FeaturesMSKLCKeymanInkeyXKBUkelele
Operating system W W W L M
Keyboard Sources
         
Can use any existing operating system keyboard as a starting point Y N N Y Y
Can use an existing Keyman keyboard as a starting point. This will require the Keyman source file (.kmn) rather than just a compiled keyboard N Y Y N N
Developer GUI facilities
         
A GUI is available for creating the initial keyboard layout Y Y Y Y Y
Keyboards can be tested within the GUI Y Y N N N
A debugger is available to track through the steps taken by the system when creating output from input N Y N N N
Can create keyboard packages for distribution Y Y Y Y Y
Notes:

- Inkey here refers to the combination of the Inkey keyboarding system and the separate Inkey Keyboard Creator