rmk-zsa-voyager

July 16, 2026 ยท View on GitHub

RMK firmware for the ZSA Voyager split keyboard.

The Voyager ships with a GD32F303CB microcontroller (STM32F303CB-compatible). This firmware targets that MCU directly using RMK and the Embassy async embedded Rust ecosystem, replacing ZSA's stock QMK-based firmware.

Features

  • Live keymap editing via Vial - remap keys without reflashing
  • Animated per-key RGB - six switchable effects powered by rmk-palettefx: Gradient, Flow, Vortex, Sparkle, Ripple, and Reactive (key-press ripples)
  • 16 built-in colour palettes - cycle with the RGB hue keys
  • Layer status LEDs - 4-bit binary display of the active layer
  • Chordal hold - unilateral-tap behaviour (mod-taps resolve instantly when both keys are on the same hand), matching the QMK PermissiveHold feel

Keymap

Three compiled-in layers using the default Voyager layout; all are live-editable via Vial.

Building

Either use the Nix development shell environment provided in flake.nix:

nix develop

Or install the Rust toolchain and the Cortex-M4F target:

rustup target add thumbv7em-none-eabihf

Build a release binary:

cargo build --release
cargo objcopy --release -- -O binary rmk-zsa-voyager.bin

Flashing

Put the Voyager into DFU mode (press the reset button on the top-side of the board, or press the Bootloader key from Layer 2).

Flash with dfu-util:

dfu-util -d 3297:0791 -a 0 -s 0x08002000:leave -D rmk-zsa-voyager.bin

Or use ZSA Keymapp to flash the .bin file via its graphical interface.

Flashing is safe: the DFU bootloader lives in protected flash and cannot be overwritten by a firmware image.

Dependencies

CrateRole
rmkKeyboard framework (key scanning, HID, Vial, storage)
embassy-stm32Async HAL for STM32F303
rmk-palettefxPalette-driven RGB animation effects

License

Licensed under either of Apache License 2.0 or MIT at your option.


This project is not affiliated with or endorsed by ZSA Technology Labs, Inc.