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 key starts with a score of 0%
  2. Each time you type a key, it's tracked as "pending"
  3. If you press another key (not backspace), the pending key is marked as correct (+1% to score)
  4. If you press backspace, the pending key is marked as incorrect (-5% to score)
  5. 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)
  6. 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

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.2.tar.gz (33.1 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.2-py3-none-any.whl (36.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: zmk_buddy-0.1.2.tar.gz
  • Upload date:
  • Size: 33.1 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.2.tar.gz
Algorithm Hash digest
SHA256 17782f9f54e6fc79a6d137f558cb7c49616fe36075c9a8eb826478fe997e5ba6
MD5 8c3803965585489848703dd7df9989b5
BLAKE2b-256 52e3f36c0888b2a599e672e4e592d8a022d9657e29c64f613495ea068218efc3

See more details on using hashes here.

Provenance

The following attestation bundles were made for zmk_buddy-0.1.2.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.2-py3-none-any.whl.

File metadata

  • Download URL: zmk_buddy-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 36.4 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 036a27b4a818788e102cc646d549bfa88985690d2df90de3b72a64a4491c7d43
MD5 2417fc77fa8d54392eb466e231d4dab8
BLAKE2b-256 af668b9c85e96393b2bb540a6702defd83596eb2956564cd935cdb06ee187e1b

See more details on using hashes here.

Provenance

The following attestation bundles were made for zmk_buddy-0.1.2-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