Logo

A modern, easy-to-use, and feature-rich keyboard firmware written in Rust.

👉 Join our [Discord server](https://discord.gg/HHGA7pQxkG) for discussions, support, and community collaboration! ----- [中文](https://github.com/rmk-rs/rmk/blob/main/README_zh.md) ## Features - **Broad microcontroller compatibility**: Leveraging [embassy](https://github.com/embassy-rs/embassy), RMK supports a comprehensive range of microcontrollers, including stm32, nRF, rp2040(w), esp32, etc - **Dynamic keymap customization**: RMK offers real-time keymap modifications through [Vial](https://get.vial.today), or its native [Rynk](https://rmk.rs/docs/features/rynk) protocol (experimental). You can even edit keymaps over BLE connections wirelessly - **Advanced keyboard functionality**: RMK comes with lots of advanced keyboard features by default, including layer switching, media controls, system commands, mouse control, and more - **Wireless connectivity**: BLE wireless support with automatic reconnection and multi-device capabilities for nRF52, nRF54, esp32, Pi Pico W and SF32LB52 microcontrollers, tested on nRF52840, nRF54L15, nRF54LM20, esp32c3, esp32c6, esp32h2, esp32s3, Pi Pico W - **Easy configuration**: RMK simplifies keyboard development through a single `keyboard.toml` configuration file. For Rust enthusiasts, the firmware remains highly customizable using Rust code - **Optimized performance**: RMK achieves approximately 2ms latency in wired mode and 10ms in wireless mode. With the `async_matrix` feature enabled, power consumption is significantly reduced—a 2000mAh battery can power your keyboard for several months ## [User Documentation](https://rmk.rs/docs/user_guide/guide_overview) | [API Reference](https://docs.rs/rmk/latest/rmk/) | [FAQs](https://rmk.rs/docs/getting_started/faq) | [Changelog](https://github.com/rmk-rs/rmk/blob/main/rmk/CHANGELOG.md) ## Real-World Implementations | [rmk-ble-keyboard](https://github.com/rmk-rs/rmk-ble-keyboard) | [dactyl-lynx-rmk](https://github.com/whitelynx/dactyl-lynx-rmk) | [sessile](https://github.com/willpuckett/sessile) | | --- | --- | --- | | | | | | [Urchin](https://github.com/TimoBbz/urchin-rmk-firmware) | [zx66](https://github.com/zongxin1993/zx66-keybord) | [rmk-zsa-voyager](https://github.com/jpds/rmk-zsa-voyager) | | --- | --- | --- | | | | | | [Lunakbd](https://github.com/gbPagano/lunakbd) | | --- | | | ## Getting Started ### Option 1: Start with a Template Quickly bootstrap your project using [rmkit](https://github.com/rmk-rs/rmkit) and the official RMK [project template](https://github.com/rmk-rs/rmk-template). ```shell cargo install rmkit flip-link # If you encounter installation issues on Windows, try this alternative command: # powershell -ExecutionPolicy ByPass -c "irm https://github.com/rmk-rs/rmkit/releases/latest/download/rmkit-installer.ps1 | iex" rmkit init ``` For comprehensive guidance, refer to the [User Guide](https://rmk.rs/docs/user_guide/guide_overview). ### Option 2: Explore Built-in Examples Browse the examples in the [`examples`](https://github.com/rmk-rs/rmk/tree/main/examples) directory. Below are step-by-step instructions for rp2040 development. The process is similar for other microcontrollers when using a debug probe. #### rp2040 Setup 1. Install [probe-rs](https://github.com/probe-rs/probe-rs) ```shell curl --proto '=https' --tlsv1.2 -LsSf https://github.com/probe-rs/probe-rs/releases/latest/download/probe-rs-tools-installer.sh | sh ``` 2. Build the firmware ```shell cd examples/use_rust/rp2040 cargo build --release ``` 3. Flash using a debug probe With a debug probe connected to your rp2040 board, simply run: ```shell cd examples/use_rust/rp2040 cargo run --release ``` 4. (Optional) Flash via USB Without a debug probe, you can use `elf2uf2-rs` to flash via USB: 1. Install the tool: `cargo install elf2uf2-rs` 2. Modify `examples/use_rust/rp2040/.cargo/config.toml` to use `elf2uf2`: ```diff - runner = "probe-rs run --chip RP2040" + runner = "elf2uf2-rs -d" ``` 3. Connect your rp2040 board while holding the BOOTSEL button until the USB drive appears 4. Flash the firmware: ```shell cd examples/use_rust/rp2040 cargo run --release ``` Upon successful completion, you'll see output similar to: ```shell Finished release [optimized + debuginfo] target(s) in 0.21s Running `elf2uf2-rs -d 'target\thumbv6m-none-eabi\release\rmk-rp2040'` Found pico uf2 disk G:\ Transfering program to pico 173.00 KB / 173.00 KB [=======================] 100.00 % 193.64 KB/s ``` ## [Development Roadmap](https://rmk.rs/docs/development/roadmap) Current roadmap of RMK can be found [here](https://rmk.rs/docs/development/roadmap). ## Minimum Supported Rust Version (MSRV) RMK is developed against the latest stable Rust release. While other versions may work, they are not fully tested. ## License RMK is licensed under either of - Apache License, Version 2.0 (LICENSE-APACHE or ) - MIT license (LICENSE-MIT or ) at your option.