- TypeScript 67.2%
- Rust 17.5%
- JavaScript 9.9%
- CSS 2.9%
- PowerShell 2%
- Other 0.3%
|
|
||
|---|---|---|
| .cargo | ||
| .forgejo/workflows | ||
| .github/workflows | ||
| .vscode | ||
| assets | ||
| crates/zeropad-core | ||
| docs | ||
| e2e | ||
| public | ||
| scripts | ||
| src | ||
| src-tauri | ||
| .gitattributes | ||
| .gitignore | ||
| .prettierignore | ||
| AGENTS.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| components.json | ||
| CONTRIBUTING.md | ||
| index.html | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| playwright.config.ts | ||
| README.md | ||
| release.config.json | ||
| THIRD_PARTY.md | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| vite.config.ts | ||
| vitest.config.ts | ||
ZeroPad
Your controller. Your way.
Free, open-source controller tools for Windows, by Checkpoint Zero.
Source · Get started · Controller support · User guide · Contribute · Publish on Forgejo
Captured from the current interface on 2026-10-12 using labeled sample data. Browser previews cannot control hardware.
ZeroPad turns supported PlayStation controllers into a virtual Xbox 360 controller for Windows games that expect XInput. Monitor your inputs, tune your layout, adjust the lightbar, and control conventional vibration from one desktop workspace.
Current version: 0.2.2 alpha · Windows 10/11 x64 · MIT licensed. The app works on tested DualSense paths, but wider hardware coverage and fresh-PC installation still need validation. See the release assessment and verification record.
What you can do
- Play with Xbox compatibility. Explicitly enable one virtual Xbox 360 controller for games that do not understand your physical controller.
- See every input. Inspect sticks, triggers, buttons, battery estimates, charging status, and observed report rates. Compare physical and mapped input.
- Make the layout yours. Save profiles with radial deadzones, axis inversion, stick swapping, and simultaneous button remapping.
- Set your lightbar. Pick a preset or custom RGB color, adjust brightness, or turn the light off. Changes preview on the controller before you apply them.
- Control vibration. Forward XInput game rumble, change strength, mute it, or run a bounded 600 ms motor test.
- Explore the interface. Rotate the 3D controller and slide between its render and technical drawing. A flat drawing is available when WebGL is unavailable.
- Choose your appearance. Switch between light, dark, and system themes. Theme selection and the interface sound mute setting are remembered.
- Keep control of output. Xbox mode starts off and stops on input loss. Reconnecting never enables it automatically.
Controller support
“Implemented” describes the adapters in the source. It does not mean every model and connection has been physically tested.
| Controller | Input adapters | Lights / conventional rumble | Hardware evidence |
|---|---|---|---|
| DualSense | USB and Bluetooth | Implemented for both | Live input and Xbox output smoke checks; feedback HID writes accepted on USB and Bluetooth |
| DualSense Edge | Standard controls over USB and Bluetooth | Implemented | Dedicated Edge hardware testing pending; extra paddles / function controls not mapped |
| Official DualShock 4 v1 / v2 | USB and Bluetooth | Implemented for both | Synthetic protocol tests; real DS4 testing pending |
| Xbox, Nintendo, generic and third-party controllers | Not implemented | Not implemented | Some HID devices may appear as unsupported |
Battery percentages are coarse estimates from controller reports, not precise charge measurements. Basic reports may lack battery or charging telemetry. XInput-only controllers may not appear in HID discovery. Unknown Sony models and third-party clones do not receive guessed protocol packets.
Adaptive triggers, advanced DualSense haptics, gyro aiming, touchpad coordinates / mouse mapping, multiple virtual controllers, and automatic per-game profiles are future work. See controller features and the roadmap.
Get started
Install the Windows alpha
Use an installer attached to a release by the project maintainer. A public download URL has not been established yet; do not treat an old local ZIP as the current release.
The full offline testing package includes the app, Microsoft WebView2 runtime installer, the official ViGEmBus 1.22.0 installer, dependency notices, and a testing guide. You do not need Node.js, Rust, or a DSX purchase to run it.
- Extract the release ZIP and verify its checksums.
- Run the ZeroPad setup executable. WebView2 is installed if missing.
- If Xbox output needs a driver, setup offers to launch the bundled ViGEmBus wizard. This requires your explicit choice and an administrator prompt.
- Restart Windows if the driver wizard requests it.
Alpha limitation: ZeroPad's executable and installer are currently unsigned. The bundled driver has its own publisher signature. ViGEmBus is retired and remains the current output dependency; evaluating a maintained replacement is a release priority. HidHide is optional and is configured separately.
Play your first game
- Close other controller emulators, including DSX / DualSenseX and DS4Windows.
- Connect a supported controller by USB or pair it through Windows Bluetooth.
- Open ZeroPad and confirm that the input monitor responds.
- Click Turn on Xbox controller mode.
- Launch the game and keep ZeroPad running while you play.
Seeing input in ZeroPad alone does not enable game compatibility. Xbox mode must be on. If a game was already running, restart it after enabling output.
For duplicate input, missing drivers, lighting, charging, and vibration help, read the user guide. The testing guide includes a checklist for reporting useful results.
Updates and releases
Open About ZeroPad → Updates to check for a published update, read its notes, download with progress, and verify its signature. Installing requires a separate confirmation and stops controller output before setup. Saved profiles are kept. The first updater-enabled installer must be installed manually.
The browser preview disables native update actions.
See Releasing ZeroPad for signed builds, draft testing, and explicit release publication through Forgejo.
A closer look
Lighting and vibration controls. Applying settings and testing motors require the desktop app; this capture uses sample data.
Profiles combine button mappings and stick tuning. This screenshot uses sample input.
Diagnostics make the current engine and output state visible. This is a browser sample, not a hardware test.
Built to grow
Physical controller protocols, profile transformations, and virtual output are separate Rust components. Adding a controller adapter does not require rewriting the UI or Xbox output backend.
Physical controller → HID input adapter → Normalized input → Profile → Virtual Xbox → Game
↓
Physical controller ← Feedback encoder ← Rumble / light settings ← Game vibration
The native worker processes controller input and output directly. React reads snapshots for the interface; UI rendering is outside the controller-to-game path.
| Layer | Technology |
|---|---|
| Desktop shell and native engine | Tauri 2, Rust, HIDAPI |
| Interface | React, TypeScript, Tailwind CSS 4 |
| Controls | shadcn/ui with Base UI |
| Controller visualization | Three.js, original SVG / procedural geometry |
| Current virtual output | ViGEmBus via vigem-client |
| Contracts and testing | ts-rs, Vitest, Playwright, Rust tests |
See architecture for boundaries, storage, feedback, and the output lifecycle.
Build from source
On Windows, install Node.js 24, Rust with the MSVC toolchain, Microsoft C++ Build Tools with Desktop development with C++, and WebView2. Follow the official Tauri prerequisites.
npm ci
npm run tauri dev
Run npm run dev for the interface in a browser. Sample input is opt-in,
hardware commands are disabled, and preview profiles are isolated from desktop data.
Verify
npm run format:check
cargo fmt --all -- --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace
git diff --exit-code -- src/lib/generated
npm run build
npm test
npm run test:e2e
npm run test:release
npm audit --omit=dev
Browser workflows require Microsoft Edge. Rust tests regenerate committed TypeScript contracts. Hardware tests are separate; see verification.
Package
npm run package:windows
This downloads and verifies pinned driver payloads, collects dependency licenses,
and builds the full offline Windows x64 NSIS installer. The shareable ZIP,
installer, testing guide, build metadata, and SHA-256 checksums appear in
releases/. Build from a reviewed, clean commit before tagging a release.
The smaller npm run tauri build uses the default runtime setup and is intended
for local builds. Use package:windows for the self-contained testing package.
Downloaded payloads, build outputs, and release archives are ignored by Git.
To refresh the README images after a frontend build:
npm run docs:screenshots
See Forgejo publishing for repository setup, Windows CI and the completed hostname migration.
Contribute and report issues
Protocol implementations, hardware reports, accessibility improvements, and documentation are welcome. Read CONTRIBUTING.md before changing controller or output behavior.
Report the app version, Windows version, controller model, connection type, game / launcher, reproduction steps, and expected versus actual behavior. Review diagnostics before sharing: upstream errors can contain device paths. Do not post controller serial numbers or access tokens.
License and acknowledgements
ZeroPad's original code and artwork are MIT licensed. Dependencies and bundled components retain their own licenses; see THIRD_PARTY.md. PlayStation, DualSense, DualShock, Xbox, and related names belong to their respective owners. ZeroPad is an independent project.





