// the find
rmk-rs/rmk
A modern, easy-to-use, and feature-rich keyboard firmware written in Rust.
RMK is a Rust keyboard firmware built on embassy's async executor, targeting a wide range of embedded targets (STM32, nRF52/54, RP2040, ESP32) with wired and BLE wireless support. It's for keyboard hobbyists who want Vial-compatible dynamic remapping and split/wireless builds without hand-rolling their own firmware in C via QMK/ZMK.
Config surface is genuinely two-tiered: keyboard.toml covers the common case (matrix, layers, split, BLE) without touching Rust, but you can drop into the Rust API directly when the toml schema doesn't cover your board. The examples directory backs this up with real configs for a dozen+ chips including split, dongle, and DFU variants, not just a single toy demo. Embassy gives it a real async runtime instead of a hand-rolled scheduler, which is what makes the async_matrix low-power claim plausible rather than marketing filler. CI includes a binary-size bloat report on every PR, which matters a lot on flash-constrained MCUs and most hobby firmware projects don't bother tracking.
Latency and battery-life numbers (2ms wired, 10ms wireless, months on 2000mAh) are stated with no benchmark methodology or hardware/config specified, so treat them as best-case marketing until you measure your own build. MSRV policy is 'whatever latest stable is' with no pinned floor, so a toolchain bump can silently break your build with no warning. The Rynk protocol is called experimental and sits alongside Vial support, meaning two remapping protocols to maintain and no clear signal on which one is meant to be canonical going forward. Split/wireless keyboard firmware is the hardest class of bug to reproduce (RF pairing, dual-MCU sync, reconnection edge cases), and the README doesn't point to a test suite covering that logic — the directory tree shows CI scripts but no obvious tests/ directory for the core sync logic.