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

12 KiB

title author author_title author_url author_image_url tags
ZMK State Of The Firmware #6 Cem Aksoylar Documentation maintainer https://github.com/caksoylar https://avatars.githubusercontent.com/u/7876996
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. 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 to the hold-tap behavior in #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 in #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 by masking the triggering modifiers and added keep-mods property in #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 with one or two parameters in #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 to allow invoking arbitrary behaviors from encoders #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.)

Key toggle behavior

[cgoates] added the key toggle behavior in #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. 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 in #1586, #1745.

okke-formsma fixed an issue allowing tap dances to be invoked by combos in #1518.

petejohanson tweaked the caps word behavior to ignore modifiers in #1330.

Bluetooth and Split Improvements

Release held keys on peripheral disconnect #1340

Connections status check fix #1810

Option to require passkey input on pairing #1822

Multiple peripherals support #836

Improve settings_reset shield by making it clear bonds more reliably, and allow it to build for all boards #1879

Use directed advertising for split communication and more robust central scanning #1913 #1912

Hardware Support

Encoder support refactor #1039

Encoder support in split peripheral halves #728 #1841

Debouncing for direct GPIO driver #1288

Add toggle mode support for direct GPIO driver #1305

595 shift register driver #1325

Add RGB auto off options using idle timeout and USB status #1010

EPD initialization improvements #1098

MAX7318 GPIO expander driver #1295

nice!view support #1462 with custom status screen #1768

Improvements for Seeeduino Xiao BLE #1293, [d0176f36], #1545, #1927

Wait options during matrix reads and writes #1385, #1473 ?

Miscellaneous

Improved customer page support #1227

Switch to a reusable user config workflow #1183 #1258

Pre-commit setup and standardize formatting #1651

Refactors by Joel #1269 #1255 ?

Allow setting BLE connection intervals #862 ?

Default to 1ms USB HID interval #1271 ?

Allow configuring battery level report interval #1303 ?

Display Features

Add setting to invert display colors #1754

Add battery percentage option for battery widget #1563 ?

Refactor to create new peripheral status widget #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).

Documentation

Configuration options #722

Battery sensor documentation #868

New behavior guide #1268

Tap dance and hold-tap documentation improvements #1298

New shield docs for other interconnects including Xiao, Arduino Uno and Blackpill #1607

A new Bluetooth feature page #1499

Various improvements and fixes by kurtis-lew, joelspadin, filterpaper, byran.tech, dxmh, caksoylar and many others

New Shields

New Boards

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 Pete Johanson (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.