Documentation available at ๐ kmkfw.io.
KMK is a feature-rich and beginner-friendly firmware for computer keyboards written and configured in CircuitPython.
Synchronous chatter about KMK is available in the official Matrix room, #kmkfw:klar.sh. (Note: the KMK chat room is not a bug tracker, and it is not necessarily monitored by the maintainer crew, though we may lurk there sometimes.) This channel is bridged to Discord here for convenience.
- Fully configured through a single, easy to understand Python file that lives on a "flash-drive"-esque space on your microcontroller - edit on the go without DFU or other devtooling available!
- Single-piece or two-piece split keyboards are supported
- Chainable
keys such as
KC.LWIN(KC.L)
to lock the screen on a Windows PC - Built-in Unicode macros, including emojis
- RGB underglow and LED backlights
- One key can turn into many more based on how many times you tap it
- Bluetooth HID and split keyboards. No more wires.
KMK requires CircuitPython version 7.0 or higher. Our getting started guide can be found here.
KMK was originally authored by @klardotsh and @kdb424 over the winter of 2018-19, and has been contributed to by numerous others since. Contributions are welcome from all, whether it's in the form of code, documentation, hardware designs, feature ideas, or anything else that comes to mind. A list of KMK's contributors can be found on GitHub.
While Adafruit employees and affiliates are occasionally found in the commit log and their help has been crucial to KMK's success, KMK is not an official Adafruit project, and the Core team is not compensated by Adafruit for its development.
KMK uses Black with a Python 3.6 target and,
(controversially?) single quotes.
Further code styling is enforced with isort and flake8 with several plugins.
make fix-isort fix-formatting
before a commit is a good idea, and CI will fail
if inbound code does not adhere to these formatting rules. Some exceptions are
found in setup.cfg
loosening the rules in isolated cases, notably
user_keymaps
(which is also not subject to Black formatting for reasons
documented in pyproject.toml
).
Unit tests within the tests
folder mock various CircuitPython modules to allow
them to be executed in a desktop development environment.
Execute tests using the command python -m unittest
.
All software in this repository is licensed under the GNU Public License, version 3. All documentation and hardware designs are licensed under the Creative Commons Attribution-ShareAlike 4.0 license. Contributions to this repository must use these licenses unless otherwise agreed to by the Core team.
Due to ethical and legal concerns, any works derived from GitHub Copilot or similar artificial intelligence tooling are unacceptable for inclusion in any first-party KMK repository or other code collection. We further recommend not using GitHub Copilot while developing anything KMK-related, regardless of intent to submit upstream.