Skip to main content

A live keymap visualization tool for ZMK keyboards.

Project description

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

  1. Each time you type a key, it's tracked as "pending"
  2. If you press another key (not backspace), the pending key is marked as correct
  3. If you press backspace, the pending key is marked as incorrect
  4. Once a key reaches 90% accuracy over at least 100 presses, it's considered "learned" and dimmed in the display

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

  • Press y to cycle through layers
  • Press x 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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zmk_buddy-0.1.1.tar.gz (29.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zmk_buddy-0.1.1-py3-none-any.whl (31.3 kB view details)

Uploaded Python 3

File details

Details for the file zmk_buddy-0.1.1.tar.gz.

File metadata

  • Download URL: zmk_buddy-0.1.1.tar.gz
  • Upload date:
  • Size: 29.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for zmk_buddy-0.1.1.tar.gz
Algorithm Hash digest
SHA256 c35e7f5836e1e625029dd4dc77a2d13085059f37636f591bbaffd772994768e2
MD5 0530e3cb2be2023c9f769fbcce4a5199
BLAKE2b-256 89efbe1c3253d00acdeddf0dc2ff3479e7ec96b96ada84a51e75e9bf5993dc39

See more details on using hashes here.

Provenance

The following attestation bundles were made for zmk_buddy-0.1.1.tar.gz:

Publisher: publish-release.yml on geeksville/zmk-buddy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zmk_buddy-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: zmk_buddy-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 31.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for zmk_buddy-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a3fb50ad1e05e398f81112c38b563254bb435933f479d71672065d933405080b
MD5 608cdfc3e450d4d57d9ec1a7d9199de0
BLAKE2b-256 a3b8efb4a3c50ddea20cb17693aabd1fbd9c2e743bea0c8fa2a681256760d40f

See more details on using hashes here.

Provenance

The following attestation bundles were made for zmk_buddy-0.1.1-py3-none-any.whl:

Publisher: publish-release.yml on geeksville/zmk-buddy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page