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
| Crate | Role |
|---|---|
| rmk | Keyboard framework (key scanning, HID, Vial, storage) |
| embassy-stm32 | Async HAL for STM32F303 |
| rmk-palettefx | Palette-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.