Open-source project
qmk/qmk_toolbox avatar
qmk/qmk_toolbox

QMK Toolbox: nine bootloaders wrapped, drivers installed on first run, and a beta tag above 0.3.4

A Toolbox companion for QMK Firmware

3,123 stars565 forksC#MIT

At a glance

What is it?
QMK Toolbox is a single desktop application for putting firmware onto a keyboard, and its documentation is essentially a table of the flashers it wraps. Each row names a bootloader and the third-party command line tool that handles it, which makes the project easy to read and easy to extend on one condition: you have to know the commands. What the page also shows is a version number written into prose next to a release list that carries a bare beta tag, and a system requirements list that stops at two platforms while the install instructions reach for a package manager form.
Who is it for?
QMK Toolbox fits a keyboard hobbyist who wants one window that finds a board and flashes it, rather than learning a different command line utility per bootloader. Three things to check before you rely on it.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 86 days ago.
What is it written in?
Mainly C#, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 14, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • qmk/qmk_toolbox3,123 ★ · +40
Star history
Repository2026-09-242026-11-14
qmk/qmk_toolbox3.1k3.1k

40 Stars in the last 51 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

The application is a wrapper around nine flashers and three programmers

The stated purpose is narrow: a collection of flashing tools packaged into one application, supporting auto-detection and auto-flashing of firmware to keyboards. What follows is the inventory, and it is the most useful part of the page. Nine bootloader families are supported, each paired with the tool that does the work: ARM DFU covering several STM32-family chips through one utility, an Atmel and LUFA DFU path through a programmer utility, a Massdrop path, a HID bootloader path, an Arduino path through avrdude, a Teensy path through the Teensy loader, an LUFA and QMK HID path, a WB32 path, and a mass storage path. Then three in-system programmers are listed separately, which are the small adapters that sit between the USB port and the chip. Nothing about the flashing logic is described here, because there is none to describe: the app detects the board and invokes somebody else's program.

Every row names somebody else's command line tool

Read the bootloader table as a dependency list and it becomes clear where the compatibility boundaries are. Every row links out to the project that does the flashing, which means the toolbox tracks those tools rather than reimplementing their protocols, and it means a board whose bootloader is not in this list is a board this application cannot help with. The list is also uneven in a revealing way: most rows carry a chip family in parentheses, so one utility covers several vendors, while two rows have no linked tool at all, one for a HID bootloader family and one for mass storage. The mass storage row in particular is named without an explanation of how it is driven, which suggests it is the least settled of the set.

Adding a flasher requires you to bring the command with you

The contribution rule is stated in one sentence and it is the most precise thing on the page. If there is interest in another bootloader, it can be added if its commands are known. That is the whole contract: the project is not asking for a driver implementation or protocol research, it is asking for the invocation details of a program that already exists. It is a low bar, and a useful one, because the hard part of supporting a new board family is always the command line, not the wrapper. It also explains why the list reads the way it does, since each addition is only as good as the documentation the contributor could find for the tool underneath.

The HID console listens on one usage page and one usage

Alongside flashing, the application listens for debug output, and the specification is exact enough to implement against. It listens for HID messages on usage page 0xFF31 and usage 0x0074, and says it is compatible with a vendor tool of the same name from the Teensy author. The condition on your side is a line in the keyboard's build makefile: set console output to yes and the firmware can print messages with a formatted print function. So the debugging path is a raw HID channel rather than a serial port, which matters for boards without a serial interface, and it costs one line of firmware configuration. What the page does not say is whether the console works while a flash is in progress or only between sessions.

Windows installs drivers at first run, and the documented fix is a third-party tool

The dependency section is two paragraphs and the second one is the useful one. On Windows the application prompts at first run to install the drivers it needs, so the driver step is part of the normal install path rather than something you find out about when a flash fails. If you then hit a device-not-found error while flashing, the page points at a separate utility for fixing driver issues, with a link into the firmware documentation. That is the honest shape of this problem on Windows, where a keyboard in bootloader mode presents a USB identifier that the system has no driver for, and a signed driver for that identifier is often the thing that is missing. Nothing equivalent is needed on the other platform, and the page does not pretend otherwise.

