A Wii Balance Board → Steam Input bridge for Windows. Built as a Rust workspace so the protocol parsing and calibration math are reusable by other Balance Board projects, not locked inside this app.
Pre-alpha.
| Layer | State |
|---|---|
| Protocol parsing & calibration | Implemented, unit-tested with byte fixtures |
HID I/O (hidapi) |
Implemented; needs hardware to verify |
| vJoy output (runtime LoadLibraryW FFI) | Implemented; needs vJoy + hardware to verify |
| End-to-end bridge binary, with tare + smoothing + calibration cache | Implemented |
| Auto-pair tool (Win32 Bluetooth) | Scan implemented + verified; pair implemented, needs a SYNC-pressed board to fully verify |
| Steam Input setup guide for Superflight | docs/steam-input/superflight.md |
| System tray / config UI | Not started |
| Crate | License | Purpose |
|---|---|---|
balance-board-protocol |
MPL-2.0 | Pure parsing, calibration, center-of-gravity math, smoothing filter. No I/O, zero deps, runs on any machine without a board. |
balance-board-io |
MPL-2.0 | HID glue via hidapi. Reads bytes off the wire, hands them to the protocol crate. Cross-platform. |
balance-board-bridge |
GPL-3.0-or-later | The end-user binary. vJoy output, tare + smoothing, calibration cache. |
balance-board-pair |
GPL-3.0-or-later | Windows-only auto-pair tool. Computes the Wii's special PIN (BD_ADDR reversed) so you don't have to fight the Bluetooth wizard. |
The split licensing is deliberate: the reusable crates use file-level copyleft (MPL-2.0) so anyone can pull them into their own projects; the bridge binary is GPL-3.0 to keep derivative end-user tools open.
cargo test -p balance-board-protocol # no hardware needed
cargo build --release --workspace # everything
cargo run --release -p balance-board-pair -- --scan # list nearby Wii devices
cargo run --release -p balance-board-pair # auto-pair the board
cargo run --release -p balance-board-io --example print_sensors # smoke test (board, no vJoy)
cargo run --release -p balance-board-bridge # full bridge (board + vJoy)
cargo run --release -p balance-board-bridge -- --help # see all flags- Rust toolchain —
winget install Rustlang.Rustup, or grabrustup-init.exefrom https://rustup.rs. - Pair the Balance Board. Easiest path: press SYNC inside the battery cover, then run
cargo run --release -p balance-board-pair. That tool scans forNintendo RVL-WBC-01, computes the special Wii PIN (the board's MAC address as raw bytes), authenticates, and enables the HID service — none of which the standard Windows Bluetooth wizard does correctly. Run with--scanfirst if you want to verify the board is in range without committing to pairing, or--forgetto unpair if state gets weird. - Install vJoy for the bridge binary: https://github.com/jshafer817/vJoy/releases. Run Configure vJoy afterwards, ensure device #1 is enabled, and check at least axes X, Y, Z, Rx, Ry, Rz. (The smoke-test example does not need vJoy.)
- Steam Input mapping — launch a game with controller support, open Steam's controller settings, and bind vJoy's X/Y to the in-game stick of your choice. For Superflight: vJoy X → right-stick X, vJoy Y → right-stick Y, plus a small radial deadzone.
- Play Superflight (and other Steam games) using a Wii Balance Board, via
the path
Balance Board → Bluetooth HID → vJoy → Steam Input → game. Step-by-step guide: docs/steam-input/superflight.md. - Provide a clean, documented Rust crate that other Balance Board projects can depend on for parsing, calibration, and center-of-gravity math.
Inspired by, and rewritten from scratch over, lshachar/WiiBalanceWalker.
This repository ships under two licenses depending on the crate.
Each crate's Cargo.toml declares its license via SPDX identifier; the
canonical license texts are at LICENSE-MPL-2.0 and LICENSE-GPL-3.0.
balance-board-protocol,balance-board-io— MPL-2.0balance-board-bridge— GPL-3.0-or-later