This page describes how to setup and use the QMK CLI.
The QMK CLI makes building and working with QMK keyboards easier. We have provided a number of commands to simplify and streamline tasks such as obtaining and compiling the QMK firmware, creating keymaps, and more.
The CLI requires Python 3.5 or greater. We try to keep the number of requirements small but you will also need to install the packages listed in requirements.txt
.
QMK provides an installable CLI that can be used to setup your QMK build environment, work with QMK, and which makes working with multiple copies of qmk_firmware
easier. We recommend installing and updating this periodically.
If you have installed Homebrew you can tap and install QMK:
brew tap qmk/qmk
brew install qmk
export QMK_HOME='~/qmk_firmware' # Optional, set the location for `qmk_firmware`
qmk setup # This will clone `qmk/qmk_firmware` and optionally set up your build environment
If your system is not listed above you can install QMK manually. First ensure that you have python 3.5 (or later) installed and have installed pip. Then install QMK with this command:
pip3 install qmk
export QMK_HOME='~/qmk_firmware' # Optional, set the location for `qmk_firmware`
qmk setup # This will clone `qmk/qmk_firmware` and optionally set up your build environment
We are looking for people to create and maintain a qmk
package for more operating systems. If you would like to create a package for your OS please follow these guidelines:
- Follow best practices for your OS when they conflict with these guidelines
- Document why in a comment when you do deviate
- Install using a virtualenv
- Instruct the user to set the environment variable
QMK_HOME
to have the firmware source checked out somewhere other than~/qmk_firmware
.
If you do not want to use the global CLI there is a local CLI bundled with qmk_firmware
. You can find it in qmk_firmware/bin/qmk
. You can run the qmk
command from any directory and it will always operate on that copy of qmk_firmware
.
Example:
$ ~/qmk_firmware/bin/qmk hello
Ψ Hello, World!
There are some limitations to the local CLI compared to the global CLI:
- The local CLI does not support
qmk setup
orqmk clone
- The local CLI always operates on the same
qmk_firmware
tree, even if you have multiple repositories cloned. - The local CLI does not run in a virtualenv, so it's possible that dependencies will conflict
This command formats C code using clang-format. Run it with no arguments to format all core code, or pass filenames on the command line to run it on specific files.
Usage:
qmk cformat [file1] [file2] [...] [fileN]
This command allows you to compile firmware from any directory. You can compile JSON exports from https://config.qmk.fm or compile keymaps in the repo.
Usage for Configurator Exports:
qmk compile <configuratorExport.json>
Usage for Keymaps:
qmk compile -kb <keyboard_name> -km <keymap_name>
This command is similar to qmk compile
, but can also target a bootloader. The bootloader is optional, and is set to :flash
by default.
To specify a different bootloader, use -bl <bootloader>
. Visit https://docs.qmk.fm/#/flashing
for more details of the available bootloaders.
Usage for Configurator Exports:
qmk flash <configuratorExport.json> -bl <bootloader>
Usage for Keymaps:
qmk flash -kb <keyboard_name> -km <keymap_name> -bl <bootloader>
Listing the Bootloaders
qmk flash -b
This command lets you configure the behavior of QMK. For the full qmk config
documentation see CLI Configuration.
Usage:
qmk config [-ro] [config_token1] [config_token2] [...] [config_tokenN]
This command starts a local HTTP server which you can use for browsing or improving the docs. Default port is 8936.
Usage:
qmk docs [-p PORT]
This command examines your environment and alerts you to potential build or flash problems.
Usage:
qmk doctor
Creates a keymap.c from a QMK Configurator export.
Usage:
qmk json-keymap [-o OUTPUT] filename
This command allows you to convert from raw KLE data to QMK Configurator JSON. It accepts either an absolute file path, or a file name in the current directory. By default it will not overwrite info.json
if it is already present. Use the -f
or --force
flag to overwrite.
Usage:
qmk kle2json [-f] <filename>
Examples:
$ qmk kle2json kle.txt
☒ File info.json already exists, use -f or --force to overwrite.
$ qmk kle2json -f kle.txt -f
Ψ Wrote out to info.json
This command lists all the keyboards currently defined in qmk_firmware
Usage:
qmk list-keyboards
This command creates a new keymap based on a keyboard's existing default keymap.
Usage:
qmk new-keymap [-kb KEYBOARD] [-km KEYMAP]
This command formats python code in qmk_firmware
.
Usage:
qmk pyformat
This command runs the python test suite. If you make changes to python code you should ensure this runs successfully.
Usage:
qmk pytest