The version is written in prose and the release list carries a beta

Two version signals appear and they are not the same kind of thing. The download section states in prose that the current version is 0.3.4, which is the kind of sentence that is correct on the day it is written and quietly wrong afterwards. The release list beside it contains a tag named beta, published the day after the 0.3.4 tag and in the same minute as the last push to the branch, so a rolling beta channel exists alongside the numbered line. The numbered history is also slow: the previous release is 0.3.3, from two years before. None of that makes the project unhealthy, but it does mean a page reader and someone browsing the releases are looking at different things.

Requirements stop at two platforms while installation reaches for Homebrew

The system requirements are two lines, one operating system version for the Mac side and one Windows build with its update level named. There is no Linux requirement, which is consistent with a project that ships an app bundle and a Windows executable rather than a portable binary. Then the installation section offers a third form, for users of the package manager on macOS it is available as a cask:

sh
brew install qmk-toolbox

A cask is the macOS-specific form of a package-manager install, so the practical effect is that the two supported platforms have two installers each, a standalone build and an installer build for Windows and for the Mac, plus the package manager route, and every other platform has none. The two platform screenshots sit directly under the description as images hosted off the repository, and the readme file itself is stored with a lowercase name beside a licence file carrying the usual uppercase name.

Editorial conclusion

QMK Toolbox fits a keyboard hobbyist who wants one window that finds a board and flashes it, rather than learning a different command line utility per bootloader. Three things to check before you rely on it. Which bootloader your board actually uses, since the app is a wrapper and a board on a row you do not have is a board you cannot flash from it. Whether the driver situation on Windows is acceptable to you, since it prompts at first run to install drivers and the documented fix for an undetectable device is a separate third-party utility. And which build you take, because the page names one version in prose while the release list also carries an untagged beta published after it.

Frequently asked questions

What is the QMK toolbox?

A collection of flashing tools packaged into one application, supporting auto-detection and auto-flashing of firmware to keyboards. It wraps nine bootloader families with their third-party tools plus three in-system programmers, and it also listens for HID console messages on usage page 0xFF31 and usage 0x0074, compatible with hid_listen.

Which bootloaders can the QMK Toolbox flash?

Nine families: ARM DFU for APM32, Kiibohd, STM32 and STM32duino through dfu-util; an Atmel, LUFA and QMK DFU path through dfu-programmer; Atmel SAM-BA for Massdrop; BootloadHID for Atmel and PS2AVRGB; Caterina for Arduino and Pro Micro through avrdude; HalfKay for Teensy and Ergodox EZ; an LUFA and QMK HID path; WB32 DFU; and LUFA mass storage. Three in-system programmers are listed too, and others can be added if their commands are known.

What are the system requirements for the QMK Toolbox?

macOS 12 or higher, or Windows 10 May 2020 Update (20H1) or higher. On Windows the application prompts at first run to install the drivers it needs, and a device-not-found error while flashing may need a separate driver utility. Downloads are offered as a standalone build and an installer for each platform, plus a package-manager cask for macOS.

How do I get debug output from a QMK keyboard through the Toolbox?

The application listens for HID messages on usage page 0xFF31 and usage 0x0074, compatible with the hid_listen tool from the Teensy author. On the firmware side you enable console output in the keyboard's build makefile, which lets the firmware print messages with a formatted print function.

What is the current version of the QMK Toolbox?

The page states 0.3.4, published 2026-08-19, with the previous numbered release being 0.3.3 from 2024-06-13. The release list also contains a tag named beta, published the following day in the same minute as the last push to the branch, so a rolling beta sits alongside the numbered line.

Official sources

  1. License: MIT
  2. Project website
  3. qmk/qmk_toolbox on GitHub
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/qmk-qmk-toolbox.svg)](https://hysenlabs.com/projects/qmk-qmk-toolbox)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/qmk-qmk-toolbox.svg)](https://hysenlabs.com/projects/qmk-qmk-toolbox)

Was this useful?