Gamepad and Stick Drift Test
The test shows buttons, axes and trigger values exposed by the Gamepad API and attempts vibration when the browser and controller provide a compatible actuator.
Open tool fullscreen →Interface and local controls remain in Portuguese.
How to use
- Connect the controller by cable or Bluetooth and press any button: for privacy reasons the browser only reveals the device after an interaction.
- Press each button and trigger while watching the panel; analog triggers show intermediate values along their travel.
- Fully release the sticks and read the idle drift field, which should stay close to zero.
When to use
- Observe idle axis deviation before comparing in games or on another device.
- Check which buttons and triggers the API exposes for a second-hand controller.
- Compare reported centre and travel through different movements.
- Attempt vibration without launching a game where the API supports it.
Limitations
The Gamepad API standardises mapping into a generic layout. Exotic controllers may report buttons out of order, and rumble only works where the browser implements the dual-rumble actuator.
Frequently Asked Questions
- Which drift value is already a problem?
- There is no universal browser threshold. The 0.05 and 0.08 markers are triage references; games apply different dead zones. Compare the idle reading with real use.
- My controller does not show up. What now?
- Press a button on the controller with this page focused. Browsers only expose the device after user interaction, precisely to avoid silent hardware fingerprinting.
Technical Methodology & Display Science
The reading calls navigator.getGamepads() every frame through requestAnimationFrame, following the polling model defined by the W3C Gamepad specification. Each object returns the buttons array, with boolean state and analog value from 0 to 1, plus the axes array normalised between -1 and 1.
Deviation is computed as the largest absolute value across reported axes. Mapping, calibration, sensor and control position vary; the number identifies neither technology nor cause.
Rumble attempts `vibrationActuator.playEffect` with `dual-rumble`. Support, mapping and effective output depend on browser, operating system and controller.