CTRLCHK

Gamepad API tester

Inspect every signal your browser can see.

A fast live view for developers, players, and repair checks—with local processing and raw values.

Follow the guided steps; CTRLCHK will tell you exactly what to do and when each stage is complete.

Device

No controller detected

Waiting
Live controller input visualization

Connect a controller over USB or Bluetooth, then press any button to begin.

Standby—

Live readout

Every axis and button, measured in real time.

Nothing untouched is treated as a failure. This is a viewer, not a verdict — run a health check when you want scored measurements.

LX+0.00 
LY+0.00 
RX+0.00 
RY+0.00 
L radial0.0% 
R radial0.0% 
L2N/AUnmapped
R2N/AUnmapped
Buttons observed0 / 0

A tester that treats the Gamepad API honestly

If you have ever opened a gamepad tester and wondered whether axis 2 is a trigger or the right stick, you have already met the real problem. The Gamepad API is a compatibility layer, not a schematic. Standard mapping puts left stick on 0/1, right stick on 2/3, and analog triggers on buttons 6 and 7. Plenty of real hardware — DualSense over Bluetooth on macOS Firefox in particular — does not ship that mapping.

CTRLCHK resolves a layout before any diagnostic math. Standard mapping is trusted. Sony devices get ABS or HID profiles when triggers rest at −1. Hat axes become D-pad buttons. Heuristic layouts are labeled heuristic so a lucky guess cannot hide inside a High confidence score.

How to run the guided check

Connect the pad and press a button. When you start the health check you get a 3-2-1 countdown, then five seconds of hands-off centre, a slow circle on each stick, a flick-and-release for snapback, a required-button checklist, analog trigger peaks, and a rumble pulse if vibrationActuator.playEffect exists. Skip anything the browser cannot see. The score will not punish you for Firefox omitting rumble.

Developers can leave the guided flow and stay on live overview with Raw frame enabled. Mapped axes, raw axes, pressed bits, and the mapping profile update with the UI tick — not with Gamepad.timestamp — so a still pad still redraws.

What this is not

It is not a USB 1000 Hz cert, a DualSense haptic lab, or an Xbox Elite paddle programmer. Those signals do not appear in the Gamepad API. For the measurements that do, see stick drift, circularity, snapback, vibration, and update rate.

FAQ

Questions people actually ask

What is the Gamepad API?

A browser API that exposes connected gamepads as axes, buttons, a mapping string, and a timestamp. CTRLCHK polls it locally with requestAnimationFrame. No driver and no native app.

Why is mapping sometimes empty?

Firefox on macOS often reports DualSense with mapping "". CTRLCHK then applies a Sony profile for stick order, signed trigger axes, and hat-encoded D-pads, and records mapping quality as profile rather than standard.

Can I see raw axes?

Yes. Enable Raw frame in the live panel. You get mapped sticks, the untouched axis array, button values, and the mapping profile used.

Does a frozen timestamp mean the pad is broken?

No. Many browsers stop advancing Gamepad.timestamp while state is unchanged. Capture still runs on the animation clock. We surface “timestamp does not advance” instead of printing 0 Hz.