From v0.7 to v0.8
RMK v0.8 is a major release with lots of updates and improvements. The key changes in v0.8 include:
-
Dependency upgrades: Updated many dependencies to their latest versions, including esp-hal
v1.0, trouble-host v0.5, and others.
-
Tap-hold system refactoring: Introduced the new Morse operation — a superset of tap-hold and
tap-dance functionalities.
-
Simplified matrix configuration: Replaced input/output_pins with row/col_pins in
keyboard.toml and removed the col2row feature from Cargo.toml, making matrix setup more
intuitive.
-
Dongle support: Reintroduced dongle support for split keyboards.
-
General fixes and improvements: Numerous bug fixes and refinements across the codebase.
Cargo.toml Update
Update RMK and embassy-* dependencies
First, update the rmk version to v0.8 and adjust its feature flag. Update versions of embassy-*
dependencies and HALs as well:
# Update the following dependencies in your `Cargo.toml`.
# Keep feature gates unchanged unless otherwise specified.
- rmk = { version = "0.7", features = [
+ rmk = { version = "0.8", features = [
"nrf52840_ble",
"split",
"async_matrix",
"adafruit_bl",
- "rapid_debouncer" # If applicable
- "col2row" # If applicable
- "bidirectional" # If applicable
] }
- embassy-executor = { version = "0.7.0" }
+ embassy-executor = { version = "0.9" }
- embassy-time = { version = "0.4", }
+ embassy-time = { version = "0.5" }
- embassy-nrf = { version = "0.3.1" }
+ embassy-nrf = { version = "0.8" }
- embassy-rp = { version = "0.4" }
+ embassy-rp = { version = "0.8" }
- bt-hci = { version = "0.3", default-features = false, features = ["defmt"] }
+ bt-hci = { version = "0.6", features = ["defmt"] }
- cyw43 = { version = "0.3.0", features = ["defmt", "firmware-logs", "bluetooth"] }
+ cyw43 = { version = "0.5", features = ["defmt", "firmware-logs", "bluetooth"] }
- cyw43-pio = { version = "0.4.0", features = ["defmt"] }
+ cyw43-pio = { version = "0.8.0", features = ["defmt"] }
Remove patched dependencies
If your Cargo.toml contains [patch.crates-io], remove them:
# Remove patched dependencies(if any)
- [patch.crates-io]
- embassy-sync = { git = "https://github.com/embassy-rs/embassy.git", rev = "f35aa4005a63e8d478b2b95aaa2bfb316b72dece" }
- embassy-futures = { git = "https://github.com/embassy-rs/embassy.git", rev = "f35aa4005a63e8d478b2b95aaa2bfb316b72dece" }
- embassy-executor = { git = "https://github.com/embassy-rs/embassy.git", rev = "f35aa4005a63e8d478b2b95aaa2bfb316b72dece" }
- embassy-time = { git = "https://github.com/embassy-rs/embassy.git", rev = "f35aa4005a63e8d478b2b95aaa2bfb316b72dece" }
- embassy-usb = { git = "https://github.com/embassy-rs/embassy.git", rev = "f35aa4005a63e8d478b2b95aaa2bfb316b72dece" }
- embassy-embedded-hal = { git = "https://github.com/embassy-rs/embassy.git", rev = "f35aa4005a63e8d478b2b95aaa2bfb316b72dece" }
- embassy-nrf = { git = "https://github.com/embassy-rs/embassy.git", rev = "f35aa4005a63e8d478b2b95aaa2bfb316b72dece" }
- embassy-rp = { git = "https://github.com/embassy-rs/embassy.git", rev = "f35aa4005a63e8d478b2b95aaa2bfb316b72dece" }
- cyw43 = { git = "https://github.com/embassy-rs/embassy.git", rev = "f35aa4005a63e8d478b2b95aaa2bfb316b72dece" }
- cyw43-pio = { git = "https://github.com/embassy-rs/embassy.git", rev = "f35aa4005a63e8d478b2b95aaa2bfb316b72dece" }
- nrf-sdc = { git = "https://github.com/alexmoon/nrf-sdc.git", rev = "7be9b853e15ca0404d65c623d1ec5795fd96c204" }
- nrf-mpsl = { git = "https://github.com/alexmoon/nrf-sdc.git", rev = "7be9b853e15ca0404d65c623d1ec5795fd96c204" }
- trouble-host = { git = "https://github.com/embassy-rs/trouble", rev = "90c6359" }
- sequential-storage = { git = "https://github.com/tweedegolf/sequential-storage", rev = "4e9abcec36c259cb2c30840649ff8f9a6b6fcafc" }
nRF specific update
For nRF, update nrf-sdc and nrf-mpsl to git version
- nrf-sdc = { version = "0.1.0", default-features = false, ..
+ nrf-sdc = { git = "https://github.com/alexmoon/nrf-sdc", rev = "11d5c3c", ..
- nrf-mpsl = { version = "0.1.0", default-features = false, ..
+ nrf-mpsl = { git = "https://github.com/alexmoon/nrf-sdc", rev = "11d5c3c", ..
Pico W specific update
For Pico W, rename "rp2040_bl" feature to "rp2040", patch cyw43, and embassy-time-*
- rmk = { version = "0.7", features = ["pico_w_ble", "rp2040_bl"] }
+ rmk = { version = "0.8", features = ["pico_w_ble", "rp2040"] }
+ [patch.crates-io]
+ cyw43 = { git = "https://github.com/embassy-rs/embassy", rev = "faacad6" }
+ embassy-time-driver = { git = "https://github.com/embassy-rs/embassy", rev = "faacad6" }
+ embassy-time = { git = "https://github.com/embassy-rs/embassy", rev = "faacad6" }
RP2040 specific update
For RP2040 wired split, rename "rp2040_bl" feature to "rp2040", remove "rp2040_pio" feature
- rmk = { version = "0.7", features = ["split", "rp2040_bl", "rp2040_pio"] }
+ rmk = { version = "0.8", features = ["split", "rp2040" ] }
ESP32 specific update
For ESP32, update all esp-* dependencies to latest, add vial feature gate to rmk if you need vial
support
rmk = { version = "0.8", default-features = false, features = [
"esp32c3_ble",
"log",
"storage",
- "col2row",
+ "vial",
]
- esp-backtrace = { version = "0.16", features = [
+ esp-backtrace = { version = "0.18", features = [
"esp32c3",
- "exception-handler",
"panic-handler",
"println",
] }
- esp-storage = { version = "0.6.0", features = ["esp32c3"] }
- esp-hal = { version = "1.0.0-beta.1", features = ["esp32c3", "unstable"] }
- esp-hal-embassy = { version = "0.8.1", features = ["esp32c3"] }
- esp-alloc = { version = "0.8.0" }
- esp-println = { version = "0.14.0", features = ["esp32c3","log-04"] }
- esp-wifi = { version = "0.14.1", features = ["esp32c3", "ble"] }
+ esp-hal = { version = "1.0", features = ["esp32c3", "unstable"] }
+ esp-storage = { version = "0.8", features = ["esp32c3"] }
+ esp-alloc = { version = "0.9.0" }
+ esp-println = { version = "0.16.0", features = ["esp32c3", "log-04"] }
+ esp-radio = { version = "0.17", features = ["esp32c3", "unstable", "ble"] }
+ esp-rtos = { version = "0.2", features = ["esp32c3", "esp-radio", "embassy"] }
+ esp-bootloader-esp-idf = { version = "0.4", features = ["esp32c3", "log-04"] }
+ static_cell = "2"
STM32 specific update
For STM32, update embassy-stm32 to v0.4
- embassy-stm32 = { version = "0.2", ... }
+ embassy-stm32 = { version = "0.4", ... }
keyboard.toml Update
[matrix] update
The main update of keyboard.toml is in the [matrix] section:
row2col options is not a "fake" option anymore, it "just works" in keyboard.toml
input/output_pins is removed, row/col_pins is used instead
[matrix]
- input_pins = ["P1_00", "P1_01", "P1_02", "P1_07", "P1_08"]
- output_pins = ["P1_05", "P1_06", "P1_03", "P1_04"]
+ row_pins = ["P1_00", "P1_01", "P1_02", "P1_07", "P1_08"]
+ col_pins = ["P1_05", "P1_06", "P1_03", "P1_04"]
# RMK uses col2row as the default matrix diode direction, if you want to use a row2col matrix, add `row2col = true`
# row2col = true
[behavior] update
Due to Morse update, [behavior] section is needed to be updated as well.
The options are also updated, please refer to
Morse Configuration for details
[behavior]
# The tap_hold setting is removed, use morse instead
- tap_hold = { .. }
+ morse = { .. }
Other configuration update
For other configuration updates, please refer to Configuration section
Dongle support
Dongle support is back! Checkout
config example
and
Rust example
for more details.
For Rust code users, you need to add a
keyboard.toml with following content to your
project to specify the number of peripherals:
keyboard.toml
[rmk]
split_peripherals_num = 2