Skip to main content

Gamepad tester online

Test gamepad buttons, sticks, triggers, and vibration.

Free & unlimitedWorks offline

Connect a gamepad

Plug in a controller or pair one via Bluetooth, then press any button to wake it up. Your browser will detect it automatically — nothing leaves your device.

Tip: Some gamepads require pressing a button before the browser detects them.
All processing happens in your browser. No data is sent to any server.

This gamepad tester reads navigator.getGamepads on every animation frame and mirrors what it finds onto a standard controller layout: four face buttons, a D-pad, two shoulder buttons, two analog trigger bars, Select, Home and Start, and both sticks with a live dot and an optional trail. Every button reports its pressed state and its analog value, so a trigger that only reaches 0.8 is visible before you feel it in a game. Both sticks are measured at rest to get a drift magnitude, from which the tool suggests a deadzone. Rumble is sent through vibrationActuator, and the whole session can be exported as a JSON report.

Key facts about Gamepad tester online

Key facts about Gamepad tester online
API usednavigator.getGamepads(), polled inside requestAnimationFrame
Poll rate shownframes per second of the poll loop — tied to the display, typically 60 or 120
Layout mappedthe W3C standard mapping: 17 buttons, 4 axes, D-pad on 12 to 15
Button valuespressed as a boolean plus the analog value, so triggers 6 and 7 read 0.00 to 1.00
Stick axesaxes 0 and 1 for the left stick, 2 and 3 for the right
Drift bandsunder 0.02 none, under 0.08 minor, 0.08 and above significant
Deadzone advicederived from the measured resting magnitude of each stick
Rumble callvibrationActuator.playEffect with the dual-rumble effect
Rumble presetsGentle, Strong, Dual motor and Heartbeat, with adjustable duration and intensity
Device identitythe raw gamepad id string plus its mapping, which is standard or empty
Session logthe most recent button presses and axis moves above a 0.5 change
Exporta JSON report with id, mapping, tested buttons, press counts and both stick magnitudes
Focused drift pageresting drift is measured over a fixed five seconds at /tool/stick-drift-test/, which reports peak, average and 95th-percentile deflection

What happens to your file

Controller state is read directly from the Gamepad API in this tab and rendered to the page — no input is sent to a server and nothing is stored between visits. The JSON report is assembled in memory, wrapped in a Blob and handed to a temporary object URL, so the download is produced by your own browser and never passes through a network. One consequence of how the API works: a gamepad stays invisible to any web page until you press a button on it, which is a deliberate anti-fingerprinting measure in browsers, not a fault in the controller or the page. Leaving the page also resets any active vibration actuator.

About this tool

  1. 1

    Connect and wake the pad

    Plug in the USB cable or pair over Bluetooth, then press any button on the controller. Browsers hide gamepads from a page until a button is pressed, so this step is mandatory even when the pad is clearly connected.

  2. 2

    Pick the right device

    If more than one pad is connected, the selector lists each by its id string. Check that the id matches the controller in your hands before you judge any result.

  3. 3

    Press every button

    Work around the face buttons, D-pad, shoulders, sticks and the Select, Home and Start cluster. Each one lights up and joins the tested set, and the press counter shows which you have missed.

  4. 4

    Pull the triggers slowly

    Triggers 6 and 7 report an analog value. Pull each from rest to full and watch the bar fill: a trigger that jumps straight to 1.00 or stalls short of it has a worn potentiometer or Hall sensor.

  5. 5

    Let the sticks rest for drift

    Take your thumbs off both sticks and let them centre. The magnitude under each stick is the distance from perfect zero — that number, not your impression in a game, is the evidence of drift.

  6. 6

    Use the suggested deadzone

    When drift is measurable the tool prints a recommended deadzone percentage. Enter that value in the game or in Steam's controller settings to stop the character wandering.

  7. 7

    Fire the rumble presets

    Gentle, Strong, Dual motor and Heartbeat drive the weak and strong motors at different magnitudes. Adjust duration and intensity to tell a dead motor from a weak one.

  8. 8

    Export the report

    Download the JSON summary if you are documenting a fault. It records the pad id, mapping, which buttons registered, the press counts and both stick magnitudes with four decimals.

