# How to use a controller with a browser game

Canonical: https://playable.wtf/guides/browser-game-controller-setup/

Written: 2026-10-17

Pairing a controller is only the first step. The browser must expose it, and the specific game must map its sticks and buttons. Start with a project that documents gamepad support.

## Choose a supported project

[HCEMobile](https://playable.wtf/games/halo-ce-mobile/) documents controller input alongside touch and keyboard controls. [PrinceJS](https://playable.wtf/games/oklemenz-princejs/) documents its own button mappings. [Stunts HD](https://playable.wtf/games/stunts-hd-browser/) describes gamepad steering and triggers. These are useful starting points because the creators explain how to play.

A controller label belongs to the listed implementation. Support in a native edition does not establish support in a browser port of the same game. Check the exact project before preparing game files or inviting another player.

## Connect and activate the pad

Connect over USB or pair through your device’s Bluetooth settings. Open the game in a current browser, bring its tab to the foreground, then press a controller button. Browsers may wait for gamepad interaction before making a connected pad visible to a page.

1. Check that the operating system sees the controller.
2. Activate the game tab and press a button.
3. Open the game’s input settings, if available, and choose its controller mode.
4. Try movement, camera, confirm, cancel and pause before starting a long session.

Keep a keyboard or touch route available for the launcher. A game can support controller gameplay while its file picker or browser permission prompt still needs another input.

## Check what the buttons do

HCEMobile’s guide asks you to pair or plug in the controller and press a button on the start page. It lists Xbox, PlayStation, Switch Pro, MFi and Backbone input. For game-file preparation, use the [Halo version guide](https://playable.wtf/guides/halo-ce-browser-versions/).

PrinceJS maps movement to the stick or D-pad. A/R/ZR performs jump, climb or block; B/Y/L/ZL handles potion, edge-grab or sword actions. Its Plus and Minus buttons change levels, so read the mapping before treating them as an ordinary pause shortcut.

For Stunts HD, the stick or D-pad steers and the triggers drive. The keyboard remains useful for camera and menu commands. Different button labels across controllers make a quick check worthwhile even when a pad is detected.

## If input does not respond

Work through one layer at a time: device connection, active browser tab, then game input settings. Reconnect the pad and press a button again. If the operating system sees it but the game does not, consult that client’s supported-controller notes before assuming a different port’s instructions apply.

If menus work but an action is wrong, look for remapping or an alternate controller backend in the project. Do not use a controller test page as proof of complete game support: detection alone does not validate aiming, triggers, rumble or local multiplayer.

## Project reading

- [MDN · using the Gamepad API](https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API/Using_the_Gamepad_API)
- [HCEMobile · controls](https://hcemobile.com/guide/)
- [PrinceJS · controller mappings](https://github.com/oklemenz/PrinceJS#play-online)
- [Stunts HD · controls](https://github.com/mr-finster/stunts-hd#controls)
