Desktop & web configuration tool for the KaSe split keyboard. Built in Rust with egui — dual target native (Linux/Windows) and WASM (browser via WebSerial).
8 MB binary, zero runtime, auto-connect.
Web version (Chrome/Edge) — no install, connect via WebSerial.
| Platform | Download |
|---|---|
| Linux x86_64 | kase-controller-linux.tar.gz |
| macOS ARM64 (M1+) | kase-controller-macos-arm64.tar.gz |
| Windows x86_64 | kase-controller-windows.zip |
| Web (WASM) | Live or kase-controller-web.zip |
- 2D split keyboard rendering with rotation and stagger
- Dynamic layout — keyboard sends its physical layout JSON at connection
- Click-to-remap any key via USB CDC
- Mod-Tap / Layer-Tap builder with live preview
- Hex input for advanced keycodes
- 13 keyboard layouts — QWERTY, AZERTY, QWERTZ, Dvorak, Colemak, BEPO, ES, PT, IT, Nordic, BR, TR, UK
- Layer list with rename, export/import per layer
- Auto-connect via USB VID/PID (0xCAFE:0x4001)
- Auto-reconnect on unplug/replug
- Heatmap — per-key press frequency with color gradient
- Bigram drill-down — click a key to see most frequent next keys
- CSV export — keystats + heatmap grid + bigrams
- WPM — auto-refreshed every 10s in status bar
- Tap Dance — visual editor, 8 slots, click actions to assign
- Combos — visual editor with keyboard popup for key picking, save + delete
- Leader Key — sequence editor (1-4 keys), modifier checkboxes, save + delete
- Key Override — trigger key + mods → result key + mods, save + delete
- Bluetooth — 3 slots, pair/disconnect/switch
- Auto Shift — toggle on/off
- Tri-Layer — L1 + L2 held = L3
- Visual editor with quick-add buttons (Ctrl+C/V/X/Z/S/A, Enter, delays)
- Live preview of steps (Ctrl+C -> 100ms -> Ctrl+V)
- Save + delete via binary protocol
- Progress bars: hunger, happiness, energy, health
- Feed, Play, Sleep, Medicine actions
- Keyboard layout persisted between sessions
- Full config backup/restore (all layers + names + TD + combos + leader + KO + macros)
- OTA firmware update via USB CDC (native + web)
- OTA web — download firmware direct from GitHub releases + flash
- ESP32 flasher — flash via programming port (CH340/CP2102), no esptool needed
- DFU mode reboot
- Binary protocol v2 (KS/KR frames, CRC-8/MAXIM) with auto-detection
- Legacy ASCII fallback for older firmware
- PING-based detection at connection
Requires Rust toolchain.
# Native (Linux — needs libudev-dev)
cargo run --release
# Tests (107 tests)
cargo test
# Web (requires trunk + wasm32-unknown-unknown)
trunk serve # dev server on localhost:8080
# Windows cross-compile (NixOS)
nix-shell shell-win.nix
cargo build --release --target x86_64-pc-windows-gnusrc/
main.rs entry point (native + WASM)
serial/ USB CDC — native (serialport) + web (WebSerial)
binary_protocol.rs KS/KR frames, CRC-8, command IDs
protocol.rs legacy text commands
flasher.rs ESP32 ROM bootloader flasher (SLIP, native only)
keycode.rs decode 0x0000-0x6FFF to readable names
layout.rs JSON physical layout parser
layout_remap.rs 13 keyboard language remaps
parsers.rs TD, KO, combo, leader, heatmap, macro parsers
settings.rs persistent settings (JSON)
ui/
mod.rs KaSeApp struct + types
connection.rs serial connect/disconnect
background.rs background queries via mpsc
helpers.rs notifications, heatmap, key selection
update.rs eframe::App impl, polling, auto-reconnect
render.rs 2D keyboard canvas + combo key picker popup
key_selector.rs keycode picker modal
tab_keymap.rs keymap editor tab
tab_advanced.rs TD, combos, leaders, KO, BT, tamagotchi
tab_macros.rs macro editor tab
tab_stats.rs heatmap + bigrams tab
tab_settings.rs layout, backup, OTA, flasher
tests/ 107 integration tests
See the LICENSE file.


