Controller Not Detected in Browser: Troubleshooting Guide
The Web Gamepad API exposes connected controllers to a page only after the browser detects a connection or after a button or axis is used for the first time.1 This means the most common "not detected" result is not a broken controller: the controller is connected, but the page has not received the interaction that makes the browser expose it. Connect the controller, press any button, and the page should respond within a second.
If pressing a button still produces no detection, the issue is at a deeper level. Work through the checks below in order to isolate whether the problem is at the operating system level, the browser level, or the controller's input mode. Repeat any failed check after a browser reload and after reseating the cable or re-pairing Bluetooth.
Checking at the operating system level
On Windows, open the Run dialog (Win+R), type joy.cpl, and press Enter. If the controller does not appear in the Game Controllers list, the issue is at the OS driver level, not in the browser. Reinstall drivers or try a different USB port before opening any test page. On macOS, check System Information under Hardware and USB. On Linux, confirm your user account has read permission on the relevant /dev/input/event* device.2
Start where the browser gets its input
Because the browser reads from the OS, the OS must see the controller first. A device that does not appear in joy.cpl cannot be fixed by browser settings or page reloads alone. Resolve the OS recognition issue first, then test in the browser. The browser Gamepad API has no way to expose a controller that the operating system driver layer has not already registered, so confirming OS-level visibility is the most important first step, the trace a missing gamepad back to the OS or browser check you run before anything else.
Once the OS recognizes the device, open the tester in Chrome or Edge and press any button to prompt the browser to expose it. A controller that is visible in joy.cpl but still missing from the page usually needs that first button press, so do not assume the browser is broken before you have interacted with the device while the tab is open.
Browser compatibility and input mode
Chrome and Edge provide the broadest Gamepad API support. Firefox supports it but can delay exposing a gamepad until the user interacts with it while the page is visible, partly to reduce fingerprinting.3 Safari on iOS and some older macOS versions do not support the Gamepad API at all, so switch to Chrome or Edge if you are on Safari and seeing no detection.
Confirm the controller mode before blaming the browser
If the controller has a mode switch, like the Logitech F310's D/X switch on the back, or the 8BitDo's connection-mode buttons, confirm it is set to XInput mode. Logitech's F310 documentation describes XInput as the modern Windows gamepad standard and recommends setting the switch to X for modern games whenever possible.4 DirectInput mode produces a different device descriptor that some browsers do not map correctly, resulting in detection failures or unusual button assignments.
Bluetooth pairing troubleshooting by platform
Bluetooth controller detection failures in the browser often trace back to the OS pairing state rather than to the browser itself. On Windows 11, open Settings, then Bluetooth and devices, and check whether your controller appears as paired. A device that shows as paired but disconnected needs you to press its power or sync button to prompt Windows to reconnect. For Xbox controllers, hold the sync button on top until the Xbox logo blinks, which puts the controller into pairing mode for a fresh connection.5
On macOS, navigate to System Settings and then Bluetooth and look for the controller in the device list. If it shows as paired but not connected, click Connect next to the device entry. Apple’s Xbox controller guide follows the same pairing pattern: turn on the controller, hold the Connect button to enter pairing mode, then select it from Bluetooth settings.6 DualSense and DualShock 4 do not require any additional app on macOS.
Linux: reconnecting via bluetoothctl
On Linux, use bluetoothctl to inspect the pairing state: run bluetoothctl in a terminal, then type devices to list known devices. If your controller appears in the list, type connect followed by the device MAC address to reconnect. After reconnecting, reload the tester page and press a button. If the OS shows the device as connected but the browser still shows no gamepad, check the evdev permissions described in the Linux controller guide. Chromium opens Linux input devices through evdev nodes such as /dev/input/event*, so a Bluetooth controller has the same permission requirements as a USB connection.2
When to use this
Use this guide when the gamepad tester shows "waiting for controller" or no controller detected even after plugging in or pairing your gamepad via Bluetooth.1
Examples
Browser shows waiting because you forgot to press a button
Status: Waiting for controller... (USB cable connected, no button pressed yet)
Status: Controller connected as Standard Gamepad (after pressing A on the controller)
The browser requires one physical button press before exposing the gamepad to the page. This is a security requirement, not a bug.
Logitech F310 not detected because mode switch is in wrong position
Mode switch on back: D position / Browser: no controller detected after button presses
Mode switch moved to X position, controller unplugged and replugged then detected immediately on next button press
Always verify the mode switch position before diagnosing USB port or driver issues.
Linux permission issue preventing evdev access in Chrome
ls -l /dev/input/js0 confirms device exists, but Chrome shows no controller
sudo usermod -aG input $USER then log out and back in and controller detected on next button press
Chrome on Linux uses the evdev interface (/dev/input/event*), not joydev (/dev/input/js*). Working in jstest-gtk does not guarantee evdev access.
- 1.
MDN, "Using the Gamepad API," developer.mozilla.org, April 2026. https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API/Using_the_Gamepad_API
- 2.
Chromium, "device/gamepad/gamepad_device_linux.cc," chromium.googlesource.com, accessed June 2026. https://chromium.googlesource.com/chromium/src/+/HEAD/device/gamepad/gamepad_device_linux.cc
- 3.
MDN, "Implementing controls using the Gamepad API," developer.mozilla.org, accessed June 2026. https://developer.mozilla.org/en-US/docs/Games/Techniques/Controls_Gamepad_API
- 4.
Logitech, "Using the input mode switch on the Gamepad F310 to select DirectInput or XInput," support.logi.com, accessed June 2026. https://support.logi.com/hc/en-us/articles/360023398693-Using-the-input-mode-switch-on-the-Gamepad-F310-to-select-DirectInput-or-XInput
- 5.
Microsoft Q&A, "Xbox One Controller Discoverable but Fails to Connect to Windows 11 via Bluetooth," learn.microsoft.com, September 2025. https://learn.microsoft.com/en-us/answers/questions/5569932/xbox-one-controller-discoverable-but-fails-to-connect-to-windows-11
- 6.
Apple Support, "Connect an Xbox wireless game controller to your Apple device," apple.com, January 2026. https://support.apple.com/en-us/111101