Skip to content

nazo6/rktk

Repository files navigation

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

As library

Unless you enable a specific feature, rktk's MSRV is the latest stable version of Rust.

In addition, a nightly compiler is required to minimize the binary size.

For development

As a library, rktk does not depend on unstable feature, but the rktk repository workspace depends on cargo's unstable feature. Therefore, nightly is required to develop rktk.

Credits & Acknowledgements

  • rumcake: RP2040 double-tap-reset driver
  • rust-dilemma: RP2040 Half-duplex communication
  • qmk: RP2040 Half-duplex communication
  • rmk: BLE implemention

About

Keyboard firmware framework built with Rust and embassy

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published