Welcome to the third ZMK "State Of The Firmware" (SOTF)!
This update will cover all the major activity since SOTF #2. This edition comes a bit later than planned, but the amount of features and changes will hopefully make it worth it!
Here's a summary of the various major changes since last time, broken down by theme:
Tons of activity related to keymaps, so we'll go into more detail this time.
innovaker completely overhauled the set of available codes for keymaps, and simultaneously has created beautiful documentation to help users visualize the codes, and also understand if they are supported on their particular operating system.
This also laid the foundation for the other keymap related changes that are now available.
Modified (Shifted) Codes
okke-formsma added the ability to apply modifiers to a code, e.g.:
Control + c when pressed. This feature is often used on smaller keyboards to achieve "shifted keycodes", e.g.
LS(N1) to send a
To make this easier, in addition to all the normal codes, we now have defines for common shifted codes, e.g.
To learn more, check out the Modifiers documentation.
Simplified Key Press Behavior
In previous versions of ZMK, users needed to be careful to select between the
&cp behaviors in their keymaps, depending on
whether the particular keycode they wanted to send was in the "HID consumer page" or not. Forcing users to understand the difference and get
this right was awkward and error prone.
Several important power management features have been added to ZMK, helping save power for many use cases.
BLE Battery Level Reporting
Nicell added the necessary driver and core code to send BLE battery level notifications to hosts that support displaying them. Testing seems to show this works with Windows and GNOME, but macOS does not display the battery info.
External Power Control
megamind4089 added a new driver and behavior to allow users to toggle (on/off) the external power supplied by boards such as the nRFMicro and nice!nano that have specialized hardware for this purpose.
With this change, you can add
to toggle (on/off) the power to external hardware like RGB underglow or OLEDs. Check out the external power control docs for more info.
petejohanson has contributed the initial deep sleep support to ZMK. This work also included some automatic power savings by switching to PORT events on the nRF52 chips, which reduces the idle power draw, even without deep sleep. Deep sleep is currently not turned on by default, but will be soon.
joelspadin added output selection to allow selecting whether to send output over USB or BLE if both are connected. This should now help avoid having "double keypresses" when your keyboard is plugged into a host.
Bootloader Corruption Fix
Nicell has already blogged about this, but for those that missed it, a major, and incredibly difficult to pin down bug involving corruption of the bootloader on devices using the Adafruit nRF52 bootloader has been fixed by Nicell. If you've encountered this bug, flashing the latest firmware should prevent it from reoccurring. Unfortunately, due to the nature of this fix, you will need to re-pair your keyboard with your hosts, as the fix involves changing where settings are stored in the flash of the controller.
Official USB Product ID
- Vendor ID:
- Product ID:
We are incredibly grateful that Openmoko Inc., in the wake of discontinuing the openmoko projects, has made this an option for OSS projects.
Development: Remote Docker Container Integration
idan contributed VSCode devcontainer integration to make it easier for developers to build and develop ZMK without having to do complicated local toolchain setup and configuration. This also opens up some amazing future flexibility for things like GitHub Codespaces.
There's some follow up tweaks necessary for better supporting using this with user config repositories, which will be available soon.
- Reviung41 in #297 - Nicell
- Boardsource 3x4 in #296 - neegool
- NIBBLE in #292 - jaygreco
- Microdox in #245 - careyk007
- MakerDiary M60 in #233 - megamind4089
- TGX4 in #226 - mubeenkhan94
- Quefrency V1 in #216 - noar-t
- Cradio in #224 - davidphilipbarr
- Romac+ in #198 - reizero00
There has been an amazing amount of testing from various users as we develop new features. In particular, we'd like to give a shout out to tominabox1 who has been tireless in providing detailed and thorough testing of changes as they are being developed.
Some items listed in the last coming soon section are still under active development.
- OLED work, including battery and USB/BLE connection status - petejohanson
- One shot mod/layer behaviors - okke-formsma
- A power profiler page for the website, to help users estimate their battery life for a given keyboard - Nicell
- A keymap converter to automatically update keymaps to the new codes and use of
&kpeverywhere - joelspadin
Some statistics of interest for ZMK:
- GitHub (lifetime stats)
- 210 Closed PRs
- 116 Stars
- 101 Forks
- Discord Chat
- 363 total registered
- Website (last 30 days)
- 8.5K page views
- 766 new users
Thanks again to the numerous contributors and users who have made working on ZMK such a pleasure!