{"id":50148639,"url":"https://github.com/matiaspalmac/everything-imu","last_synced_at":"2026-05-24T07:02:29.890Z","repository":{"id":358347416,"uuid":"1234133904","full_name":"matiaspalmac/everything-imu","owner":"matiaspalmac","description":"Cross-platform SlimeVR IMU bridge. Connects Nintendo and Sony controllers to SlimeVR, turning them into full-body tracking devices.","archived":false,"fork":false,"pushed_at":"2026-05-24T05:38:04.000Z","size":572,"stargazers_count":2,"open_issues_count":8,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-24T06:36:55.811Z","etag":null,"topics":["dualsense","fbt","full-body-tracking","imu","joycon","psmove","rust","slimevr","tauri","vr"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/matiaspalmac.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE-MIT","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-09T19:45:19.000Z","updated_at":"2026-05-24T05:38:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/matiaspalmac/everything-imu","commit_stats":null,"previous_names":["matiaspalmac/everything-imu"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/matiaspalmac/everything-imu","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matiaspalmac%2Feverything-imu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matiaspalmac%2Feverything-imu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matiaspalmac%2Feverything-imu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matiaspalmac%2Feverything-imu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/matiaspalmac","download_url":"https://codeload.github.com/matiaspalmac/everything-imu/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matiaspalmac%2Feverything-imu/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33424573,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T22:14:44.296Z","status":"online","status_checked_at":"2026-05-24T02:00:06.296Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dualsense","fbt","full-body-tracking","imu","joycon","psmove","rust","slimevr","tauri","vr"],"created_at":"2026-05-24T07:02:27.544Z","updated_at":"2026-05-24T07:02:29.884Z","avatar_url":"https://github.com/matiaspalmac.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ch1\u003eeverything-imu\u003c/h1\u003e\n  \u003cp\u003e\u003cstrong\u003eCross-platform SlimeVR IMU bridge for game controllers\u003c/strong\u003e\u003c/p\u003e\n\n  \u003cp\u003e\n    \u003ca href=\"https://github.com/matiaspalmac/everything-imu/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/matiaspalmac/everything-imu/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"\u003e\u003c/a\u003e\n    \u003ca href=\"LICENSE-MIT\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"License\"\u003e\u003c/a\u003e\n    \u003cimg src=\"https://img.shields.io/badge/status-beta-yellow.svg\" alt=\"Status: beta\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/platform-Windows%20%7C%20Linux-lightgrey.svg\" alt=\"Platform\"\u003e\n    \u003ca href=\"https://github.com/matiaspalmac/everything-imu/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/matiaspalmac/everything-imu?include_prereleases\u0026label=release\" alt=\"Latest release\"\u003e\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n`everything-imu` is a native bridge that turns Nintendo and Sony game controllers\ninto full-body trackers for **SlimeVR-Server**. Plug a controller into your PC,\nstrap it on, and it shows up in SlimeVR as a regular tracker — no extra hardware,\nno firmware flashing.\n\nThe bridge reads the controller's built-in IMU at its native sample rate, runs a\nsensor fusion filter (VQF or Madgwick) in Rust, and forwards the resulting\nquaternion to SlimeVR-Server over UDP using the official protocol.\n\n\u003e **Heads-up:** beta. Core fusion + protocol pipeline are stable and validated\n\u003e on hardware; the UI, settings persistence, and bundle packaging are still\n\u003e iterating. Expect rough edges and please file issues with reproduction\n\u003e steps + the logs from the **Logs** tab.\n\n## Features\n\n- **9 controller families** supported across USB · BT Classic · BLE · TCP.\n- **VQF / Madgwick / BasicVQF** fusion, switchable per-device.\n- **Magnetometer calibration wizard** for Joy-Con 2 and PS Move ZCM1 (sphere\n  fit + coverage meter).\n- **Reset Yaw / Reset Full / Reset Mounting** from the UI, system tray, global\n  hotkey, or on-device gesture.\n- **VRChat OSC → rumble bridge** with per-rule gain, threshold, pulse mode,\n  and a per-device haptic calibration wizard (floor / gain mapping).\n- **UDP-forwarded haptic targets** — register `host:port` endpoints as virtual\n  rumble devices for remote setups.\n- **Linux udev installer** — one-click hidraw access for Joy-Con / DualSense /\n  PSMove without sudo.\n- **Auto-update at startup** (GitHub Releases), with optional crash reporting\n  via Sentry. Both opt-in, both off by default.\n- **Live diagnostics** — per-tracker rate panels, bridge latency, raw IMU\n  charts on the Debug page, circular battery rings, signal meter.\n\n## Why this exists\n\nSlimeVR-Server already supports full-body tracking with dedicated SlimeVR\nhardware. This project plugs the *bring-your-own-IMU* gap: most homes have\ncontrollers with high-quality IMUs sitting in a drawer, and they make great\nsecondary trackers (waist, knees, feet) when you're trying SlimeVR for the\nfirst time and don't want to commit to buying nodes yet.\n\nWe **deliberately do not reimplement SlimeVR-Server features** (skeletal model,\nSteamVR driver, calibration UI, etc.). everything-imu is the *bridge layer*\nonly.\n\n## Supported devices\n\n| Device | Transport | Native rate | Mag | Status |\n|--------|-----------|------------:|:---:|--------|\n| Joy-Con (L/R) | USB · BT Classic | 200 Hz | ✗ | hardware-validated |\n| Switch Pro Controller | USB · BT Classic | 200 Hz | ✗ | hardware-validated |\n| Joy-Con 2 / Pro 2 / NSO GC2 | BLE only | 62 Hz | ✓ | hardware-validated |\n| DualSense (PS5) | USB · BT | 250 Hz | ✗ | hardware-validated |\n| DualSense Edge | USB · BT | 250 Hz | ✗ | needs hardware |\n| DualShock 4 (PS4) | USB | 250 Hz | ✗ | hardware-validated |\n| PS Move ZCM1 | USB · BT | 175 Hz | ✓ | hardware-validated |\n| PS Move ZCM2 | USB · BT | 175 Hz | ✗ | hardware-validated |\n| Wii Remote | TCP forwarder (`127.0.0.1:9909`) | 100 Hz | ✗ | hardware-validated |\n\nDeep-dive on each: [DEVICES.md](DEVICES.md).\n\n## Install\n\nGrab the latest installer from the\n[**Releases**](https://github.com/matiaspalmac/everything-imu/releases/latest)\npage:\n\n- **Windows**: `everything-imu_\u003cversion\u003e_x64-setup.exe`\n- **Linux (Debian/Ubuntu)**: `everything-imu_\u003cversion\u003e_amd64.deb`\n- **Linux (any)**: `everything-imu_\u003cversion\u003e_amd64.AppImage`\n\nOr build from source — see [Building from source](#building-from-source) below.\n\n## Quickstart\n\n1. **Install SlimeVR-Server** and leave it running. The default UDP port is `6969`.\n2. **Run everything-imu**. The status bar at the bottom will read `Live` once a\n   handshake with the server completes.\n3. **Plug or pair a supported controller**. It appears in the *Devices* tab; a\n   tracker for it shows up automatically in SlimeVR-Server.\n4. **Mount the controller** to your body (waist, knee, ankle, etc.) and assign it\n   in SlimeVR-Server's *Body Proportions* flow.\n5. **Reset orientation**: `R` (yaw) / `Shift+R` (full) from the global hotkeys,\n   or click *Reset Yaw* / *Reset Full* / *Reset Mounting* on the device card.\n   On controllers without a magnetometer (Joy-Con 1, DualSense, DualShock 4,\n   Wii Remote) yaw drifts on body rotation — re-yaw facing forward, or use\n   Reset Mounting right after strapping the tracker. Some devices accept\n   on-device gestures — see [DEVICES.md](DEVICES.md).\n\n### Global hotkeys\n\n| Shortcut | Action |\n|----------|--------|\n| `Ctrl+K` | Command palette |\n| `Ctrl+F` | Global search |\n| `Ctrl+Enter` | Cinema mode (immersive overlay) |\n| `Ctrl+Shift+B` | Kill-switch the bridge (pause emission) |\n| `R` / `Shift+R` | Broadcast yaw / full reset |\n\nMounting reset is per-device — click *Reset Mounting* on the device card or\nthe tracker detail page.\n\n## Building from source\n\n### Prerequisites\n\n- **Rust** stable (1.79+ recommended)\n- **Node.js** 22+ and **pnpm** 10\n- **Windows**: WebView2 (preinstalled on Windows 11)\n- **Linux**: `libwebkit2gtk-4.1-dev`, `libgtk-3-dev`, `libsoup-3.0-dev`,\n  `librsvg2-dev`, `libayatana-appindicator3-dev`, `libxdo-dev`, `libssl-dev`,\n  `libudev-dev`, `patchelf`\n\n### Commands\n\n```bash\ngit clone https://github.com/matiaspalmac/everything-imu.git\ncd everything-imu\n\npnpm install                  # JS deps\npnpm tauri dev                # dev: live-reload UI + Rust backend\npnpm tauri build              # release bundle (MSI on Windows, AppImage on Linux)\n\n# Backend-only iteration:\ncargo test --workspace        # unit + integration tests\ncargo run -p headless-cli     # headless bridge for debugging\n```\n\nThe `everything-imu-app` binary is the full Tauri shell; `headless-cli` is a\nno-UI driver useful for tracing protocol-level issues.\n\n## Documentation\n\n| File | Purpose |\n|------|---------|\n| [ARCHITECTURE.md](ARCHITECTURE.md) | Crate graph + responsibilities |\n| [DEVICES.md](DEVICES.md) | Per-device IMU, transport, calibration |\n| [PROTOCOL.md](PROTOCOL.md) | SlimeVR UDP wire format notes |\n| [CONTRIBUTING.md](CONTRIBUTING.md) | Dev workflow, style, PR rules |\n| [SECURITY.md](SECURITY.md) | Reporting vulnerabilities |\n| [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) | Community ground rules |\n\n## Stack\n\n- **Core**: Rust, `tokio`, `hidapi`, `btleplug`, `nalgebra`\n- **Math \u0026 fusion**: VQF (Laidig 2023), Madgwick, BasicVQF\n- **Haptics**: `rosc` OSC listener, per-device rumble drivers\n- **Persistence**: SQLite via `rusqlite`\n- **Desktop shell**: Tauri 2 + tauri-specta (typed IPC)\n- **Frontend**: React 19, TypeScript, Vite, TailwindCSS 4, Zustand 5,\n  react-three-fiber\n\n## License\n\n[MIT](LICENSE-MIT). Contributions are accepted under the same license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatiaspalmac%2Feverything-imu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmatiaspalmac%2Feverything-imu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatiaspalmac%2Feverything-imu/lists"}