Keyboard Support

Contact and Search Homepage

Header bottom

On this page



The deadkey() emits a invisible placeholder in the output, or matches an invisible placeholder in the context.


deadkey(deadkeyName) + ... > ...
... > deadkey(deadkeyName)

dk(deadkeyName) + ... > ...
... > dk(deadkeyName)


A unique name for the deadkey.


The deadkey() or dk() statement lets you program an invisible placeholder variable into the output of a rule, which can then be matched by future rules. The deadkey will be processed by Keyman as if it were a normal character, but it is not output onto the screen, instead being stored internally in the context. A keyboard has a limit of 65,534 unique deadkeys.

While Keyman deadkeys arose from the concept of deadkeys in Windows, they are considerably more flexible. A deadkey in context will not be ignored by the keyboard rule matching algorithm, and multiple deadkeys can be present at one time.

Deadkeys are however ephemeral. When the user moves to another text field or uses the mouse or cursor keys to navigate in the current text field, the deadkey buffer will be reset. While this may seem unhelpful at first, it in fact provides a more consistent experience for the end user, as editing seemingly identical pieces of text will not result in differing behaviour.

The set() statement can be used to control persistent variables in a keyboard.

Note: While Keyman supports consecutive deadkeys between two real characters, as of build 2.0.390, KeymanWeb does not. This may be addressed in a future version.

Deadkeys can be used in stores and matched with any() and output with index().

Any deadkeys inserted by another rule immediately before or after the character to the left of the insertion point will be deleted when backspace is pressed, unless backspace is overridden with a keyboard rule. This can be illustrated with the following implicit rule (* indicates 0 or more deadkeys; 'char' is any character):

dk()* any(char) dk()* + [K_BKSP] > nul


Example: Using deadkey()

+ '`' > dk(backquote)
dk(backquote) + 'e' > 'è'


The deadkey() statement can be used in keyboards on all platforms.

Windows macOS Linux Desktop web Mobile web iOS Android

Version history

Numbered deadkeys were introduced in version 3.0. Keyman 5.0 and later support named deadkeys. The use of numbered deadkeys is still supported, but not recommended; named deadkeys make the keyboard source much more readable.