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.

Published 2026-09-30

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.