Device test · Game input
Gamepad Tester
Press every button and move every stick on your controller and watch each one register live. Spot stick drift with the axis readouts, check trigger travel, and fire a rumble test — everything runs in your browser, and nothing you press leaves this device.
Connect a controller (USB or Bluetooth) and press any button on it to wake it up — browsers only expose a gamepad to a page after its first button press.
How this test works
Every controller you connect is exposed to this page through the browser's Gamepad API. Each pad reports an identity string, a mapping type, an array of buttons, and an array of axes. Buttons carry two readings: a digital pressed flag and an analog value from 0 to 1, which is how triggers report partial pulls. Axes are the analog sticks, reported from −1 to +1 in each direction, where 0 is perfectly centered. This page displays all of it — the board lights each button as it registers, the fill bar along the bottom of each button shows its analog value, and each axis row plots the live stick position against a center mark.
The page polls with requestAnimationFrame, re-reading the gamepad list from navigator.getGamepads() on every frame — required because some browsers return an immutable snapshot rather than a live object. A button element turns solid while held and keeps a lighter tested state after release, so one full pass over the controller shows at a glance which controls have registered. When a pad identifies itself with the standard mapping, the board labels buttons with their common names (A, B, X, Y, bumpers, triggers, and so on); non-standard pads get plain indexes, since only the controller knows what its firmware means by button 9. Polling runs only while a controller is connected and stops entirely when the last one disconnects.
The limits are set by the API, not the hardware. Browsers hide gamepads until you press a button on them, so a silent controller is invisible by design. The page sees only what the operating system's driver reports — it has no raw HID access, so internal buttons that never reach the OS cannot be tested, and the same physical controller can report different mappings on different systems or over Bluetooth versus USB. Sampling is tied to the display refresh, so an extremely short tap could in principle land between frames, and the vibration check depends on actuator support that varies widely by browser, controller, and connection type.