What should a controller vibration tool actually do?
A controller vibration tool has one job: send a rumble command to the gamepad, listen for what the controller reports back (or feel for it), and tell you whether the motors are responding correctly. Most blogs treat this as a yes/no test, but the SERP-friendly truth nobody states is that rumble has two independently driven motors, two amplitude axes, and at least three motor technologies in the wild.
On a DualShock 4, there is a heavy motor in the left grip and a light motor in the right grip. Both are eccentric rotating mass (ERM) motors, addressed via HID output report 0x05 over USB and 0x11 over Bluetooth. They take an unsigned byte each, 0 to 255, for amplitude.
On a DualSense, the situation is more interesting. The grip rumble is handled by voice-coil actuators rather than ERMs, which is why DualSense haptics feel cleaner and more directional than DualShock 4 rumble. The HID output report is 0x02 (USB) or 0x31 (Bluetooth) and has dozens of bytes covering motor amplitudes, lightbar colour, and adaptive trigger configuration.
On Xbox Wireless Controllers, the motor layout is similar (heavy left, light right) plus the two trigger motors. The protocol is XInput on Windows and a slightly different HID layout on USB/Bluetooth elsewhere.
A serious controller vibration tool addresses each motor independently, runs short and long pulses, and tells you which side responded.
How does JoyCheck drive rumble from the browser?
For the read side (knowing the controller is connected), JoyCheck uses the W3C Gamepad API like every browser-based diagnostic. For the write side (sending rumble), the picture is messier and depends on the browser.
On Chromium-based browsers (Chrome, Edge, Brave, Opera, Arc), JoyCheck uses the WebHID API. This is a low-level API that hands the page direct access to HID output reports, which is exactly what we need to send the right rumble bytes to a DualShock 4, DualSense, or Xbox controller.
On Firefox, the GamepadHapticActuator interface from the Gamepad API itself provides playEffect("dual-rumble", { duration, weakMagnitude, strongMagnitude }). It is less granular than WebHID but enough to confirm both motors work.
On Safari, neither WebHID nor GamepadHapticActuator is fully implemented as of mid-2026, so rumble testing in Safari is the gap.
For Chromium and Firefox, the JoyCheck rumble test runs three pulses: 500 ms at full weak amplitude, 500 ms at full strong amplitude, then 1,000 ms at both at 50% to confirm the mixing logic. If you feel and hear all three, the motors are alive.
What does a healthy rumble look like in raw values?
A test is only as good as the threshold. Here are the values JoyCheck uses, derived from protocol traces and the nondebug/dualsense reference implementation.
| Controller | Heavy motor amplitude byte | Light motor amplitude byte | Audible at | Felt at |
|---|---|---|---|---|
| DualShock 4 | output report 0x05, byte 4 | output report 0x05, byte 5 | ≥ 60/255 | ≥ 90/255 |
| DualSense (USB) | output report 0x02, byte 3 | output report 0x02, byte 4 | ≥ 50/255 | ≥ 80/255 |
| Xbox Wireless Controller (XInput) | XInput XINPUT_VIBRATION.wLeftMotorSpeed | wRightMotorSpeed | ≥ 6000/65535 | ≥ 12000/65535 |
| Switch Pro Controller | Subcommand 0x10, custom amplitude bytes | Subcommand 0x10, custom amplitude bytes | ≥ 80/255 | ≥ 120/255 |
| 8BitDo Ultimate | XInput emulation | XInput emulation | ≥ 6000/65535 | ≥ 12000/65535 |
If JoyCheck drives the controller at 255/255 and you cannot feel anything, the failure is one of three: a snapped solder joint inside the controller, a dead motor, or a damping problem (testing on carpet or a soft surface absorbs the vibration). Move to a hard table, retry, then suspect hardware.
ERM motors vs voice-coil haptics: why does the test feel different per controller?
Two motor technologies dominate consumer controllers in 2026, and they fail in different ways. A vibration tool that does not name them is a vibration tool that will mislead you about what is broken.
Eccentric rotating mass (ERM) motors are small DC motors with an off-centre weight on the shaft; spin them and the imbalance produces shake. They are cheap and durable for thousands of hours, with one inherent limitation: amplitude and frequency are coupled. You cannot drive a heavy buzz at a high frequency or a fine buzz at a low frequency.
Voice-coil actuators are linear actuators that move a mass back and forth on a spring. They decouple amplitude from frequency, which is why DualSense haptics can simulate raindrops, gravel, or a bowstring. The trade-off is fragility; voice-coil actuators have more delicate solder joints and they fail open-circuit more often than ERMs at similar use levels.
A controller vibration tool can distinguish these failure modes by ramping amplitude. An ERM that produces sound but no vibration is usually motor-stuck-on-shaft; a voice-coil that produces neither sound nor vibration at any amplitude is usually open-circuit. JoyCheck does not give you the diagnosis, but the symptom pattern lets a repair tech triage faster.
How do you test controller rumble in the browser, step by step?
The flow is the same across every controller; only the surface details change.
- Open JoyCheck in Chrome, Edge, Firefox, or Safari. On Safari you will only get the read-side diagnostic (stick and button values), not the rumble test.
- Connect the controller via USB-C or USB micro (DualShock 4 only) or pair over Bluetooth. WebHID-based rumble may prompt you to permit device access on first run.
- Press any button. The Gamepad API does not surface the controller until the user has interacted with it; one button press is enough.
- Click "Test rumble". JoyCheck runs the three-pulse sequence: weak motor solo, strong motor solo, then mixed.
- Feel for each pulse. A healthy controller produces a noticeably rougher buzz on the heavy motor and a finer, higher-frequency buzz on the light motor; you should be able to tell them apart.
- Test trigger haptics if you are on a DualSense. JoyCheck sends an adaptive-trigger resistance profile to L2 and R2 and reports back which trigger responded.
- Place the controller on a hard surface for the test, not your lap. Soft surfaces dampen rumble; we have seen "broken motor" reports that turned out to be a couch.
The whole sequence takes about 20 seconds.
Why might your controller vibration fail in software, and how do you rule it in or out?
Before you declare a motor dead, eliminate the easy software causes.
- Game has rumble off in settings. Many PC games default rumble to off. The browser tool removes this variable.
- Steam Input override. Steam can intercept rumble and remap or suppress it; test outside Steam.
- Windows Game Bar conflict. Game Bar sometimes claims exclusive control of the gamepad. Close it and retry.
- Bluetooth interference. Heavy Wi-Fi or microwave use in the room can drop rumble packets. Test via USB cable to isolate.
- Battery below 15%. DualSense and DualShock 4 throttle rumble at low battery to extend playtime. Charge to over 50% and retry.
- Firmware mismatch on third-party controllers. 8BitDo and GuliKit publish firmware updaters that fix rumble regressions; check the manufacturer site.
If JoyCheck drives rumble and you feel nothing on a charged controller across multiple machines, the motor is the suspect.
What can a controller vibration tool not do?
A vibration tool tells you the motors are alive. It does not fix a controller that fails the test. Specifically:
- It does not replace motors. The DualSense voice-coil actuators and DualShock 4 ERMs are soldered to the mainboard. Replacement is an iFixit-rated moderate-difficulty procedure.
- It does not test the audio path. DualSense has a speaker and a mic; those are a separate diagnostic.
- It does not measure latency. Rumble round-trip latency from button-press to motor-spin is a real metric, but it needs hardware timing instrumentation that a browser cannot provide.
- It does not test the lightbar. DualShock 4 and DualSense have an RGB lightbar that fails independently; JoyCheck tests this in a separate step.
If JoyCheck says the motors do not spin, the next stop is either a self-service repair using the iFixit guides, a paid repair through Sony PlayStation support, or replacement.
Frequently asked questions: what do people ask about controller vibration tools?
What is a controller vibration tool?
A controller vibration tool is a diagnostic that sends rumble commands to a gamepad and confirms the motors respond. Browser-based versions like JoyCheck use the WebHID API or the Gamepad Haptic Actuator API to drive the motors directly, bypassing games and OS settings that might suppress rumble.
How do I test controller vibration in my browser?
Open JoyCheck at joycheck.io, connect the controller via USB or Bluetooth, press any button to wake the connection, then click the rumble test. JoyCheck runs a weak-motor pulse, a strong-motor pulse, and a mixed pulse so you can confirm each motor individually. Total time is about 20 seconds.
Why does my controller not vibrate when I run a test?
Three common causes. Software middlemen (Steam Input, Game Bar) intercepted the rumble command; battery is below 15% and the controller is throttling rumble; or you are on Safari, where WebHID is not yet fully implemented. Test on a hard surface in Chrome or Firefox to isolate.
Is broken rumble a hardware or software issue?
Usually software at first, then hardware. Game settings, Steam Input overrides, and low battery account for most "rumble does not work" reports, and a browser tool eliminates all of those. If rumble still fails at 100% amplitude on USB with a full battery, the motor solder joint or the motor itself has likely failed.
How do I fix controller rumble without replacing the controller?
Charge above 50%, switch to a USB-C cable, close Steam and Game Bar, then retry in JoyCheck. If rumble works in JoyCheck but not in your game, the game or its launcher is suppressing rumble. If it fails in JoyCheck too, the path is a self-repair using the iFixit guide for DualSense or a controller replacement.
Does controller vibration testing work the same for Xbox, PlayStation, and Nintendo controllers?
The diagnostic is the same; the protocol underneath differs. Xbox uses XInput on Windows and HID elsewhere, PlayStation uses Sony-specific HID output reports, and Nintendo Switch Pro and Joy-Con use a custom subcommand layer. JoyCheck handles the protocol detection so you get the same test interface for every controller.
Does JoyCheck send any data to a server?
No, JoyCheck runs entirely in your browser. The vibration test is generated client-side and sent directly to the controller over WebHID or the Gamepad Haptic Actuator interface. No telemetry, no upload, no account.
Sources & references
- W3C, "Gamepad API specification" (vibrationActuator): www.w3.org/TR/gamepad
- Mozilla Developer Network, "GamepadHapticActuator": developer.mozilla.org/en-US/docs/Web/API/GamepadHapticActuator
- Mozilla Developer Network, "Gamepad: vibrationActuator property": developer.mozilla.org/en-US/docs/Web/API/Gamepad/vibrationActuator
- USB Implementers Forum, "HID information": www.usb.org/hid
- iFixit, "Game controller repair guides": www.ifixit.com/Device/Game_Console