Xbox Controller Tester
This Xbox controller tester covers the Xbox Series wireless controller and Xbox One pads the browser exposes with the standard mapping. You get A B X Y, the view and menu buttons, both sticks, analog LT and RT, dual rumble, and trigger rumble when the actuator supports impulse triggers. Model ids are on the Xbox Series and Xbox One pages.
{"waiting":"Press any button on the controller. Browsers hide gamepads until you press a button on this tab.","noApi":"This browser does not expose the Gamepad API, so the live tester cannot read inputs. The written checks on this page still apply.","insecure":"This page is not a secure context, so the browser will not share gamepads. Open the site over HTTPS.","privacy":"Inputs stay in this browser. Nothing is uploaded.","checkAgain":"Check again","layout":"Button labels","layoutAuto":"Match the connected pad","layoutPs":"PlayStation","layoutXbox":"Xbox","layoutNintendo":"Nintendo","layoutGeneric":"Generic","layoutDualsense":"PS5 DualSense","layoutDualshock":"PS4 DualShock 4","layoutSwitch":"Switch Pro","layoutJoycon":"Joy-Con","viewDrawing":"Controller","viewDashboard":"Dashboard","fullscreen":"Fullscreen","copyResults":"Copy results","copied":"Copied","battery":"Battery","log":"Input log","logEmpty":"Presses show up here.","notFound":"Not found","buttonStates":"Button states","axesHeading":"Axes","presses":"Presses","player":"Player","buttons":"Buttons","face":"Face","dpad":"D-pad","shoulders":"Shoulders and triggers","center":"Center and sticks clicks","extra":"Other buttons","sticks":"Sticks","leftStick":"Left stick","rightStick":"Right stick","up":"Up","down":"Down","left":"Left","right":"Right","stickHint":"Up on the plot is up on the stick. The numbers keep the browser’s sign: positive Y is usually down.","offset":"Offset","deadzone":"Inner deadzone","radial":"Radial","axial":"Axial","shape":"Deadzone shape","afterDeadzone":"After deadzone","inside":"Inside deadzone","measureDrift":"Measure drift (3s)","release":"Release both sticks and hold them still.","measuring":"Measuring resting offset…","trace":"Trace circularity","tracing":"Push the stick around the outer gate.","stopTrace":"Stop trace","vibration":"Vibration","strong":"Strong motor","weak":"Weak motor","duration":"Duration","play":"Play vibration","pulse":"Pulse three times","triggerRumble":"Try trigger rumble","rumbleMissing":"This browser did not offer a vibration actuator for the selected controller. Chrome and Edge usually do; Firefox and Safari often do not.","rumbleSent":"Vibration command sent.","rumbleFailed":"The browser rejected the vibration command.","triggerUnsupported":"Trigger rumble is not available on this actuator. Dual rumble still ran if the browser accepted it.","rate":"Browser-observed rate","sampleAge":"Sample age","moveStick":"Move a stick to measure the update rate.","rateNote":"This is how often the browser hands us a new sample. It is not the controller’s USB poll rate.","ageNote":"How old the newest sample is when the page draws it. This is not display lag and not in-game lag.","ageUnavailable":"This browser’s gamepad timestamp cannot be compared with the page clock.","gyro":"Motion","requestHid":"Request DualSense access","hidIntro":"Gyro, accelerometer, touch position, and battery are not part of the standard Gamepad reading. Chrome and Edge on desktop can request a DualSense or DualShock 4 over WebHID.","hidMissing":"WebHID is not available here. Use Chrome or Edge on a desktop computer, connect the pad by USB, and try again. Buttons and sticks above still work through the Gamepad API.","hidEmpty":"No device was selected.","hidOk":"The browser allowed access to {name}. This version confirms the device and does not stream gyro values yet, so it cannot show a wrong motion number. Buttons and sticks above stay on the Gamepad API.","hidDenied":"The browser blocked or cancelled device access. Gamepad readings are unaffected.","raw":"Raw data","rawEmpty":"Raw values appear here after a controller connects.","checkup":"Full checkup","startCheckup":"Start full checkup","resetMarks":"Reset marks","stepButtons":"Buttons","stepSticks":"Sticks","stepTriggers":"Triggers","stepRumble":"Rumble","stepDone":"Review","checkupIdle":"A short pass over buttons, both sticks, both triggers, and vibration.","checkupButtons":"Press every face button, the D-pad, bumpers, menu buttons, and both stick clicks.","checkupSticks":"Rotate each stick out to the gate.","checkupTriggers":"Pull both triggers fully.","checkupRumble":"Play vibration, then say whether you felt it.","feltYes":"I felt it","feltNo":"I felt nothing","checkupSkipRumble":"This pad has no vibration actuator in this browser, so that step is skipped.","announcePress":"{label} pressed","modelLink":"This looks like {name}.","openModel":"Open the model page","presetNote":"Labels are locked to this page’s layout. Change “Button labels” if they do not match the pad in your hands.","mappingStandard":"standard mapping","mappingOther":"non-standard mapping","healthy":"Healthy","borderline":"Borderline","drift":"Drift","couldNotMeasure":"Could not get a still sample. Rest the controller on a table and try again.","suggested":"Suggested inner deadzone","coverageLow":"Keep tracing the outer edge. Too few sectors were filled to score the gate.","noPadSelected":"No controller is selected.","slotsLabel":"Connected controllers","noneConnected":"None connected yet","focusDrift":"This page focuses on stick drift. Every other check is still here.","focusDeadzone":"This page focuses on deadzone and calibration. Every other check is still here.","focusVibration":"This page focuses on vibration. Every other check is still here.","focusPolling":"This page focuses on the browser-observed update rate. Every other check is still here.","focusLatency":"This page focuses on sample age and input timing. Every other check is still here.","focusGyro":"This page focuses on motion. Buttons and sticks still use the Gamepad API.","focusButtons":"This page focuses on buttons. Sticks, triggers, and vibration are still here.","names":{"edge":"DualSense Edge","dualsense":"DualSense","ds4":"DualShock 4","joycon":"Joy-Con","switchpro":"Switch Pro Controller","bitdo":"8BitDo pad","deck":"Steam Deck or Steam Input device","series":"Xbox Series controller","xone":"Xbox One controller","xbox":"Xbox controller","nintendo":"Nintendo controller","generic":"generic PC gamepad"}}Press any button on the controller. Browsers hide gamepads until you press a button on this tab.
Button states
Input log
- Presses show up here.
Press any button on the controller. Browsers hide gamepads until you press a button on this tab.
This is how often the browser hands us a new sample. It is not the controller’s USB poll rate. How old the newest sample is when the page draws it. This is not display lag and not in-game lag.
Up on the plot is up on the stick. The numbers keep the browser’s sign: positive Y is usually down.
Vibration
Motion
Gyro, accelerometer, touch position, and battery are not part of the standard Gamepad reading. Chrome and Edge on desktop can request a DualSense or DualShock 4 over WebHID.
Full checkup
- Buttons
- Sticks
- Triggers
- Rumble
- Review
A short pass over buttons, both sticks, both triggers, and vibration.
Raw data
Raw values appear here after a controller connects.
- Connect. USB just works on Windows. Bluetooth pairs as “Xbox Wireless Controller” on current Windows, Mac, and Android.
- Press a button here. The browser will not list the pad until you do.
- Sweep ABXY, the D-pad, and both sticks. Tested buttons keep a mark. Sample drift with the pad on the table.
- Play rumble. Then try trigger rumble. Series impulse triggers need a browser that accepts that effect.
How to connect an Xbox controller to PC, Mac, and Android
- Windows: USB is immediate. Bluetooth on Series and later One pads pairs in the system panel. The old wireless adapter is optional, not required for this test.
- Mac: pair in Bluetooth settings. Current macOS releases expose the pad to browsers.
- Android: pair, open Chrome, press a button on this page.
- Linux: some Bluetooth stacks need the distribution’s Xbox driver before Chromium sees the pad or its rumble.
What this Xbox test checks
The standard button order, both sticks with drift and circularity, analog triggers, the browser-observed rate, sample age, and vibration. Share on Series pads may appear as an extra button. Elite paddles often do not appear in the standard set; look at the raw list before you call a paddle dead.
Series, One, and Elite differences
Series pads commonly report USB id 045E:0B12 and a Bluetooth id 045E:0B13. Xbox One revisions commonly report 045E:02DD, 045E:02EA, and related ids, and Bluetooth can differ again. Elite Series 2 is its own product. This page tests whichever Xbox pad the browser mapped. If the labels look wrong, you may be looking at a PlayStation pad that Steam restyled. Switch the label control.
Xbox stick drift and normal values
The standard Series and One sticks are potentiometers. A healthy 3-second rest in this tester is under about 0.06 radius. Over 0.12 is drift. Hall-effect replacements exist as repairs; the browser will not label them, but a low resting radius after the swap is the check that matters. Use the stick drift test for the same sample.
Calibration and deadzone on Xbox pads
Windows does not ship a useful global deadzone for modern Xbox pads. Set it in the game, or in Steam Input if you use that layer. Measure with those layers off, then set the slider on the deadzone test to just above the radius. There is no safe “calibrate sticks” button we can press from a website that writes the Xbox firmware.
Common Xbox controller problems and fixes
- Not detected on Linux: install the distro’s current Xbox driver and try USB.
- Drift on one side only: sample, then deadzone or a stick replacement. Compare with the other side in the same 3 seconds.
- No trigger rumble: the browser may only offer dual rumble. Feel the handles first.
- High sample age on Bluetooth: that is common. USB is the lower-latency check. See the latency test.
Specs
| Series (typical USB) | Xbox One (typical) | |
|---|---|---|
| Vendor | 045E | 045E |
| Product id | 0B12, Bluetooth often 0B13 | 02DD, 02EA, and revisions |
| Triggers | Analog, impulse on Series | Analog |
| Gyro in this tester | Not exposed | Not exposed |
Frequently asked questions
Does this work with an Xbox Elite controller?
Face buttons, sticks, triggers, and rumble do. Paddles may be missing from the standard mapping. Check the raw button list before you fail a paddle.
Why does my Series pad show up as a 360 pad?
Steam Input or another remapper is presenting a virtual Xbox 360 device. Close that layer to test the pad itself.
Can I test trigger vibration?
Use “Try trigger rumble” in the vibration panel. If the actuator rejects it, this browser only has dual rumble for that pad.