zmk/docs/blog/2023-09-15-zmk-sotf-6.md
2023-10-05 00:05:13 -07:00

210 lines
12 KiB
Markdown

---
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
<!-- TODO -->
[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). <!--The updated Zephyr release brings with it some key BLE stability fixes, as well as various other core improvements that improve ZMK. This was a huge undertaking!-->
### 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!
<!-- TODO -->
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) <!-- TODO -->
- 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!
<!-- TODO -->
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