CTRLCHK

Universal controller test

Test your controller before the next match.

See live inputs immediately, then run a structured health check with transparent measurements.

Named controls rely on the standard Gamepad mapping. Unsupported measurements are never scored as failures.

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

Live view versus health check

The overview, buttons, sticks and triggers tabs are live viewers. They exist so you can confirm the browser sees the pad, chase a sticky bumper, or watch analog travel. They do not pass or fail anything. A stick sitting at +0.08 while you hold the controller is not a diagnosis.

Run health check when you want a verdict. The guided flow gates every hands-off sample behind a countdown, then walks range and circularity, snapback, buttons, triggers, and rumble. You can stop after centre if all you needed was a stick drift test.

What “good” looks like for a used pad

A healthy used controller is quiet at rest, reaches at least seven of eight outer sectors on each stick, returns from a flick without a large opposite-direction spike, and reports every required face button, bumper, stick click and D-pad direction. Analog triggers should reach 90% at least once. Circularity under 5% error is excellent; over 15% usually means the gimbal is oval or the rest used for the math is wrong — which is why we subtract the measured rest first.

If you play FPS titles, read the snapback number even when the overall score is high. A pad can rest cleanly and still overshoot on release, which feels like a recoil twitch. That is a different failure mode from drift and it is called out on the results card.

When the browser is the limit

The Gamepad API is not a USB analyzer. It will not show DualSense adaptive-trigger resistance, Xbox Elite paddles, gyro, or a true 1000 Hz wired poll. CTRLCHK labels those gaps instead of approximating them. Browser-observed update rate is printed as such on the polling rate test. Rumble uses vibrationActuator and is skipped without penalty on browsers that omit it.

Platform-specific names help when you are staring at a DualSense or an Xbox pad: use the PS5 controller test or the Xbox controller test if you want Cross/Circle or A/B labels in the checklist.

FAQ

Questions people actually ask

Do I need to install anything?

No. CTRLCHK runs in a current desktop Chrome, Edge, Firefox, or Safari tab. Connect USB or Bluetooth, press a button, and the Gamepad API exposes the device.

What does the health score mean?

It is a weighted blend of centre quality, range coverage (with a circularity penalty when the outer envelope is oval), button response, and trigger travel. Rumble, snapback notes, and update rate are recorded but capability-limited stages never reduce the score.

Why did a control not light up?

Named controls depend on the standard Gamepad mapping. Touchpad click, Elite paddles, and adaptive triggers are often invisible to the browser. Invisible controls are omitted from the required set instead of being marked failed.

Can I share a result?

Yes. Copy a permalink, save a result card image, or copy the JSON report. The permalink encodes the score and headline measurements — it does not include raw samples.