Unlike other keyboard firmwares, ZMK Firmware has been built from the ground up to allow users to manage their own keyboard configurations, including keymaps, specific hardware details, etc. all outside of the core ZMK Firmware source repository.
In addition to this, most users will not need to install any complicated toolchains or tools to build ZMK. GitHub Actions is used instead to automatically build the user's configured firmware for them.
The following steps can be taken to obtain an installable firmware image for your device, without the need to install any compiler or specialized toolchain. This is possible by leveraging GitHub Actions to build your firmware for you in the cloud, which you can then download and flash to your device.
Following the steps in this guide, you will:
- Create a new repository in GitHub that will contain your user config.
- Download and run a small shell script that will automate most of the setup. The script will:
- Prompt you for which board (e.g. nice!nano) and shield (e.g. Lily58 or Kyria) you want to create a configuration for.
- Prompt you for your GitHub username and repo where the config should be pushed.
gitto clone a template repository that will be the basis for your user's config repository.
- Use the given board and shield to update the included GitHub Action to build for the correct hardware.
- Commit the initial version.
- (If info was provided) Push the local repo to your GitHub repository.
- Add your own keymap overlay (
keymap.overlay) file to the repository, and change your keymap.
- Update the configuration flags for your user config, to enable/disable any ZMK features you would like to include.
- Commit and push the updates to trigger a new GitHub Action run.
The remainder of this guide assumes the following prerequisites:
- You have an active, working GitHub account.
- You have installed and configured the
gitversion control tool.
If you need to, a quick read of Learn The Basics Of Git In Under 10 Minutes will help you get started.
Before running the setup script, you will first need to create a new GitHub repository to host the config.
- Navigate to https://github.com/new
- When prompted for the repo name, enter
- The repository can be public or private
- Do not check any of the options to initialize the repository with a README or other files.
- Click "Create repository"
User Config Setup Script
To start the setup process, run the following from your command line prompt:
- Using curl
- Using wget
- Using PowerShell
MCU Board Selection
When prompted, enter the number for the corresponding MCU board you would like to target:
Keyboard Shield Selection
When prompted, enter the number for the corresponding keyboard shield you would like to target:
At the next prompt, you have an opportunity to decide if you want the stock keymap file copied in for further customization:
Enter or type
y to accept this. If you want to keep the stock keymap, or write a keymap
from scratch, type in
In order to have your new configuration automatically pushed, and then built using GitHub Actions, enter some information about your particular GitHub info:
Only the GitHub username is required; if you are happy with the defaults offered in the square brackets, you can simply hit
The setup script will confirm all of your selections one last time, before performing the setup:
Enter or typing
y, the script will create an initial config in a directory named after the repo name,
update the GitHub Action YAML file, commit the initial version, and then push to your repo.
If you used the default GitHub repo URL using the
https:// scheme, you may be prompted for your username + password in order to
push the initial commit.
Installing The Firmware
Download The Archive
Once the setup script is complete and the new user config repository has been pushed, GitHub will automatically run the action to build your keyboard firmware files. You can view the actions by clicking on the "Actions" tab on your GitHub repository.
Once you have loaded the Actions tab, select the top build from the list. Once you load it, the right side panel will include
a link to download the
Once downloaded, extract the zip and you can verify it should contain one or more
uf2 files, which will be copied to
Flashing UF2 Files
To flash the firmware, first put your board into bootloader mode by double clicking the reset button (either on the MCU board itself, or the one that is part of your keyboard). The controller should appear in your OS as a new USB storage device.
Once this happens, copy the correct UF2 file (e.g. left or right if working on a split), and paste it onto the root of that USB mass storage device. Once the flash is complete, the controller should automatically restart, and load your newfly flashed firmware.
Wirelessly Connecting Your Keyboard
Connecting your keyboard wirelessly is the same as adding other Bluetooth devides: press the reset button and scan for devices. However, pairing and bonding is still currently being worked on to increase relability and ease of use. In addition, users have in general reported that Bluetooth pairing with computers tends to be quite finnicky. Try out the connection with your tablet or phone first, as those devices seem to work much more consistently. See BLE Reset for help on resetting your MCUs if you're experiencing connection issues.
Connecting Split Keyboard Halves
For split keyboards, after flashing each half individually you can connect them together by resetting them at the same time. Within a few seconds of resetting, both halves should automatically connect to each other.