{"id":13423330,"url":"https://github.com/HaoboGu/rmk","last_synced_at":"2025-03-15T17:31:39.896Z","repository":{"id":193169468,"uuid":"688011037","full_name":"HaoboGu/rmk","owner":"HaoboGu","description":"Rust keyboard firmware library with layers, macros, real-time keymap editing, wireless(BLE) and split support","archived":false,"fork":false,"pushed_at":"2025-03-07T14:55:46.000Z","size":8545,"stargazers_count":796,"open_issues_count":37,"forks_count":69,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-03-07T16:47:28.955Z","etag":null,"topics":["cortex-m","embedded","esp32","firmware","keyboard","keyboard-firmware","nrf52","rp2040","rust","stm32","usb","usb-hid","wireless"],"latest_commit_sha":null,"homepage":"https://haobogu.github.io/rmk/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HaoboGu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE-APACHE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["haobogu"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":null}},"created_at":"2023-09-06T13:17:05.000Z","updated_at":"2025-03-07T13:36:15.000Z","dependencies_parsed_at":"2024-01-17T11:17:05.150Z","dependency_job_id":"0d2ddb54-e584-4b29-8913-a54016f8bc1e","html_url":"https://github.com/HaoboGu/rmk","commit_stats":{"total_commits":1112,"total_committers":19,"mean_commits":"58.526315789473685","dds":0.0881294964028777,"last_synced_commit":"bf778b2ac88245f4cccc187cd967eacf2b087ee3"},"previous_names":["haobogu/rmk"],"tags_count":51,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HaoboGu%2Frmk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HaoboGu%2Frmk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HaoboGu%2Frmk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HaoboGu%2Frmk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HaoboGu","download_url":"https://codeload.github.com/HaoboGu/rmk/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243766799,"owners_count":20344817,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cortex-m","embedded","esp32","firmware","keyboard","keyboard-firmware","nrf52","rp2040","rust","stm32","usb","usb-hid","wireless"],"created_at":"2024-07-31T00:00:31.066Z","updated_at":"2025-03-15T17:31:39.877Z","avatar_url":"https://github.com/HaoboGu.png","language":"Rust","readme":"\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/haobogu/rmk\"\u003e\n    \u003cimg src=\"https://github.com/HaoboGu/rmk/blob/2b73951291fd829075277d64e0aeb8ea82d0bea9/docs/src/images/rmk_logo2.png?raw=true\" alt=\"Logo\" width=\"150\"\u003e\n  \u003c/a\u003e\n\n  \u003cp align=\"center\"\u003e\n  A feature-rich Rust keyboard firmware. \n  \u003cbr /\u003e\n  \u003cbr /\u003e\n  \u003ca href=\"https://crates.io/crates/rmk\"\u003e\u003cimg src=\"https://img.shields.io/crates/v/rmk\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://docs.rs/rmk/latest/rmk/\"\u003e\u003cimg src=\"https://img.shields.io/docsrs/rmk\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/HaoboGu/rmk/actions\"\u003e\u003cimg src=\"https://github.com/haobogu/rmk/actions/workflows/build.yml/badge.svg\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://discord.gg/HHGA7pQxkG\"\u003e\u003cimg src=\"https://img.shields.io/discord/1166665039793639424?label=discord\"\u003e\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/p\u003e\n\n👉 Join our [Discord server](https://discord.gg/HHGA7pQxkG) if you have anything to discuss!\n\n----- \n[中文](https://github.com/HaoboGu/rmk/blob/main/README_zh.md)\n\n\n## Features\n\n- **Support a wide range of microcontrollers**: Powered by [embassy](https://github.com/embassy-rs/embassy), RMK supports a wide range of microcontrollers, such as stm32/nRF/rp2040/esp32\n- **Real-time keymap editing**: RMK has built-in [Vial](https://get.vial.today) support, the keymap can be changed on-the-fly. You can even use Vial to edit keymap over BLE directly\n- **Advanced keyboard features**: Many advanced keyboard features are available by default in RMK, such as layer switch, media control, system control, mouse control, etc\n- **Wireless**: BLE wireless support with auto-reconnection/multiple devices feature for nRF52 and esp32 microcontrollers, tested on nRF52840, esp32c3 and esp32s3\n- **Easy configuration**: RMK provides a simple way to build your keyboard: a `keyboard.toml` is all you need! For experienced Rust user, you can still customize your firmware easily using Rust code\n- **Low latency and low-power ready**: RMK has a typical 2 ms latency in wired mode and 10 ms latency in wireless mode. By enabling `async_matrix` feature, RMK has very low power consumption, with a 2000mah battery, RMK can provide several months battery life\n\n## [User Documentation](https://haobogu.github.io/rmk/user_guide/1_guide_overview.html) | [API Reference](https://docs.rs/rmk/latest/rmk/) | [FAQs](https://haobogu.github.io/rmk/faq.html) | [Changelog](https://github.com/HaoboGu/rmk/blob/main/rmk/CHANGELOG.md)\n\n## Real World Examples\n\n### [rmk-ble-keyboard](https://github.com/HaoboGu/rmk-ble-keyboard)\n\n\u003cimg src=\"https://github.com/HaoboGu/rmk/blob/main/docs/src/images/rmk_ble_keyboard.jpg?raw=true\" width=\"60%\"\u003e\n\n### [dactyl-lynx-rmk](https://github.com/whitelynx/dactyl-lynx-rmk)\n\n\u003cimg src=\"https://raw.githubusercontent.com/whitelynx/dactyl-lynx-keyboard/refs/heads/main/resources/skeleton-prototype.jpg\" width=\"60%\"\u003e\n\n## Usage\n\n### Option 1: Initialize from template\n\nYou can use [rmkit](https://github.com/HaoboGu/rmkit) to initialize your project from RMK [project template](https://github.com/HaoboGu/rmk-template/tree/feat/rework).\n\n```shell\ncargo install rmkit flip-link\n# If you have problems installing rmkit on Windows, try the following command to install rmkit:\n# powershell -ExecutionPolicy ByPass -c \"irm https://github.com/haobogu/rmkit/releases/download/v0.0.9/rmkit-installer.ps1 | iex\"\nrmkit init\n```\n\nCheck RMK's [User Guide](https://haobogu.github.io/rmk/user_guide/1_guide_overview.html) for details.\n\n### Option 2: Try built-in examples\n\nExample can be found at [`examples`](https://github.com/HaoboGu/rmk/blob/main/examples). The following is a simple step-to-step instruction for rp2040. For other microcontrollers, the steps should be identical with a debug probe.\n\n#### rp2040\n\n1. Install [probe-rs](https://github.com/probe-rs/probe-rs)\n\n   ```shell\n   curl --proto '=https' --tlsv1.2 -LsSf https://github.com/probe-rs/probe-rs/releases/latest/download/probe-rs-tools-installer.sh | sh\n   ```\n\n2. Build the firmware\n\n   ```shell\n   cd examples/use_rust/rp2040\n   cargo build --release\n   ```\n\n3. Flash using debug probe\n\n   If you have a debug probe connected to your rp2040 board, flashing is quite simple: run the following command to automatically compile and flash RMK firmware to the board:\n\n   ```shell\n   cd examples/use_rust/rp2040\n   cargo run --release\n   ```\n\n4. (Optional) Flash using USB\n\n   If you don't have a debug probe, you can use `elf2uf2-rs` to flash your rp2040 firmware via USB. There are several additional steps you have to do:\n\n   1. Install `elf2uf2-rs`: `cargo install elf2uf2-rs`\n   2. Update `examples/use_rust/rp2040/.cargo/config.toml`, use `elf2uf2` as the flashing tool\n      ```diff\n      - runner = \"probe-rs run --chip RP2040\"\n      + runner = \"elf2uf2-rs -d\"\n      ```\n   3. Connect your rp2040 board holding the BOOTSEL key, ensure that rp's USB drive appears\n   4. Flash\n      ```shell\n      cd examples/use_rust/rp2040\n      cargo run --release\n      ```\n      Then, you will see logs like if everything goes right:\n      ```shell\n      Finished release [optimized + debuginfo] target(s) in 0.21s\n      Running `elf2uf2-rs -d 'target\\thumbv6m-none-eabi\\release\\rmk-rp2040'`\n      Found pico uf2 disk G:\\\n      Transfering program to pico\n      173.00 KB / 173.00 KB [=======================] 100.00 % 193.64 KB/s  \n      ```\n\n## [Roadmap](https://haobogu.github.io/rmk/roadmap.html)\n\nCurrent roadmap of RMK can be found [here](https://haobogu.github.io/rmk/roadmap.html).\n\n## Minimum Supported Rust Version (MSRV)\n\nThis crate uses latest stable. Other versions should work, but they're not tested.\n\n## License\n\nRMK is licensed under either of\n\n- Apache License, Version 2.0 (LICENSE-APACHE or \u003chttp://www.apache.org/licenses/LICENSE-2.0\u003e)\n- MIT license (LICENSE-MIT or \u003chttp://opensource.org/licenses/MIT\u003e)\n\nat your option.\n","funding_links":["https://github.com/sponsors/haobogu"],"categories":["Firmware projects","Projects","Rust"],"sub_categories":["WIP"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHaoboGu%2Frmk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FHaoboGu%2Frmk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHaoboGu%2Frmk/lists"}