From v0.9 to v0.10
Use this guide to update an existing RMK v0.9 firmware project. For new projects, follow the current processor guide.
Processors
Update registration first, then choose whether to keep your existing run loop.
Remove registration mode arguments
In each keyboard.toml keyboard module, replace #[register_processor(event)] or #[register_processor(poll)] with the bare attribute:
Registration now starts the type's Runnable implementation. Check the type's #[processor] options to preserve the behavior you want:
Rust API projects that already use run_all! do not need a registration change.
Use the generated deadline loop
Existing DeadlineProcessor::deadline() and on_deadline() methods keep their names. If you want RMK to generate the run loop for an existing deadline processor:
- Add
deadlineto its#[processor]attribute. - Keep
deadline()andon_deadline()inimpl DeadlineProcessor. - Remove the old
impl Runnableand#[runnable_generated]marker.
Keep the marker and impl Runnable if your custom loop is still needed. The inactivity example shows a complete processor with the generated loop.
Battery configuration tables
Battery settings now require a dedicated table for each board. Battery fields under [ble], [split.central], or [[split.peripheral]] are no longer accepted.
Move each board's battery settings to its battery table:
Move battery_adc_pin, adc_divider_measured, adc_divider_total, charge_state, charge_led, and battery_user_description if configured. Leave BLE connection and pairing settings in [ble].
For example, a unibody configuration changes as follows:
Remove the battery fields from their old sections after moving them. Peripherals use only their own battery table and never inherit the central's battery configuration.
See Battery configuration for field descriptions and split keyboard examples.
Serial numbers
Serial numbers no longer contain the RMK version. USB, BLE, and Rynk report the same protocol marker and device ID. See About serial numbers.
Default serial numbers change as follows:
- nRF BLE builds keep their hardware ID. Vial serials stay the same; Rynk BLE serials gain the
rynk:prefix. - Other defaults change from the version stamp to a hardware ID or the
RMKfallback.
Existing Vial and Rynk markers in configured IDs are replaced automatically.
To update your project:
- If an nRF BLE keyboard sets
serial_number, remove the override to keep using its hardware ID. Older firmware ignored the override. - Remove
RMK_BUILD_INFO. Omitserial_numberto use the platform default. - For a custom ID in Rust, replace the string literal with
rmk::config::build_serial_number("board-0001"), using your existing ID. The field now owns the complete serial number. DeviceConfigis nowClonerather thanCopy. When USB and BLE share a configuration, passrmk_config.device_config.clone()to USB before movingrmk_configinto BLE.