This online gamepad test uses the browser Gamepad API to show exactly what your controller is sending. Connect a controller, press a button, and it lights up on screen, while triggers show their pressure value and the analog sticks show their live position. It works with common console-style and PC controllers over USB or Bluetooth, and it is the fastest way to confirm every button and axis works before a session or after a repair.
Stick drift is one of the most common controller faults, and this test makes it obvious. Leave both analog sticks untouched and watch their reported position: on a healthy controller the values sit at rest near the centre, but a drifting stick reports movement even when you are not touching it, which is what makes a character wander or the camera creep in games. Because the test shows the raw axis values, you can see small amounts of drift that are hard to notice while playing, and decide whether a stick needs cleaning, recalibrating or replacing.
Every face button, shoulder button, D-pad direction and stick click gets its own indicator, so you can work through the whole controller and confirm nothing is dead or sticking. Analog triggers show a value that rises as you pull them, which lets you check the full range of travel rather than just whether they click at the end. If a controller does not appear at all, most browsers require you to press a button first before they report it, so give it a press to wake up the connection.
The Gamepad API runs entirely in your browser and reads only the controller state, so nothing is uploaded and no game or driver is needed. That makes this a handy, private check when you are buying a used controller, troubleshooting one that feels off, or simply confirming that a new pad is fully working before you rely on it in a match.
How this test works
This test reads the standard Gamepad API through navigator.getGamepads() and polls it on every animation frame, because the API has no events for button and axis changes. Button and axis values come straight from the browser, unmodified and with no deadzone applied, which is why a stick with drift shows a non-zero resting value here even when games hide it. Browsers deliberately withhold connected gamepads from a page until you press a button, so nothing appears until you do. The polling loop stops when the tab is hidden.
How to use the gamepad test
- Connect your controller by USB or pair it over Bluetooth.
- Press any button so the browser detects the controller.
- Work through every button and confirm each one lights up on screen.
- Move the analog sticks and watch their live position values.
- Leave the sticks untouched and check the values rest near centre to rule out drift.
Reference tables
These are server-rendered, so they are readable without running the test and quotable without running any JavaScript. Where a figure comes from a specification it is cited under the table; where it is our own judgement, the table says so.
| What it measures | What it cannot see |
|---|---|
| Every button and axis value the Gamepad API exposes, live | Anything at all until you press a button: browsers hide gamepads from a page until then, on purpose |
| Whether the browser applied the standard mapping | Meaningful button names when it did not; the raw indexes are all that is left |
| Resting axis values, which is what stick drift shows up in | Whether the cause is a worn potentiometer, dirt or a calibration offset |
| Trigger travel as a value between 0 and 1 | Trigger force, rumble, gyro or adaptive-trigger state, none of which the standard mapping carries |
| Battery level: never | The Gamepad API exposes no battery information |
Compiled by MyGearCheck from the browser APIs each test uses. Every limit listed here is a limit of the browser, not of your hardware.
| Index | Position in the specification | Xbox | DualSense | Switch Pro |
|---|---|---|---|---|
buttons[0] | Bottom button in right cluster | A | Cross | B |
buttons[1] | Right button in right cluster | B | Circle | A |
buttons[2] | Left button in right cluster | X | Square | Y |
buttons[3] | Top button in right cluster | Y | Triangle | X |
buttons[4] | Top left front button | LB | L1 | L |
buttons[5] | Top right front button | RB | R1 | R |
buttons[6] | Bottom left front button | LT | L2 | ZL |
buttons[7] | Bottom right front button | RT | R2 | ZR |
buttons[8] | Left button in center cluster | View | Create | Minus |
buttons[9] | Right button in center cluster | Menu | Options | Plus |
buttons[10] | Left stick pressed button | LS click | L3 | Left stick click |
buttons[11] | Right stick pressed button | RS click | R3 | Right stick click |
buttons[12] | Top button in left cluster | D-pad up | D-pad up | D-pad up |
buttons[13] | Bottom button in left cluster | D-pad down | D-pad down | D-pad down |
buttons[14] | Left button in left cluster | D-pad left | D-pad left | D-pad left |
buttons[15] | Right button in left cluster | D-pad right | D-pad right | D-pad right |
buttons[16] | Center button in center cluster | Xbox button | PS button | Home |
Index and position column: W3C Gamepad specification, w3c.github.io/gamepad, read 2026-08-05. The three controller columns translate those positions to the printed labels. Nintendo mirrors its face buttons, which is why index 0 is A on an Xbox pad and B on a Switch Pro. This mapping only applies when your browser reports mapping: "standard"; the test above tells you whether it does.
| Index | What it reports | Range |
|---|---|---|
axes[0] | Horizontal axis for left stick (negative left, positive right) | -1 to 1 |
axes[1] | Vertical axis for left stick (negative up, positive down) | -1 to 1 |
axes[2] | Horizontal axis for right stick (negative left, positive right) | -1 to 1 |
axes[3] | Vertical axis for right stick (negative up, positive down) | -1 to 1 |
W3C Gamepad specification, w3c.github.io/gamepad, read 2026-08-05. A stick at rest should sit close to 0.00 on both of its axes.
Frequently asked questions
My controller is connected but not detected. What now?
Most browsers only report a gamepad after it sends its first input, for privacy reasons. Press any button on the controller and it should appear immediately. If it still does not, reconnect it and make sure the browser tab is focused.
How do I test for analog stick drift?
Let go of both sticks and watch the axis values. On a good controller they rest near the centre position. If a value keeps reporting movement while you are not touching the stick, that stick is drifting and may need cleaning, recalibration or replacement.
Which controllers are supported?
Any controller your browser exposes through the Gamepad API, which covers most popular console-style and PC controllers connected over USB or Bluetooth. Exact button labels can vary by model, but presses and axis values are always shown.
Why does nothing appear until I press a button?
Browsers deliberately hide connected gamepads from a page until you press a button, as a privacy measure against fingerprinting. It is a browser rule, not a fault in the controller or the test.
What does standard mapping mean, and why does it matter?
It means the browser recognised your controller and mapped it to the layout the W3C Gamepad specification defines, so button numbers correspond to known positions. When it reports anything else, the numbers on screen are raw indexes with no reliable meaning, and the test says so instead of showing labels it cannot back up.
Can the test see my controller's battery level?
No. The standard gamepad mapping carries buttons and axes and nothing else, so battery, rumble, gyroscope and adaptive triggers are all invisible to any browser.
What resting value counts as drift?
This test treats a consistent reading above 0.10 on an axis as drift. That threshold is ours, chosen because one tenth of full deflection sits well above normal jitter and well below a deliberate movement; no specification defines one.
Does it work over Bluetooth as well as USB?
Yes, the API makes no distinction. If a controller reads worse over Bluetooth than on a cable, that difference is real and points at the connection rather than the sticks.
Guides for this test
The test shows you what is happening. These explain what to do about it.
More hardware tests
The closest tests to this one are the rest of the input devices group. Working through a whole machine instead? The full check runs everything in order and ends in one report.
Everything else in the suite: