Architecture
everything-imu is a Rust workspace: a set of focused crates behind a Tauri 2 desktop shell, plus small console-side companion apps for devices that can’t be driven directly.
Crate dependency graph
Section titled “Crate dependency graph” ┌──────────────┐ │ tauri-app │ └──────┬───────┘ │ ┌──────▼───────┐ │ core │ └──┬─────┬─────┘ │ │ ┌──────────────┼─────┴──────────┬───────────────┐ │ │ │ │ ┌────▼────┐ ┌──────▼──────┐ ┌──────▼──────┐ ┌─────▼──────┐ │device-* │ │slime-tracker│ │ imu-fusion │ │persistence │ └────┬────┘ └─────────────┘ └──────┬──────┘ └────────────┘ │ │ ┌────▼────────┐ ┌──────▼──────┐ │device-traits│ │ imu-math │ └─────────────┘ └─────────────┘Crate responsibilities
Section titled “Crate responsibilities”slime-tracker- SlimeVR UDP wire protocol (handshake, sensor info, rotation, accel, BUNDLE, feature flags) with BUNDLE auto-fallback gating and wire-compat tests against reference fixtures.imu-math- quaternion ops, coordinate transforms, and calibration application. Pure, deterministic,nalgebra-based.imu-fusion- VQF (rest-bias estimation), Madgwick, and BasicVQF. Tested against reference output within ε < 1e-6 rad.device-traits- theDevice/DeviceFactoryinterfaces shared by every driver.device-joycon- Joy-Con 1, Joy-Con 2, and Pro Controllers. JC1/Pro over HID with SPI calibration; JC2 over BLE with GATT services and commands.device-dualsense- DualSense, DualSense Edge, and DualShock 4 over USB and Bluetooth (HID over Bluetooth Classic, not BLE). Gyro/accel/battery, PS-button reset, RGB lightbar, and the DS5 hardware sensor timestamp.device-psmove- PS Move ZCM1 and ZCM2 over USB and Bluetooth.device-wii- TCP listener for the Wii Remote Wi-Fi forwarder.device-3ds/device-vita- UDP listeners for the 3DS and PS Vita homebrew forwarders.device-steam-deck/device-steam-controller- Valve HID IMUs over USB.device-tesla- synthesises IMU from a vehicle’s heading and speed via the Fleet API.device-hopx- HOPX / Triki BLE IMU over the Nordic UART Service, discovered by advertised name prefix.device-remote- UDP ingest for the eimu remote-hub protocol (phone/watch).osc-haptics- VRChat OSC → rumble bridge.persistence- SQLite settings and calibration store viarusqlite.core-AppState, device-discoverySupervisor, and the per-devicePipeline(IMU events → fusion → SlimeVR UDP).
Data flow
Section titled “Data flow”[BLE/HID device] → device-* crate → ChannelInfo stream │ ▼ imu-fusion (VQF) │ ▼ Quaternion + accel slime-tracker │ ▼ UDP packet SlimeVR-Server (port 6969)
Parallel: core::AppState → Tauri event "tracker_update" → throttled 30 Hz → React store (Zustand) → Dashboard UIIPC (UI ↔ core)
Section titled “IPC (UI ↔ core)”tauri-specta generates TypeScript types from Rust as a single source of truth.
High-frequency tracker pose (60-200 Hz) is emitted as a tracker_update event;
the UI subscribes and throttles its render loop to 30-60 Hz.
Frontend stack
Section titled “Frontend stack”React 19 + Vite + TypeScript, Tailwind, Radix primitives, a cmdk command
palette, live charts, and Zustand stores that mirror the Rust core state via Tauri
events.
Distribution
Section titled “Distribution”| Target | Bundle |
|---|---|
| Windows | NSIS .exe installer (Tauri bundler) |
| Linux | .deb, .AppImage (Tauri bundler) |