Turn your PS5 DualSense into a PC haptic peripheral. Static adaptive trigger resistance, native DualSense passthrough, and virtual Xbox 360 output — all without a PlayStation.
- Static trigger resistance — L2 and R2 hold firm while pressed
- Native DualSense output — games that support the controller read it directly
- Virtual Xbox 360 mode — XInput-only games see a controller via ViGEmBus
- HidHide integration — cloak the real pad so games see only the virtual one
- Frameless UI — clean, minimal window with custom titlebar
- USB + Bluetooth — auto-detects transport, CRC-32 valid on wireless
- Zero config — plug in, launch, it works
Grab the latest .exe from Releases.
This is the free version — static adaptive triggers, no telemetry. Want more?
| Free (this repo) | Full Immersion ($4 on Gumroad) |
|---|---|
| Static trigger resistance | Racing telemetry (Forza, F1, AC) |
| USB + Bluetooth | Gun recoil (9 weapon profiles) |
| Xbox virtual pad | Melee swing feedback |
| HidHide cloaking | Audio reactive rumble |
| Frameless UI | Minecraft per-item feels |
| MIT open source | The Lab — live preview + tuning |
Upgrade to Full Immersion — $4 on Gumroad
| Component | Needed for |
|---|---|
| ViGEmBus | Xbox virtual pad output |
| HidHide | Cloaking the physical DualSense from games |
- Install ViGEmBus if you want Xbox output
- Install HidHide if you want device cloaking (run as admin)
- Launch
dualsense-haptics.exe - Plug in your DualSense via USB or pair via Bluetooth
- Toggle DualSense or Xbox output mode
git clone https://github.com/AlteredAJ/dualsense-haptics.git
cd dualsense-haptics/src-tauri
cargo build --release| Layer | Tech |
|---|---|
| Backend | Rust + Tauri 2 |
| Frontend | Vanilla JS + HTML + CSS |
| HID I/O | hidapi |
| Virtual Pad | ViGEmBus (vigem-client) |
| Bluetooth CRC | crc32fast |
dualsense-haptics/
├── src/ # Frontend (vanilla JS + HTML + CSS)
├── src-tauri/ # Rust backend
│ └── src/
│ ├── main.rs # Entry point + Tauri setup
│ ├── lib.rs # Tauri commands
│ ├── hid.rs # DualSense HID parsing + input loop
│ ├── xinput.rs # Virtual Xbox 360 pad (ViGEmBus)
│ ├── hidhide.rs # HidHide device cloaking client
│ └── settings.rs # Persisted user settings
├── docs/ # Platform-specific guides
└── icons/ # App icons
| Status | Item |
|---|---|
| ✅ | Static trigger resistance |
| ✅ | Virtual Xbox 360 output (ViGEmBus) |
| ✅ | HidHide device cloaking |
| ✅ | USB + Bluetooth auto-detect |
| 📋 | Tauri 2 migration (from Node.js to Rust backend) |
| 📋 | macOS Bluetooth reconnect stability |
| 📋 | Per-game preset system (load config by detected process) |
Issues and PRs welcome. For feature requests, check the roadmap above first. The full immersion version is closed-source but the free version here is MIT — build on it freely.
MIT — see LICENSE.
Built for sim racers and controller nerds.