Skip to content

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.

┌──────────────┐
│ tauri-app │
└──────┬───────┘
┌──────▼───────┐
│ core │
└──┬─────┬─────┘
│ │
┌──────────────┼─────┴──────────┬───────────────┐
│ │ │ │
┌────▼────┐ ┌──────▼──────┐ ┌──────▼──────┐ ┌─────▼──────┐
│device-* │ │slime-tracker│ │ imu-fusion │ │persistence │
└────┬────┘ └─────────────┘ └──────┬──────┘ └────────────┘
│ │
┌────▼────────┐ ┌──────▼──────┐
│device-traits│ │ imu-math │
└─────────────┘ └─────────────┘
  • 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 - the Device / DeviceFactory interfaces 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 via rusqlite.
  • core - AppState, device-discovery Supervisor, and the per-device Pipeline (IMU events → fusion → SlimeVR UDP).
[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 UI

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.

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.

Target Bundle
Windows NSIS .exe installer (Tauri bundler)
Linux .deb, .AppImage (Tauri bundler)