-
Notifications
You must be signed in to change notification settings - Fork 5
Web Controller
Any device with a web browser becomes a game controller for your PC.
Open the URL PadForge shows on the Dashboard from a phone, tablet, or another networked device. The tab shows up on the Devices page as a real input device, ready to assign to any slot.
Useful for an extra controller, a phone as a second pad, or touchscreen play on a tablet.

- On the Dashboard, check the box in the Web Controller section.
- PadForge shows a URL (e.g.,
http://192.168.1.100:8080).
- On the phone, tablet, or other device, open any web browser.
- Go to the URL PadForge shows.
- The landing page loads with the layout choices.
Tap Xbox 360, DualShock 4, or Touchpad.
- Xbox 360 and DualShock 4 send the same button and axis codes. The choice is visual.
- Both gamepad layouts use the same 2D art the desktop view renders. Trigger silhouettes sit behind the body PNG and the press-fill draws on top when you pull a trigger.
- Touchpad is a multi-touch surface that drives the DS4 touchpad on whichever PlayStation slot it is assigned to.
- The browser controller shows up on the Devices page as "Web Controller 1" (or the next free number).
- Click the slot badge on the device card to assign it. Same as any physical controller.
- Done. Start playing.
Tip: Use your browser's "Add to Home Screen" option for fullscreen mode without the address bar.
The phone or tablet and the PC must be on the same local network (the same Wi-Fi, usually).
| Requirement | Details |
|---|---|
| Port | TCP 8080 (default), settable on the Dashboard |
| Firewall | PadForge creates a Windows Firewall rule on first run. Third-party firewalls may need a manual TCP 8080 allow rule. |
| Max clients | 16 browser tabs at once |
Can't reach the URL?
- Confirm both devices share the same Wi-Fi network
- Confirm the firewall allows port 8080
- Try a different port if 8080 is already in use
The web controller is built into PadForge. No extra service or app to install.
- HTTP serves the landing page, layout pages, and PNG art on TCP 8080.
- WebSocket carries live input and rumble updates over the same port.
- Both run in-process. Stopping PadForge stops the server.
Both gamepad layouts use the same 2D artwork the desktop ControllerModel2DView renders. Trigger silhouettes sit behind the body PNG. The active press-fill draws on top.
Full layout: A / B / X / Y, LB / RB, Back / Start / Guide, 8-way D-pad, dual analog sticks with L3 / R3 click, LT / RT triggers.
Full layout: Cross / Circle / Square / Triangle, L1 / R1, Share / Options / PS, 8-way D-pad, dual analog sticks with L3 / R3 click, L2 / R2 triggers, TouchpadClick.
The DS4 layout sends TouchpadClick as {type: "input", kind: "button", code: 16, value: 1} (release sends value: 0). Every button / axis / POV event uses that wrapping shape. The top-level type is always "input" for input events. The kind field is "button", "axis", or "pov". Code 16 is PadForge's internal state.Buttons[] slot for the touchpad-button signal, the same slot SDL_GAMEPAD_BUTTON_TOUCHPAD resolves to inside PadForge's reordered button layout (see CustomInputState in the engine library for the full 0-21 index reference). Standard face / shoulder / stick / system buttons use codes 0-10. Codes 11-15 carry MISC1 and the four paddles when the assigned slot's source pad exposes them.
Both gamepad layouts send identical button and axis codes. Switch layouts at any time by going back to the landing page.
A multi-touch surface that maps straight to the DualShock 4 / DualSense touchpad on the assigned PlayStation slot. Use it as a second input device when a phone or tablet is already in another player's hands and the DS4 / DS5 touchpad is the missing piece. No buttons or sticks, touchpad input only.
The same surface also drives every Touchpad-tab feature on the slot it's assigned to: virtual mouse (Mouse Output), virtual analog stick or D-pad (Stick / D-Pad Output), and the gesture stack. Each slot the phone is assigned to carries its own toggles and tuning.

| Control | Behavior |
|---|---|
| Buttons | Tap to press. Touch zones are larger than the visible art for easier targeting on small screens. |
| Analog sticks | Drag inside the stick zone to move. Release to re-center. Stick click (L3 / R3): tap and release within 200 ms with little movement. |
| D-pad | Touch and drag toward a direction. All 8 directions (cardinal and diagonal). |
| Triggers | Tap to send a full press. Release to return to zero. |
The web controller uses a WebSocket for low-latency, persistent two-way communication. Input updates send right away on touch events.
| Status | Meaning |
|---|---|
| Connected | Active connection. Input reaches PadForge. |
| Disconnected | Connection lost. Tap to reconnect. |
Latency: expect 5-15 ms more than a wired controller over home Wi-Fi. Fine for casual, puzzle, and platform games. Fast competitive play may feel a touch less responsive.
Reconnection: each browser tab keeps a persistent pad ID. A brief disconnect (phone screen lock) does not change the device identity or slot assignment. No reassignment needed.
PadForge forwards vibration commands to the browser via the Vibration API. Works on phones and tablets with vibration motors. Chrome on Android handles it well. Safari on iOS does not.
iOS Safari has a bug where a WebSocket upgrade fails on the first page load if the page was reached through link navigation. The connection works after a reload.
The web controller pages include an auto-reload snippet that detects the first navigation and refreshes the page once, using sessionStorage to keep it from looping. You will see one quick refresh after tapping a layout link on iOS. That is expected. The controller works normally after it.
Chrome, Firefox, Edge, and Chrome on Android are not affected.
| Requirement | Details |
|---|---|
| Network | PC and device on the same local network (Wi-Fi) |
| Port | TCP 8080 (default), not blocked by the firewall |
| Orientation | Landscape required. A warning shows in portrait. |
| Browser | Any current browser (Chrome, Safari, Firefox, Edge) |
| Touch | Touchscreen recommended for analog stick and multi-touch input |
| Max clients | 16 browser tabs at once |
- Dashboard: turn on and configure the web controller server.
- Devices: see the web controller card and assign it to a slot.
- Controller Slots: create a virtual controller for the web controller to feed.
- Settings: configure the web controller port.
- Troubleshooting: help with connection issues.
- 3D and 2D Visualization: the same PNG assets power both the web controller and the desktop 2D view.