Controller Gyro Test
A controller gyro test only works where the browser can see motion. The standard Gamepad reading does not include a gyroscope. This page asks desktop Chrome or Edge for a DualSense or DualShock 4 over WebHID, confirms the device, and refuses to draw a fake motion trace. Everywhere else, you get the reason in writing.
- No invented gyro numbers
- WebHID request for Sony pads on desktop Chromium
- Buttons and sticks still run on the Gamepad API
{"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":"Numbers","player":"Controller","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"}}This page focuses on motion. Buttons and sticks still use the Gamepad API.
Inputs stay in this browser. Nothing is uploaded.
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.
Buttons
Face
D-pad
Shoulders and triggers
Center and sticks clicks
Sticks
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.
How to test a gyroscope in the browser
- Confirm the browser. Use Chrome or Edge on a desktop operating system. Firefox, Safari, and phone browsers do not offer WebHID for this.
- Connect by USB. A DualSense or DualShock 4 on USB is the reliable case. Bluetooth HID reports differ.
- Request access. The browser shows a device picker. Choose the Sony pad. This page opens it, reads the product name, and closes it.
- Keep using the Gamepad panel. Buttons, sticks, drift, and rumble do not need WebHID.
Tilt tests in console menus talk to the pad through the console’s own stack. A website gets only what the browser implements. Today that means Gamepad for buttons and sticks, and WebHID as an explicit permission for lower-level reports. The request on this page proves the permission path. Streaming calibrated degrees would require a parser we will not ship until it has been checked against a real report, because a wrong scale is worse than no number.
Why the Gamepad API hides motion
The published Gamepad model is buttons, axes, haptic actuators, and a rarely implemented pose. Current desktop browsers do not fill pose for DualSense, Xbox, or Switch pads. An old experimental motion API is not something to build a verdict on. If a page shows a moving gyro cube for every pad without a permission prompt, it is not reading your gyroscope.
WebHID on DualSense and DualShock 4
WebHID is a Chromium feature for desktop. The user picks the device. The filter on this page asks for Sony’s vendor id 054C and the product ids for DualSense (0CE6), DualSense Edge (0DF2), and DualShock 4 (09CC and 05C4). We open the device to confirm the name, then close it. We do not send output reports, so lightbar, audio, and calibration are untouched.
Xbox and Switch gyro, where the hardware has them, are not available through this filter. Switch motion and Joy-Con motion need their own report formats. The Switch Pro and Joy-Con pages say so.
What to do if motion is missing
- Test aim-with-gyro inside the game or the Steam gyro-to-mouse setting. That path does not use this website.
- On PC, a DualSense gyro in Steam is Steam Input, not the Gamepad API. Enable it there if the game supports it.
- If WebHID errors, stay on buttons and sticks. They are unaffected.
- Phone browsers are the wrong tool for a gyro verdict.
Frequently asked questions
Why is there no moving gyroscope graphic?
Because we will not draw one from data we are not parsing yet. The button confirms WebHID access. A wrong trace would look more confident than it is.
Does my Xbox controller have a gyro?
Standard Xbox Wireless Controllers are not gyro pads. Some third-party Xbox-layout pads are. This test does not see them through the Sony WebHID filter.
Is WebHID safe here?
The page requests input access, reads the product name, and closes the device. It sends no output report and does not write calibration. You can cancel the browser prompt.