Skip to content

Web Controller

hifihedgehog edited this page May 26, 2026 · 25 revisions

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.


Web controller landing page

Setup

1. Turn on the server

  1. On the Dashboard, check the box in the Web Controller section.
  2. PadForge shows a URL (e.g., http://192.168.1.100:8080).

2. Open the URL on your phone

  1. On the phone, tablet, or other device, open any web browser.
  2. Go to the URL PadForge shows.
  3. The landing page loads with the layout choices.

3. Pick a layout

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.

4. Assign the controller to a slot

  1. The browser controller shows up on the Devices page as "Web Controller 1" (or the next free number).
  2. Click the slot badge on the device card to assign it. Same as any physical controller.
  3. Done. Start playing.

Tip: Use your browser's "Add to Home Screen" option for fullscreen mode without the address bar.


Network requirements

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

Server internals

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.

Controller layouts

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.

Xbox 360

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.

DualShock 4

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.

Touchpad

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.

Web controller in use


Touch controls

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.

Connection and latency

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.


Rumble feedback

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.


Known limitation: iOS Safari

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.


Requirements summary

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

Related pages

  • 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.

Clone this wiki locally