Specs & compatibility
Browser supportChrome, Edge, Firefox, Opera and Safari 10.1+ all implement the Gamepad API
Rumble supportdual-rumble works in Chromium browsers; Firefox and Safari commonly expose no actuator, and the button stays hidden
Xbox controllerswired and Bluetooth pads report the standard mapping on Windows, macOS and Linux
DualShock 4 and DualSensestandard mapping over USB and Bluetooth; adaptive triggers and the touchpad are not exposed
Switch Pro Controllerdetected over USB and Bluetooth, but mapping is often empty, so indexes may not match the drawn layout
Generic USB padsusually report an empty mapping — read the raw axes and button indexes rather than the layout
Secure contextthe API requires HTTPS, which this page is served over
Account or installnone — no signup, no driver, no configuration software
  • A controller that shows nothing is almost always a controller that has not had a button pressed since the page loaded — press A or X first, then reload if it still does not appear.
  • Bluetooth pads sometimes enumerate twice, once per protocol; if the layout reacts oddly, switch to the other index in the selector.
  • A resting magnitude under 0.02 is normal manufacturing tolerance and needs no deadzone at all.
  • Above roughly 0.08 the drift will move a character on its own in most games; that is the point where a stick module replacement is worth it.
  • Turn on the stick trail before circling each stick to its rim — a trail that flattens on one side reveals a worn gate, which a static reading misses.
  • If the rumble button is missing, the browser reports no actuator for that pad; the motors may still be fine, so retest in a Chromium browser before blaming the hardware.
  • The poll-rate figure tracks your display, not your controller: on a 144 Hz monitor it reads near 144, and in a background tab it drops to a few frames per second.
  • On a Switch Pro Controller with an empty mapping, ignore the drawn layout and read the raw button index list instead.
  • Live standard-mapping layout with face buttons, D-pad, shoulders and both sticks
  • Analog trigger bars with exact 0.00 to 1.00 values
  • Stick drift magnitude with a suggested deadzone percentage
  • Optional stick trail for spotting worn gates
  • Rumble presets driving weak and strong motors
  • Button coverage tracker with per-button press counts
  • JSON report export
  • Checking a second-hand controller for stick drift before you pay for it.
  • Measuring exactly how far a drifting stick sits off centre so you can set a deadzone instead of replacing the pad.
  • Verifying every button after replacing a stick module, a membrane or a shoulder switch.
  • Testing whether both rumble motors still fire after a drop.
  • Confirming that a new Bluetooth pairing is presenting the standard mapping before configuring a game.
  • Documenting a controller fault with a JSON report for a warranty claim.
Browsers deliberately hide gamepads from a page until the user presses a button on one. Until that happens navigator.getGamepads returns empty slots, so no page can silently enumerate your hardware. Press any face button while this tab has focus and the pad appears immediately. If it still does not, check that the pad is paired to this computer rather than to a console, try a different USB port or cable, and make sure no other application has grabbed it exclusively.
The tool reports the resting distance of the stick from perfect centre as a magnitude between 0 and 1. Under 0.02 is normal and needs nothing. Between 0.02 and 0.08 is minor: you will usually not notice it outside a menu, and a small deadzone hides it. At 0.08 and above the drift is significant and will move your character or aim on its own in games with small default deadzones. At that point either raise the in-game deadzone to the suggested figure or replace the stick module.
The page only offers rumble when the browser exposes a vibrationActuator for that specific gamepad. Chromium browsers expose it for Xbox, DualShock 4 and DualSense pads; Firefox and Safari generally do not, and many third-party pads never report one even in Chrome. A missing button therefore tells you what the browser can drive, not whether the motors work. To rule the motors out, retest in Chrome or Edge before concluding the hardware is dead.
No, and no web page can. The Gamepad API standard mapping defines seventeen buttons and four axes, which covers the face buttons, D-pad, shoulders, analog triggers, stick clicks and both sticks. Adaptive trigger resistance, the DualSense touchpad surface, the gyroscope, the light bar and the internal speaker sit outside that model, so they are neither readable nor controllable here. Those features need a native driver or the console itself.
Because the browser reports an empty mapping for it rather than the standard one. When mapping is standard, index 0 is A, 12 to 15 are the D-pad, and the drawn layout is correct. When it is empty, the browser passes through whatever order the device reports, and that order varies by pad and operating system. The button and axis readouts below the layout still show exactly which index fired, so the controller can be tested completely — just read the indexes rather than the picture.
It counts how many times per second the page's polling loop ran, and that loop is driven by requestAnimationFrame, which is tied to your display's refresh rate. On a 60 Hz screen it settles near 60, on a 144 Hz screen near 144, and in a background tab it falls to a handful per second because browsers throttle animation frames. It is a useful sanity check that the loop is running, but it is not the controller's own report rate, which the Gamepad API does not expose.

Put this gamepad tester on your own site

The widget is the same tester with the explanations stripped out. It is free to embed on any site, commercial or not, with no key and no limit. The only condition is that the link under the frame stays.

<iframe src="https://toolchamp.app/embed/gamepad-tester/" width="100%" height="640" loading="lazy" title="Gamepad Tester by ToolChamp"></iframe>
<p><a href="https://toolchamp.app/tool/gamepad-tester/">Gamepad Tester by ToolChamp</a></p>

The widget runs entirely in the visitor’s browser, sets no cookies and sends nothing to a server, so it needs no consent banner of its own on your page.

View all

Part of Hardware testers that run in your browser

Updated

We use anonymous analytics to improve ToolChamp. No personal data is stored or sold. Privacy Policy