A web-based calibration tool for PlayStation DualShock 4, DualSense, and DualSense Edge controllers using the WebHID API.
The live version of this project is available at https://dualshock-tools.github.io.
No installation is required: simply open the website in a WebHID-compatible browser.
- Controller connection via WebHID API
- Stick calibration and range calibration
- Input testing and visualization
- Battery status display
- Multi-language support (20+ languages)
- Progressive Web App capabilities
A pre-built Docker image is available for running DualShock Tools without installing any dependencies.
See the Docker guide for installation and usage instructions.
Interested in contributing? Please read CONTRIBUTING.md for guidelines on submitting changes and pull requests.
- Node.js v20 or higher (v26 recommended — see
.nvmrc). Older versions (14, 16, 18) will fail the build; the toolchain requires Node 20+. - npm or yarn
- Modern browser with WebHID support (Chrome/Edge)
If you use nvm, run nvm install && nvm use in the project root to pick up the version from .nvmrc.
-
Install dependencies:
npm install
-
Build the application:
npm run build
-
Start the development server:
npm run start
The app will be available at
http://localhost:8080. WebHID works here becauselocalhostis treated as a secure context.
Alternatively, build and run without installing Node:
docker compose up --buildThe app is then available at http://localhost:8080.
npm run build- Build the application for developmentnpm run build:prod- Build the application for productionnpm run clean- Clean the dist directorynpm run serve- Serve the built app over HTTP athttp://localhost:8080(WebHID works on localhost)npm run start- Build and serve the appnpm run dev:full- Build, watch for changes, and serve with auto-reloadnpm run watch- Watch for file changes and rebuild
For active development with auto-rebuild:
npm run dev:fullThis will:
- Build the application
- Start watching for file changes
- Serve the app at
http://localhost:8080 - Automatically rebuild when files change
- WebHID & secure contexts: WebHID requires a secure context.
localhostcounts as secure, so the HTTP dev server (http://localhost:8080) works for local development. Reaching the app from another device would need HTTPS — use the production site for that. - Controller Support: Only works in browsers with WebHID support (Chrome, Edge, Opera).
js/- Source JavaScript filescss/- Source CSS filestemplates/- HTML template fileslang/- Translation filesassets/- SVG assetsdist/- Built application (generated)
The project uses Gulp for building:
- JavaScript bundling with Rollup
- CSS concatenation and minification
- HTML processing and minification
- Asset optimization
- Development vs production builds