rktk

Crates.iorktk
lib.rsrktk
version0.2.0
created_at2024-06-30 14:25:36.697425+00
updated_at2025-05-23 13:09:32.804419+00
descriptionrktk - Rust Keyboard firmware Toolkit
homepage
repositoryhttps://github.com/nazo6/rktk
max_upload_size
id1288018
size177,211
nazo6 (nazo6)

documentation

README

rktk

Rust Keyboard Toolkit

Crates.io Version GitHub Actions Workflow Status Doc build status Ask DeepWiki

rktk is a keyboard firmware framework written in Rust.

Currently, rktk supports nRF52840 and RP2040, and although there are bugs and performance issues (especially related to split keyboards), it can be used as a decent keyboard.

This firmware consists of two parts: the core functionality implemented in the rktk crate and the driver that actually interacts with the hardware. This makes it easy to extend.

Docs

  • Main site: Very incomplete documentation site
  • API Docs: RKTK Rust API docs
  • Deepwiki: It contains some incorrect content, but considering it is AI-generated, it is excellent.

Examples

You can find examples in the examples directory.

Also, you can find some advanced examples in the following repositories:

Features

  • ✅ : Working
  • 🟡 : Basic implementation only or known bugs.
  • 🔴 : Planned.
  • (blank): N/A.

Core features

Feature Status Note
Keyscan
Key mapping 🟡 See below table for detail
Mouse
Encoder 🟡
Hook system 🟡
USB
Bluetooth 🟡
Split keyboard
Display 🟡
Storage 🟡
RGB led 🟡
Remapper (rktk-client) 🟡

Key mapping features

Key mapping features is implemented in rktk-keymanager and this crate does not depend on rktk or embassy.

Feature name Status Note
Key action
Tap-Hold Called as Mod-Tap or Layer-Tap in QMK
Tap Dance
Oneshot key
Combo key 🟡
Key code
Normal key
Modifier key
Media key
Mouse key
Mouse scroll momentary
Layer momentary (MO)
Layer toggle (TG)

Drivers

Driver that is available in the rktk-drivers-common crate is available for all platforms which have embassy compatible HAL.

Driver Common RP2040 NRF52840
Key scanner
Matrix 🟡 - -
Matrix with shift register - -
(Japanese) Duplex-Matrix 🟡 - -
 
Mouse
PMW3360 - -
PAW3395 - -
 
Encoder 🟡 - -
 
Debouncer
Eager debouncer 🟡 - -
 
Host communication
USB - -
Bluetooth 🟡 (Trouble) 🟡 (SoftDevice)
 
Split communication
Half-duplex (single wire, TRS) 🟡 (PIO) 🟡 (UART)
Full-duplex (dual wire, TRRS) ✅ (UART)
Bluetooth 🔴
 
Display
SSD1306 - -
 
Storage
sequential-storage (NorFlash) 🟡 - -
 
RGB led
WS2812 ✅ (PIO) ✅ (PWM)

Development

Dependencies

In addition to the dependencies specified here, to develop rktk, you need to install the following dependencies:

MSRV

rktk actually doesn't depends on nightly feature of rustc, but uses nightly cargo features like per-package-target. So, it requires nightly toolchain.

Credits & Acknowledgements

  • rumcake: RP2040 double-tap-reset driver
  • uf2: uf2conv.py, uf2families.json
  • rust-dilemma: RP2040 Half-duplex communication
  • qmk: RP2040 Half-duplex communication
  • rmk: bluetooth implemention
Commit count: 433

cargo fmt