ZMK Buddy
A live keymap visualization tool for ZMK keyboards, built on top of keymap-drawer.
Features
- Live visualization of keyboard key presses
- Overlay display with configurable transparency
- Support for ZMK keymap YAML files
- Global keyboard monitoring (requires appropriate permissions)
- Learning Mode: Tracks your typing accuracy to help you learn touch typing
Learning Mode
ZMK Buddy includes a learning feature to help you master touch typing without looking at the keyboard:
- Accuracy Tracking: Monitors each keypress and guesses at errors (i.e. it saw you press backspace after a key)
- Progress Persistence: Statistics are saved to your local data directory and persist between sessions
- Visual Feedback: Keys you've mastered are significantly dimmed, encouraging you to rely on muscle memory
- Progress Summary: Shows your overall learning progress at startup
How It Works
- Each key starts with a score of 0%
- Each time you type a key, it's tracked as "pending"
- If you press another key (not backspace), the pending key is marked as correct (+1% to score)
- If you press backspace, the pending key is marked as incorrect (-5% to score)
- Once a key's score exceeds 80%, it's considered "learned" and dimmed in the display (to make it harder for you to 'cheat' by looking at the on-screen keyboard)
- If accuracy falls below 80% the visible key reappears as a hint to help you find it
Installation
pipx install zmk-buddy
Usage
zmk-buddy --keymap keymap.yaml
You will want to use the keymap.yaml file generated by keymap-drawer. This is how we know where/how to draw keys and what the layer options are.
Some ZMK keyboard builds auto generate keymap.yaml automatically, otherwise see the keymap-drawer documentation for how to generate one for your keyboard/layout. You can either use their command line tool or their webapp to generate this yaml file.
If you do not specify a keymap a placeholder example keymap is used, which is probably not what you want.
Options
-d, --debug: Enable debug logging-k, --keymap <file>: Load a custom keymap YAML file
Controls
- FIXME to cycle through layers
- FIXME to exit
- Drag the window to reposition it
Requirements
- Python 3.12+
Platform Support
ZMK Buddy supports global keyboard monitoring across all major platforms:
| Platform | Backend | Notes |
|---|---|---|
| Linux | evdev (preferred) | Requires user to be in input group |
| Windows | pynput | 'should' work, but untested by me - let me know how it goes for you? |
| macOS | pynput | May require Accessibility permissions in System Preferences (also untested) |
Linux Permissions
For global keyboard monitoring on Linux, your user needs access to /dev/input/event* devices. Add your user to the input group:
sudo usermod -aG input $USER
Then log out and back in for the change to take effect.
License
Copyright 2026 Kevin Hester, kevinh@geeksville.com GPL V3 license
Metadata
Release files for zmk-buddy 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| zmk_buddy-0.1.2.tar.gz | 33.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| zmk_buddy-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 69.5 kB
Release files / zmk_buddy-0.1.2.tar.gz
| Download URL | zmk_buddy-0.1.2.tar.gz |
|---|---|
| Size | 33.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
17782f9f54e6fc79a6d137f558cb7c49616fe36075c9a8eb826478fe997e5ba6
|
|
BLAKE2b-256 checksum How to use checksums |
52e3f36c0888b2a599e672e4e592d8a022d9657e29c64f613495ea068218efc3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 14, 2026.
Transparency logRelease files / zmk_buddy-0.1.2-py3-none-any.whl
| Download URL | zmk_buddy-0.1.2-py3-none-any.whl |
|---|---|
| Size | 36.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
036a27b4a818788e102cc646d549bfa88985690d2df90de3b72a64a4491c7d43
|
|
BLAKE2b-256 checksum How to use checksums |
af668b9c85e96393b2bb540a6702defd83596eb2956564cd935cdb06ee187e1b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 14, 2026.
Transparency log