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.

Statuswaiting Controller Buttons Axes

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.

Frequently asked questions

Why doesn't my controller show up?
Press a button on the controller first — browsers deliberately hide gamepads from pages until they receive real input, as a fingerprinting protection. If it still fails to appear, confirm the controller is paired or plugged in and recognized by your operating system, click once on this page so the tab has focus, and close any game or remapping software (Steam included) that may have exclusive hold of the controller.
Does my controller input leave my device?
No. The page reads button and stick states locally through your browser's Gamepad API and draws them on screen. Nothing is recorded, stored, or transmitted — there is no server involved at all, and the test keeps working offline once the page has loaded.
What do the axis numbers mean, and how do I spot drift?
Each stick reports two axes from −1 to +1, where 0 is perfectly centered. With your hands off the sticks, a healthy controller settles within roughly ±0.05. A stick that consistently rests beyond about ±0.10 has drift, and games will see phantom movement. Mild drift can be masked with a larger deadzone in game settings; drift that keeps growing means the analog sensor is wearing out and the stick module needs cleaning or replacement.
Why do my triggers show up as axes, or buttons appear in a strange order?
Controllers describe themselves to the browser however their firmware chooses. Pads that use the standard mapping report 17 buttons in a fixed order, with the triggers as analog buttons 6 and 7. Non-standard pads — flight sticks, wheels, older or third-party controllers — may report triggers as extra axes, put buttons in a different order, or expose more controls than they physically have. That is a mapping difference, not a fault: press each control and watch which element responds.
Why doesn't the vibration check work?
Rumble support in browsers is patchy. Chromium-based browsers expose vibration for most Xbox and PlayStation pads, Firefox and Safari often do not, and a controller connected over Bluetooth can lose rumble even when it works over USB. If the button stays disabled, your browser is not exposing a vibration actuator for this pad — that says nothing about whether rumble works in actual games.

Related tools