Button mapping
| 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 are a positional translation, not a firmware claim: the button physically sitting at the bottom of the right cluster is A on an Xbox pad, Cross on a DualSense and B on a Switch Pro, because Nintendo mirrors its face buttons.
Axis mapping
| 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, read 2026-08-05. Every axis is normalised to the range -1 to 1, with 0 as centre.
What counts as drift
The specification defines the range and says nothing about what a stick should read at rest. The MyGearCheck gamepad test treats a consistent resting value above 0.10 on either axis as drift. That number is our own judgement, chosen because one tenth of full deflection sits far above the jitter a healthy stick shows and far below a deliberate nudge. It is a line for triage, not a standard, and we would rather say so than let it be quoted as one. The reasoning is set out in the stick drift guide.
Reuse
Published under CC BY 4.0. Machine-readable at /api/v1/gamepad-mappings, CORS open, no key required. Attribution with a link back to this page is all that is asked.
To see what your own controller reports right now, including whether your browser applied the standard mapping at all, run the gamepad test.
What this reference does not cover
The standard mapping carries buttons and axes and nothing else. It has no field for battery level, rumble intensity, gyroscope, touchpad input or adaptive trigger state, so a browser cannot report any of those however capable the controller is. Anything beyond the table above would be a claim we cannot back, and it is not here.