Modify, and generate keyboard layout from single JSON file. Built with TypeScript.
- Validate JSON layout (See example files in
input
) - Generate layout files
.keylayout
(macOS) inside.bundle
.klc
(Windows).kcm
(Android Physical keyboard)- XKB (Linux, BSD, etc)
- Chrome OS remap extension (Manifest V3)
Note: Alphanumeric shortcut keys still do not work on Chrome OS.
-
ISO and JIS layouts are not supported on Windows yet:
Kiimo currently does not generate corrected.klc
files for ISO or JIS layouts, and Microsoft Keyboard Layout Creator (MSKLC) cannot compile them properly
(e.g., keys such as¥
and_
cannot be mapped). -
One key cannot send multiple codepoints due to compatibility limitations:
For example, plain XKB does not support mapping a single key to send multiple characters.
See the mailing list thread: (xkb) how to map a key to multiple characters?
For instance, you cannot configure the “A” key to send “aaaaaaaaaa”.
- From the project’s main page, click the Code button, then Download ZIP.
- Extract the ZIP file.
- Locate the
output
folder. - Find the layout you want.
Want just one folder (e.g. Manoonchai-ColemakDH.bundle
)?
GitHub doesn’t support this directly — you’ll have to find your own way. 😉
Hint: try searching “download GitHub subdirectory”
See installation guide at:
👉 https://github.com/hiohlan/mnc
- Edit an existing JSON file in the
input
directory, or add a new one. - Some platforms use icons or images; source images are in the
src
folder.
If you want to use your own icons, create images with the same filenames and replace the files inside the built output folder after building.
For macOS bundles, you can also configure which icon to use by setting theicon
field in your JSON config (e.g. "icon": "lana" will use./src/iconMac/icon_lana.icns
).
Note: Chrome OS and Android physical keyboard layouts use the same key mapping format as XKB (Linux).
You can build the layout using any compatible runtime.
In this example, we use Bun:
- Install dependencies:
bun install
- Run the CLI:
bun run cli
- Select a layout from the list.
$ bun run cli ? Pick input JSON file › - Use arrow-keys. Return to submit. Manoonchai_Lao.json Manoonchai-ColemakDH-ZXCVD.json Manoonchai-ColemakDH.json Manoonchai-JIS.json Manoonchai-v0.2.json Manoonchai-WittNV.json ❯ Manoonchai.json
- The generated files will appear in:
where
output/<filename>/
<filename>
matches the selected JSON file. - For Windows users:
To install the layout on your PC, use Microsoft Keyboard Layout Creator (MSKLC) to compile the generated.klc
file into an installable layout.
- Improved 16x16px icon for Mac
- Swap some key for TaiTham
- Fixed: wrong locales ID (
la
->lo
). - Feature: Added support for TaiTham (Lanna, Tai Khuen, Tai Lue).
- Fixed: generated wrong
id
— it included space characters and dots. Now replaced with underscores for compatibility. - Switched macOS bundle language tag from hardcoded "th" to dynamically use the language specified in the JSON input.
- Fixed wrong
when generate
partial alphanumeric_keys xkb_symbols "ThaiMnc"
xkb
.
- Improved JSON file picker:
- Now only shows
.json
files (excludes.json.bak
) - Sorted alphabetically (A–Z)
- Now only shows
- Layouts
- Moved @narze 's mod to
Manoonchai-ColemakDH-ZXCVD
- Added original
Manoonchai-ColemakDH
layout (non-modified)
- Moved @narze 's mod to
- Fixed wrong
TISInputSourceID
when generate.bundle
.
-
Added support for ISO and JIS layouts on:
- macOS
- XKB (Linux, BSD, etc)
- Chrome OS
- Android physical keyboard
-
macOS: Layouts now build as
.bundle
format.
(It's just a folder with a specific file extension.) -
Android (.kcm): Alphanumeric shortcut keys are now supported; no longer fall back to the default QWERTY layout.
(Theoretically; pending real-device testing.)
- works on my machine
MIT License
Copyright (c) 2021 Manassarn Manoonchai