How the bench works
The bench reads controllers two ways. The Gamepad API works in every modern browser and gives sticks, buttons, triggers and basic rumble. WebHID, our experimental deep mode, runs only in desktop Chrome and Edge and tries to read the controller's own reports: raw values, sensors, battery, lights. Every number on the bench comes from one of those two paths.
Gamepad API
Every browser exposes connected controllers once you press a button. The page samples them every frame and, during a measurement, as often as the browser updates — in Chrome that’s about every 4 ms, so 250 Hz is the highest report rate this path can show. Values arrive already processed by the OS: XInput on Windows reports 16-bit sticks, a DualSense through the same API only 8-bit; Safari adds its own dead zone.
Deep mode (WebHID, experimental)
In desktop Chrome and Edge you can give the page direct access to one controller. It then tries to read the controller’s own reports: raw stick values, gyro and accelerometer, touchpad, battery, stored calibration, and it can drive lights, adaptive triggers and HD rumble. Every report is counted, so the report rate comes from the controller rather than the browser.
Deep mode is experimental. Its report formats come from public driver documentation and haven’t been verified on every model and firmware, so its numbers are a second opinion: the Gamepad API test above stays the reference. If something behaves oddly, unplug and reconnect the controller.
The page changes motors, trigger effects and lights only when you use their controls. Trigger effects switch off after 30 seconds, and everything goes back to defaults when you press Stop, switch tabs, leave the page or close deep mode. Closing deep mode or leaving the page also switches a Switch controller’s motion sensors off, returns it to its normal report mode and, over USB, lets it fall back to Bluetooth. Controllers you allowed before, or plug in later, are never opened on their own: you click to reconnect them.
Not every controller is visible: a wired Xbox pad on Windows uses a driver that isn’t HID at all, and tools like Steam or DS4Windows can hold a pad exclusively.
Browser support
| Browser | Gamepad API | Vibration | Deep mode |
|---|---|---|---|
| Chrome, Edge (desktop) | yes | yes | experimental |
| Chrome (Android) | yes | depends on device | no |
| Firefox | yes | no | no |
| Safari (macOS, iOS) | MFi, Xbox, DualShock 4, DualSense, Switch Pro only | partly | no |
Verdicts
A verdict appears only once a panel has collected enough samples to back it. Until then the panel says what it’s still waiting for, such as more of the stick’s edge covered or a stick kept moving for report timings.
FAQ
Why do I have to press a button first?
Browsers hide controllers until you press a button, so sites can't fingerprint you by your devices.
Why doesn't deep mode work in Firefox or Safari?
They don't support WebHID. The Gamepad API checks still work there.
Why can't deep mode open my controller?
Another program has it open — Steam, DS4Windows, HidHide, DSX. On Windows a device opened exclusively is invisible to the browser.
Can the bench measure input lag?
No. Lag in milliseconds needs external hardware such as a light sensor on the screen; the browser shares no clock with the pad. The rate panel times when reports arrive, which is a different number.