Self-hostable ZMK Keymap Editor with Forgejo OAuth and repository sync
  • JavaScript 88.5%
  • CSS 7.8%
  • Shell 2.7%
  • Dockerfile 0.8%
  • HTML 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Karma d896e09b41
All checks were successful
Deploy / deploy (push) Successful in 47s
Test / test (push) Successful in 1m5s
Render exact QMK physical layouts
2026-08-10 06:57:49 +02:00
.forgejo/workflows Enable verified QMK production release 2026-08-10 06:50:43 +02:00
api Render exact QMK physical layouts 2026-08-10 06:57:49 +02:00
app Render exact QMK physical layouts 2026-08-10 06:57:49 +02:00
ops Harden and verify isolated QMK workflow execution 2026-08-10 06:47:50 +02:00
screenshots Swap light and dark screenshots 2023-10-30 19:07:05 -04:00
test Render exact QMK physical layouts 2026-08-10 06:57:49 +02:00
.dockerignore Add Forgejo OAuth and repository sync 2026-08-09 04:38:33 +02:00
.env.production.template Add firmware-neutral QMK workspace and isolated builds 2026-08-10 06:29:40 +02:00
.env.template Add firmware-neutral QMK workspace and isolated builds 2026-08-10 06:29:40 +02:00
.eslintrc Add linter and cleanup react app 2022-04-28 21:06:16 -04:00
.gitignore Add Forgejo OAuth and repository sync 2026-08-09 04:38:33 +02:00
compose.yaml Add firmware-neutral QMK workspace and isolated builds 2026-08-10 06:29:40 +02:00
Dockerfile Add firmware-neutral QMK workspace and isolated builds 2026-08-10 06:29:40 +02:00
FORGEJO.md Add firmware-neutral QMK workspace and isolated builds 2026-08-10 06:29:40 +02:00
index.js Fix missing config flags 2022-04-23 19:24:06 -04:00
keymap-editor-demo.mov Update documentation 2021-10-03 18:26:53 -04:00
LICENSE Add license 2021-09-09 20:22:38 -04:00
old-readme.md Update readme and screenshots 2023-07-13 22:14:43 -04:00
package-lock.json Add Forgejo OAuth and repository sync 2026-08-09 04:38:33 +02:00
package.json Add Forgejo OAuth and repository sync 2026-08-09 04:38:33 +02:00
Procfile Heroku deploy 2021-10-03 15:41:37 -04:00
README.md Add firmware-neutral QMK workspace and isolated builds 2026-08-10 06:29:40 +02:00
running-locally.md Add instruction for local configuration 2023-03-06 21:20:25 -05:00

Keymap Editor Icon Keymap Editor

This community fork adds a first-class, self-hostable Forgejo integration. See FORGEJO.md for OAuth setup and container deployment.

Forgejo fork status

This fork now reads the real ZMK .keymap source instead of treating keymap.json as canonical. Existing and custom bindings such as home-row mods can be edited, while comments, macros, combos, conditional layers, sensors, and unknown future ZMK syntax are preserved. Saves use the loaded file revision and stop on conflicts rather than overwriting newer Forgejo changes.

Repositories without the legacy config/info.json metadata are supported with an approximate layout generated from the default layer's key count.

The Forgejo workspace includes guided sections for keys and layers, combos, macros, custom behaviors (including home-row mods and tap dance), conditional layers, and rotary sensors. It can create safe starter definitions, exposes common settings in plain language, and keeps a validated full-source editor as an escape hatch for ZMK syntax that does not have a visual control yet. Layers can be created, renamed, and deleted without rewriting unrelated nodes.

The key picker is searchable by meaning (for example volume, escape, or arrow), groups common key categories, and displays human-readable names next to ZMK codes. The physical key selector for combos uses the repository layout when matching .json metadata is available.

QMK foundation

Forgejo repositories now have a visible Auto / ZMK / QMK firmware selector and a persisted target picker. QMK discovery supports complete firmware forks, External Userspace layouts, keymap.c, keymap.json, and standalone Configurator exports. Mixed repositories always require an explicit target.

QMK C and JSON documents use one firmware-neutral workspace contract. Visual key and layer edits patch concrete source byte ranges; comments, preprocessor branches, custom macros, callbacks, unknown JSON fields, and formatting outside the edited ranges remain untouched. Ambiguous C automatically becomes source-only instead of risking a rewrite. Optional rules.mk, config.h, and qmk.json files carry sha: null revisions so concurrent creation is detected before one atomic Forgejo commit.

The QMK feature catalog is pinned to revision 9caa5f871ddb9813c7370708be62d7a3e1cfeb75. Every eligible official catalog entry has a UI category, documentation link, adapter, and compatibility rule; hardware-definition-only work is shown as a requirement rather than changing pins, matrices, MCUs, bootloaders, or drivers.

Set ENABLE_QMK=false to remove QMK discovery, workspace mutation, workflow, build, log, and artifact routes immediately. Existing ZMK routes and the ZMK workspace do not depend on that flag.

A browser app to edit ZMK keymaps. The guided interface covers common changes without requiring keycode knowledge; the advanced source view remains useful for firmware-specific or newly introduced ZMK features.

Try it now! Go to the Keymap Editor and try it out with the built-in keymap-editor-demo-crkbd before setting up your own repo.

Talk to me! 🗣

I'd love to know how the Keymap Editor is working out for you! Has it helped you with managing your own keymaps, are you struggling with functionality, have you created your own keyboard and directed users here?

I want to know about all of that. I'm not taking any donations, the only thing driving this work forward is knowing what is or isn't helping people.

Shows a screenshot of the Keymap Editor application featuring a graphical layout of the Corne Keyboard with a keymap loaded from the nickcoutsos/keymap-editor-demo-crkbd GitHub repository.

Note

Source code updates are no longer shared here

I have been developing this application on and off since August 2020, but more recent source changes have not been published and this isn't likely to change any time soon. For more information see Wiki: Source Code Updates

If you do want to use the available source code as-is, you may wish to review the original README.

Features

  • WYSIWYG keymap editing
  • Multiple keymap sources:
    • GitHub repositories
    • Clipboard
    • File system*
  • Dark mode!
  • Conditional Layers
  • Combo editing
  • Macro editing (including support for creating/using parameterized macros)
  • Behavior editing (creation and re-configuration)
  • Auto-generated layouts for ZMK's supported keyboards**
  • Rotary encoders
  • Multiple keymaps

*File system web APIs are currently only supported in Chromium-based browsers

**Auto-generated layouts are meant as a starting-off point and are provided for most keyboards available in the ZMK repo and may need customization -- I own exactly one keyboard, I don't know all the layouts.

Read more: Wiki:Features

Usage

Local

This project runs as a web application, but there are still options for working with offline ZMK keymaps:

In the editor you can choose the Clipboard keymap source and paste in the contents of your ZMK .keymap file, and if you're using a Chromium-based web browser you can alternatively use the FileSystem source to read and make changes to select .keymap files directly.

Actual firmware builds are outside of the scope of this project, so if you're working on local keymap data it is assumed that you have a local ZMK development environment or some other means of running builds.

Web Integrations

This editor includes a GitHub integration. You can load the web app and grant it access to your public or private zmk-config repos. Changes to your keymap are committed right back to the repository so you only ever need to leave the app to download and flash firmware.

License

The code in this repo is available under the MIT license.

The collection of ZMK keycodes is taken from the ZMK documentation under the MIT license as well.