Which Controllers Work in a Browser
Which gamepads work in a browser — Xbox, PS5/PS4, Switch Pro, Joy-Con, 8BitDo, generic HID — over USB and Bluetooth, plus each family's quirks.
The short answer
If a pad presents itself to the OS as an HID game controller, a modern browser will enumerate it. That covers nearly everything mainstream: the table below is what actually happens per family, with the quirks that matter.
| Controller | USB | Bluetooth | In-browser notes |
|---|---|---|---|
| Xbox Series / One | ✅ | ✅ (BT models) | The reference implementation — standard mapping, rumble in Chrome/Edge |
| Xbox 360 | ✅ | — | Works via XInput on Windows; a classic |
| PS5 DualSense | ✅ | ✅ | Standard mapping; adaptive triggers and gyro not exposed |
| PS4 DualShock 4 | ✅ | ✅ | Same story — touchpad reads as a button, gyro invisible |
| Switch Pro | ✅* | ✅ | *USB-C pairing behavior varies by OS; BT is the reliable path |
| Joy-Con (each) | — | ✅ | Enumerates as its own half; see below |
| 8BitDo | ✅ | ✅ | Boot in X-input mode for cleanest mapping |
| Stadia controller | — | ✅* | *After Google’s post-shutdown Bluetooth-conversion firmware |
| Fight sticks / wheels / generic HID | ✅ | varies | Enumerate fine; expect non-standard mapping |
Xbox pads: the safe pick
Xbox One (Bluetooth-era models) and Series controllers are the most consistent across Windows, macOS, Linux and Android. Over USB they identify as Xbox … Controller and map perfectly to the standard layout — face buttons, bumpers, analog triggers, sticks. Chrome and Edge also expose dual-rumble on them, and Xbox pads are the main beneficiary of the newer trigger-rumble extension where browsers support it. If a pad ever “should just work”, it’s this one.
PlayStation pads: full function minus the extras
DualShock 4 and DualSense enumerate cleanly over USB and Bluetooth. Caveats:
- The touchpad reports as a button (press), not a pointing surface — the Gamepad API has no pointer channel.
- Gyro, accelerometer, light bar, adaptive triggers: not exposed. The standard API has no schema for them.
- DualSense gets dual-rumble in Chrome/Edge.
Nintendo: works, with footnotes
Switch Pro pairs over Bluetooth and reports a standard-ish mapping — hold the sync button on top until the LEDs sweep. Wired works on some OS/browser combos but pairing is the reliable path.
Joy-Cons are two separate devices. Each half pairs alone and enumerates with its own buttons and a single stick, reporting sideways orientation. Browsers will happily show both as two controllers — our tester picks among them with the controller dropdown — but no browser merges them into one pad. Steam Input or driver-level mergers (vJoy and friends) do that job if you want them combined.
Third-party and legacy
8BitDo pads are excellent citizens in the right mode: power-on combos choose between X-input (D-input/Switch/Apple are the alternates). X-input reports standard mapping; other modes can enumerate with quirks. Generic USB pads almost always work but frequently report mapping: "" — non-standard layout — which is why the tester falls back to raw index labels instead of guessing names. Stadia’s controller got a second life when Google pushed a Bluetooth-mode firmware before shutdown — converted units are ordinary BT LE HID pads.
What doesn’t reach the page
Whatever the pad, the Gamepad API only carries buttons, axes, timestamp and (optionally) a rumble actuator. No gyro, no touchpad coordinates, no battery level, no audio jack, no LED control. If a spec sheet advertises the feature, assume the browser can’t see it unless it maps to a button.
And one browser divide worth knowing: Chrome/Edge expose the modern dual-rumble actuator, Firefox offers an older single-pulse channel on some devices, Safari exposes no rumble — and on iOS, controller support exists but is thinner and version-dependent. The Gamepad API notes tabulate these differences; the tester reports which channel your own setup offers.
Frequently asked questions
Does the PS5 DualSense work in a browser?
Yes — USB or Bluetooth, it enumerates as a standard-layout pad in Chrome, Edge and Firefox. What doesn't come through are the DualSense extras: adaptive triggers and the gyro/accelerometer aren't part of the standard Gamepad API surface, so they read as plain buttons and stay invisible respectively.
Do Joy-Cons work as one controller?
Each Joy-Con pairs as its own HID device and shows up as a separate half-controller — browsers don't merge them into one pad. They're usable for testing each half; for combined play you need Steam Input or a driver-level merger (e.g. vJoy-based tools) presenting a single virtual device.
Why does my 8BitDo pad show wrong button labels?
Mode. 8BitDo pads boot in different HID personalities (X-input, D-input, Switch, Apple) depending on the power-on combo. X-input gives the cleanest standard mapping in browsers; other modes work but may report a non-standard layout, so the tester falls back to raw index labels.
My controller connects but nothing registers — why?
Almost always the gesture gate: browsers hide gamepads until a button on the pad itself is pressed. Press any button once. After that: try USB instead of Bluetooth, re-pair, and confirm the pad shows up in the OS (Windows joy.cpl, macOS controller settings, or another OS gamepad viewer) — if the OS can't see it, no browser can.