--- title: "ZMK State Of The Firmware #6" author: Cem Aksoylar author_title: Documentation maintainer author_url: https://github.com/caksoylar author_image_url: https://avatars.githubusercontent.com/u/7876996 tags: [SOTF, keyboards, firmware, oss, ble] --- Welcome to the sixth ZMK "State Of The Firmware" (SOTF)! This update will cover all the major activity since [SOTF #5](/blog/2022/04/10/zmk-sotf-5). That was over a year ago (again!), so there are many new exciting features and plenty of improvements to cover! ## Recent Activity Here's a summary of the various major changes since last time, broken down by theme: ### Keymaps/Behaviors #### Hold-tap improvements [andrewjrae] added the [global quick tap property](../docs/behaviors/hold-tap.md#global-quick-tap) to the hold-tap behavior in [#1187](https://github.com/zmkfirmware/zmk/pull/1187), which prevents the hold behavior from triggering if it hasn't been a certain duration since the last key press. This is a useful feature to prevent accidental hold activations during quick typing and made its way into many keymaps! [urob] added the [`hold-trigger-on-release` property](../docs/behaviors/hold-tap.md#positional-hold-tap-and-hold-trigger-key-positions) in [#1423](https://github.com/zmkfirmware/zmk/pull/1423). This significantly increases the usefulness of positional constraints on hold-taps, since it allows combining multiple holds such as different modifiers for home-row mods usage. #### Masking mods in mod-morphs [aumuell], [vrinek] and [urob] contributed to improving the behavior of [mod-morphs](../docs/behaviors/mod-morph.md) by masking the triggering modifiers and added `keep-mods` property in [#1412](https://github.com/zmkfirmware/zmk/pull/1412). This unlocks more use cases for mod-morphs, since you are no longer constrained to emitting keycodes that work well with the triggering modifier keycodes. #### Parameterized macros [petejohanson] added [macros that can be parameterized](../docs/behaviors/macros.md#parameterized-macros) with one or two parameters in [#1232](https://github.com/zmkfirmware/zmk/pull/1232). This allows users to define macros in a more modular way and is a nice quality-of-life improvement. #### Arbitrary behaviors on encoder rotation [nickconway] and [petejohanson] added [sensor rotation behaviors](../docs/behaviors/sensor-rotate.md) to allow invoking arbitrary behaviors from encoders [#1758](https://github.com/zmkfirmware/zmk/pull/1758). Previously encoder rotations could only invoke the key-press behavior `&kp` through the `&inc_dec_kp` binding, whereas now you can define new sensor rotation behaviors to invoke others. (Note that currently behaviors that have "locality" such as `&rgb_ug` do not work as expected via encoder rotation bindings in split keyboards, due to issue [#1494](https://github.com/zmkfirmware/zmk/issues/1494).) #### Key toggle behavior [cgoates] added the [key toggle behavior](../docs/behaviors/key-toggle.md) in [#1278](https://github.com/zmkfirmware/zmk/pull/1278), which can be used via its `&kt` binding to toggle the state of a key between pressed and released. #### Bug fixes and other improvements [petejohanson], [andrewjrae] and [okke-formsma] tracked down and fixed an issue causing stuck keys when there are combos on key positions involving hold-tap behaviors in [#1411](https://github.com/zmkfirmware/zmk/pull/1411). This was an elusive bug that took a lot of effort from the community to nail down and fix! [nguyendown] and [joelspadin] tracked down and fixed a couple tricky issues causing stuck keys with [sticky keys](../docs/behaviors/sticky-key.md) in [#1586](https://github.com/zmkfirmware/zmk/pull/1586), [#1745](https://github.com/zmkfirmware/zmk/pull/1745). [okke-formsma] fixed an issue allowing tap dances to be invoked by combos in [#1518](https://github.com/zmkfirmware/zmk/pull/1518). [petejohanson] tweaked the caps word behavior to ignore modifiers in [#1330](https://github.com/zmkfirmware/zmk/pull/1330). ### Bluetooth and Split Improvements Release held keys on peripheral disconnect [#1340](https://github.com/zmkfirmware/zmk/pull/1340) Connections status check fix [#1810](https://github.com/zmkfirmware/zmk/pull/1810) Option to require passkey input on pairing [#1822](https://github.com/zmkfirmware/zmk/pull/1822) Multiple peripherals support [#836](https://github.com/zmkfirmware/zmk/pull/836) Improve `settings_reset` shield by making it clear bonds more reliably, and allow it to build for all boards [#1879](https://github.com/zmkfirmware/zmk/pull/1879) Use directed advertising for split communication and more robust central scanning [#1913](https://github.com/zmkfirmware/zmk/pull/1913) [#1912](https://github.com/zmkfirmware/zmk/pull/1912) ### Hardware Support Encoder support refactor [#1039](https://github.com/zmkfirmware/zmk/pull/1039) Encoder support in split peripheral halves [#728](https://github.com/zmkfirmware/zmk/pull/728) [#1841](https://github.com/zmkfirmware/zmk/pull/1841) Debouncing for direct GPIO driver [#1288](https://github.com/zmkfirmware/zmk/pull/1288) Add toggle mode support for direct GPIO driver [#1305](https://github.com/zmkfirmware/zmk/pull/1305) 595 shift register driver [#1325](https://github.com/zmkfirmware/zmk/pull/1325) Add RGB auto off options using idle timeout and USB status [#1010](https://github.com/zmkfirmware/zmk/pull/1010) EPD initialization improvements [#1098](https://github.com/zmkfirmware/zmk/pull/1098) MAX7318 GPIO expander driver [#1295](https://github.com/zmkfirmware/zmk/pull/1295) nice!view support [#1462](https://github.com/zmkfirmware/zmk/pull/1462) with custom status screen [#1768](https://github.com/zmkfirmware/zmk/pull/1768) Improvements for Seeeduino Xiao BLE [#1293](https://github.com/zmkfirmware/zmk/pull/1293), [d0176f36], [#1545](https://github.com/zmkfirmware/zmk/pull/1545), [#1927](https://github.com/zmkfirmware/zmk/pull/1927) Wait options during matrix reads and writes [#1385](https://github.com/zmkfirmware/zmk/pull/1385), [#1473](https://github.com/zmkfirmware/zmk/pull/1473) ? ### Miscellaneous Improved customer page support [#1227](https://github.com/zmkfirmware/zmk/pull/1227) Switch to a reusable user config workflow [#1183](https://github.com/zmkfirmware/zmk/pull/1183) [#1258](https://github.com/zmkfirmware/zmk/pull/1258) Pre-commit setup and standardize formatting [#1651](https://github.com/zmkfirmware/zmk/pull/1651) Refactors by Joel [#1269](https://github.com/zmkfirmware/zmk/pull/1269) [#1255](https://github.com/zmkfirmware/zmk/pull/1255) ? Allow setting BLE connection intervals [#862](https://github.com/zmkfirmware/zmk/pull/862) ? Default to 1ms USB HID interval [#1271](https://github.com/zmkfirmware/zmk/pull/1271) ? Allow configuring battery level report interval [#1303](https://github.com/zmkfirmware/zmk/pull/1303) ? #### Display Features Add setting to invert display colors [#1754](https://github.com/zmkfirmware/zmk/pull/1754) Add battery percentage option for battery widget [#1563](https://github.com/zmkfirmware/zmk/pull/1563) ? Refactor to create new peripheral status widget [#1263](https://github.com/zmkfirmware/zmk/pull/1263) ? #### Zephyr 3.2 [petejohanson] helped prepare and test the upgrade of ZMK to Zephyr 3.2 in [#1499](https://github.com/zmkfirmware/zmk/pull/1499)(https://github.com/zmkfirmware/zmk/pull/1499). ### Documentation Configuration options [#722](https://github.com/zmkfirmware/zmk/pull/722) Battery sensor documentation [#868](https://github.com/zmkfirmware/zmk/pull/868) New behavior guide [#1268](https://github.com/zmkfirmware/zmk/pull/1268) Tap dance and hold-tap documentation improvements [#1298](https://github.com/zmkfirmware/zmk/pull/1298) New shield docs for other interconnects including Xiao, Arduino Uno and Blackpill [#1607](https://github.com/zmkfirmware/zmk/pull/1607) A new Bluetooth feature page [#1499](https://github.com/zmkfirmware/zmk/pull/1499) Various improvements and fixes by kurtis-lew, joelspadin, filterpaper, byran.tech, dxmh, caksoylar and many others ## New Shields - Eternal keypad [#1136](https://github.com/zmkfirmware/zmk/pull/1136) - [halcyonCorsair](https://github.com/halcyonCorsair) - nullbits SNAP [#1319](https://github.com/zmkfirmware/zmk/pull/1319) - [jaygreco](https://github.com/jaygreco) - Aurora Sweep [#1504](https://github.com/zmkfirmware/zmk/pull/1504) - [petejohanson] - Aurora Corne [#1520](https://github.com/zmkfirmware/zmk/pull/1520) - [petejohanson] - Aurora Lily58 [#1553](https://github.com/zmkfirmware/zmk/pull/1553) - [petejohanson] - Aurora Sofle [#1864](https://github.com/zmkfirmware/zmk/pull/1864) - [petejohanson] - Aurora Helix [#1873](https://github.com/zmkfirmware/zmk/pull/1873) - [petejohanson] - ZMK Uno shield [#1576](https://github.com/zmkfirmware/zmk/pull/1576) - [petejohanson] - Waterfowl [#1554](https://github.com/zmkfirmware/zmk/pull/1554) - [JW2586](https://github.com/JW2586) - Kyria Rev 3 [#1627](https://github.com/zmkfirmware/zmk/pull/1627) - [petejohanson] - Leeloo v2 and Leeloo-Micro [#1762](https://github.com/zmkfirmware/zmk/pull/1762) - [ClicketySplit](https://github.com/ClicketySplit) - Spaceman Pancake [#1400](https://github.com/zmkfirmware/zmk/pull/1400) - [jasonhazel](https://github.com/jasonhazel) - Reviung5 [#1548](https://github.com/zmkfirmware/zmk/pull/1548) - [zblesk](https://github.com/zblesk) ## New Boards - RP2040 boards, including Sparkfun Pro Micro, Adafruit KB2040, Seeeduino Xiao RP2040 were added as part of the Zephyr 3.2 upgrade [#1499](https://github.com/zmkfirmware/zmk/pull/1499) - [petejohanson] - Puchi BLE [#1445](https://github.com/zmkfirmware/zmk/pull/1445) - [BenRoe](https://github.com/BenRoe) - nRFMicro 1.3/1.4 (nRF52833) [#912](https://github.com/zmkfirmware/zmk/pull/912) - [pashutk](https://github.com/pashutk) - nRF5340 DK [#1562](https://github.com/zmkfirmware/zmk/pull/1562) - [joelspadin] - PillBug [#1530](https://github.com/zmkfirmware/zmk/pull/1530) - [kylemccreery](https://github.com/kylemccreery) - Preonic Rev 3 [#1575](https://github.com/zmkfirmware/zmk/pull/1575) - [jeromeOlivier](https://github.com/jeromeOlivier) - Corne-ish Zen v2 [#1498](https://github.com/zmkfirmware/zmk/pull/1498) and v1 [#1593](https://github.com/zmkfirmware/zmk/pull/1593) - [petejohanson] and [caksoylar] - Polarity Works CKP family of boards [#1547](https://github.com/zmkfirmware/zmk/pull/1547) - [ReFil](https://github.com/ReFil) ## Coming Soon! Some items listed in the last coming soon section are still under active development. - Caps/Scroll/Num Lock LED support - Mouse Keys - Wired split support - More modular approach to external boards/shields, custom code, user keymaps, etc. - More shields and boards ## Statistics Some statistics of interest for ZMK: - GitHub (lifetime stats) - 163 Contributors - 1239 Closed PRs - 1845 Stars - 1918 Forks - Discord Chat - 7865 total registered (130% up from last SOTF!) - Website (last 30 days) - 35.9K page views - 3.29K new users ## Sponsorship [Open Collective](https://opencollective.com/zmkfirmware) [Pete Johanson](https://github.com/sponsors/petejohanson) (detail what is used for what) ## Thanks! As we approach the two year birthday for ZMK, I am reminded of how far we have come in such a short time, in large part thanks to the _amazing_ community that has grown around it. I am so grateful to have so many contributors, testers, and user believing in the project and helping make it a joy to work on. [okke-formsma]: https://github.com/okke-formsma [nicell]: https://github.com/Nicell [petejohanson]: https://github.com/petejohanson [kurtis-lew]: https://github.com/kurtis-lew [joelspadin]: https://github.com/joelspadin [dxmh]: https://github.com/dxmh [caksoylar]: https://github.com/caksoylar