"And we talk of Christ, we rejoice in Christ, we preach of Christ, we prophesy of Christ, and we write according to our prophecies, that our children may know to what source they may look for a remission of their sins." — 2 Nephi 25:26
Glory, honor, and praise to the Lord Jesus Christ, the source of all truth, forever and ever.
PadForge makes any input look like any controller. Plug in a steering wheel. The game sees a PlayStation pad. Use a DualSense. The game sees an Xbox 360. Map your keyboard. The game sees a flight stick. Open a tab on your phone. That tab becomes a gamepad your PC games can use.
Free Windows app. No subscription. No paywall. No nag screens. Built on SDL3, HIDMaestro, OpenXInput, HidHide, Windows MIDI Services, HelixToolkit, WPF UI, and .NET 10.
PadForge is for sim racers running wheels in games that only understand Xbox controllers. For DualSense owners who want adaptive triggers and lightbar effects in Steam games that ignore them. For accessibility users mapping whatever hardware they can use. For anyone whose controller doesn't match what their game expects.
New in 3.2. Rebuilt mapping engine: one virtual output can read from any number of physical sources, with shift layers, cross-device chords, and a drag-and-drop formula editor on top. Gyro overhaul at Steam Input parity (Local / Player / World, real-world calibration, cross-device Aim Engage). Dedicated Impulse Triggers tab for Xbox and DualSense pads (game passthrough, constant force, audio-bass trigger rumble). Custom Expression macro triggers. Lightbar Strobe and Battery modes. Bulk virtual-controller toggle. 2026 Steam Controller supported through the bundled SDL3 fork once Valve's mainline change landed. Full release notes · Wiki.
Powered by HIDMaestro. One driver, 225+ device profiles.
PadForge translates a PS5 DualSense into the Xbox pad a Steam game expects. A Logitech G29 wheel into the gamepad a racing game accepts. A Saitek HOTAS into the gamepad a flight game stubbornly insists on. The game never knows the difference.
One mapping row can read from any number of physical inputs across any number of physical devices. Six combine modes (Strongest, Combined, Average, Either, Both, Only one) plus a drag-and-drop custom formula editor. Cross-device chords so a button on the wheel and a button on the shifter trigger one virtual press.
Each slot can carry extra mapping tables that turn on while a button, chord, or axis is held. Five activation modes (Hold, Toggle, Sticky, Cycle, Custom jump-to). Per-layer color and emoji icon. A Win11-style flyout pops to confirm the active layer the moment it engages.
Reference frames (Local, Player, World). Dual-threshold smoothing. Real-world calibration. A cross-device Aim Engage button. Tuning saves per pad per slot, so the same pad on two slots can feel two different ways. Gyro Pitch / Yaw / Roll bind as first-class sources in the mapping table.
PadForge passes Xbox impulse trigger data straight to the assigned physical Xbox One, Elite, or Series pad. The same data routes to DualSense as Adaptive Trigger Vibration so a DualSense playing Forza buzzes the triggers in step with an Xbox One pad doing the same. Plus audio-bass-driven trigger rumble and a constant trigger force that resumes when the game stops.
Seven adaptive trigger modes with a live preview that draws the resistance curve as you drag. Thirteen lightbar modes, six of them tied to your system audio (three Audio Pulse variants, three Audio Bands variants). The DualSense lights and triggers light up in games that have never heard of a DualSense.
![]() |
![]() |
|---|
PadForge runs a tiny web server. Any device with a browser on your Wi-Fi can load it, pick a layout (Xbox 360, DualShock 4, or multi-touch touchpad), and play. Up to 16 phones at once, each a separate virtual pad. Touch buttons, dual analog sticks, an 8-way D-pad. Rumble feedback through the Vibration API. No app to install on the phone.
No phone handy? Turn on Touchpad Overlay from the Dashboard. A transparent on-screen touch surface pins to any monitor and drives the DS4 or DualSense touchpad directly.
Two sim racers on two wheels at once. A flight stick plus throttle plus rudder pedals as one virtual HOTAS. Mixed gamepad types in one session. Up to 16 controllers. One combo press toggles every virtual controller on or off when you need to step away.
The built-in DSU / Cemuhook server broadcasts gyroscope and accelerometer on UDP port 26760 so emulators can use real motion for Splatoon, Wii titles, 3DS games, and anything else that asks for it. DualSense, DualShock 4, Switch Pro, and the new 2026 Steam Controller sources all work out of the box.
Map sticks to Control Change messages. Map buttons to Note On / Note Off. Set velocity per slot. PadForge creates a real Windows MIDI endpoint through Windows MIDI Services that DAWs (Ableton Live, FL Studio, Reaper), VJ tools, and stage lighting apps can subscribe to. No loopMIDI bridge.
| PadForge | x360ce | XOutput | reWASD | DS4Windows | Steam Input | |
|---|---|---|---|---|---|---|
| Free | ✅ | ✅ | ✅ | $9.99+ | ✅ | ✅ |
| Open source | ✅ | ✅ | ✅ archived | ❌ | ✅ | ❌ |
| Works outside Steam | ✅ | ✅ | ✅ | ✅ | ✅ | only via Add Non-Steam Game |
| Actively developed | ✅ 2026 | no release since Nov 2020 | deprecated 2024 | ✅ v9.4 (2026) | ✅ v3.5 (Feb 2026) | ✅ |
| Xbox 360 virtual output | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Xbox One / Series virtual output | ✅ | ❌ | ❌ | ✅ Xbox One | ❌ | ❌ |
| DualShock 4 virtual output | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ |
| DualSense virtual output | ✅ | ❌ | ❌ | ❌ input only | ❌ | ❌ |
| Switch Pro virtual output | ✅ via HIDMaestro | ❌ | ❌ | ✅ | ❌ | ❌ |
| Flight stick / wheel / HOTAS virtual output (DirectInput) | ✅ 225+ HM profiles | ❌ | ❌ | ❌ | ❌ | ❌ |
| MIDI virtual output | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Keyboard + Mouse virtual output | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ |
| Multi-source per row (one output, many inputs) | ✅ 6 combine modes + formula | ❌ uses per-input Activators | ❌ | |||
| Custom formula editor (arithmetic, logic, if-then-else) | ✅ drag-and-drop operators + 10 starter recipes | ❌ | ❌ | ❌ | ❌ | ❌ |
| Shift layers / modifier overlays | ✅ Hold / Toggle / Sticky / Cycle / Custom | ❌ | ❌ | ✅ up to 10 (Hold / Toggle / Custom) | ✅ Mode Shifts | ✅ Action Set Layers (stackable) |
| Cross-device chords (input on pad A + input on pad B) | ✅ | ❌ | ❌ | ✅ via Group of devices | ❌ | ❌ same controller only |
| Gyro mapping | ✅ Local / Player / World, RWC, Aim Engage | ❌ | ❌ | ✅ since v5.3 (curves, Flick Stick) | ✅ gyro-to-mouse, gyro-to-RS | ✅ |
| Xbox Impulse Trigger passthrough | ✅ + DualSense AT Vibration auto-route | ❌ | ❌ | ✅ Xbox One output only | ❌ | ❌ |
| Constant trigger force | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Audio-bass trigger rumble | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Audio-bass body rumble | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| DualSense Adaptive Triggers | ✅ 7 modes + GameCube preset | ❌ | ❌ | ✅ 11 presets | ❌ | |
| DualSense lightbar | ✅ 13 modes inc. Strobe + Battery | ❌ | ❌ | ✅ 6 modes + Player LED + Mic LED | ||
| HID PID 1.0 force feedback (wheels) | ✅ | ✅ constant + periodic (DirectInput) | ❌ | ❌ | ❌ | |
| DSU / Cemuhook motion server (Cemu, Dolphin, Yuzu) | ✅ | ❌ | ❌ | ✅ port 26760 | ✅ | ❌ |
| Phone as controller | ✅ in-browser, no app install, up to 16 phones at once, touchpad layout included | ❌ | ❌ | ❌ | ❌ | |
| Per-app profile switching | ✅ | ✅ since v4.17.12 (Nov 2020) | ❌ | ✅ Autodetect | ✅ | ✅ per-game by design |
| Max simultaneous virtual controllers | 16 | 4 (hard-coded PAD1-4 in UI) | 4 (UI matches XInput slot indices) | 4 (Slot UI cap) | 4 (Output Slots UI cap) | 1 per physical pad |
| 1000 Hz polling | ✅ | ✅ user-selectable 500 / 1000 Hz | ✅ on USB DS4 | |||
| 3D + 2D controller visualization | ✅ | ❌ | ||||
| Multi-point sensitivity curve editor | ✅ draggable points | ✅ custom 4-point | ✅ response curves | |||
| 2026 Steam Controller support | ✅ via SDL3 fork (NEW!) | ❌ | ❌ | ❌ | ✅ |
Comparison reflects each tool's shipping release at the time of this README. Verified against each project's own docs and source: x360ce v4.17.15.0 changelog; XOutput README + 3.x source; reWASD help.rewasd.com (v9.4); ds4windowsapp/DS4Windows v3.5; Steamworks Documentation (Action Set Layers / Activators / Mode Shifting / Input Source Modes).
- Download
PadForge.exefrom the latest release. - Run it. PadForge always runs elevated, so Windows shows the UAC prompt at startup. The first launch installs HIDMaestro inside that same elevated session.
- Click Add Controller on the Dashboard. Pick Xbox, PlayStation, Extended, MIDI, or Keyboard+Mouse.
- On the new slot, drag a physical device onto it from the sidebar.
- Most controllers auto-map on assign. For the rest, click Map All to walk every button in one pass, or use the Mappings tab to bind one at a time.
- Launch your game. The game sees the virtual controller as real hardware.
Most games "just work" after step 5. If a game sees both your physical and virtual controller at once, install HidHide from Settings → Drivers to hide the physical one.
Polling rate, device count, every virtual controller slot, DSU motion server, web controller server, and driver health on one screen.
Interactive 3D model per profile. Rotate, zoom, pan. Buttons, sticks, and triggers highlight while you press them. Xbox Series profiles add a clickable Share button.
Flat schematic of the same controller, same live state. Useful on small monitors or for streaming overlays.
Record a binding by pressing a button. Pick from a dropdown of every available input (including raw HID buttons past the standard 11). Set Invert, Half-axis, or a per-mapping threshold for axis-to-button activation.
Six deadzone shapes (Scaled Radial, Radial, Axial, Hybrid, Sloped Scaled Axial, Sloped Axial). Per-axis deadzone, anti-deadzone, linear response, center calibration, and a custom sensitivity-curve editor with draggable points.
Floor and ceiling per trigger. Anti-deadzone. Sensitivity curves. Live value bars at 0.1% precision.
Per-motor strength, overall gain, motor swap. Live motor activity bars. Audio Bass Rumble captures system audio, isolates bass through a 48 dB/octave filter, and pushes it to the rumble motors. Music feels physical even when the game is silent.
Seven trigger effect modes. Off, Feedback, Weapon, Vibration, Multi-Position Feedback, Slope, Multi-Position Vibration. A live preview draws the resistance and amplitude curve while you drag Range, Strength, and Frequency. One-click GameCube preset loads parameters that mimic the click of a real GameCube trigger.
Thirteen lightbar modes including three Audio Pulse variants and three Audio Bands variants that react to system audio in real time. Three Input Reactive variants flash on button presses (Random Color, Cycle Through Palette, Base Color). Plus the indicator-LED card for player pattern, mute LED, and brightness.
Combo triggers from buttons, axes, and POV directions. Action sequences with key presses, mouse moves, scroll, delays, system volume, app volume, lightbar overrides, and rumble overrides. Four fire modes (on press, on release, while held, always).
Each profile holds its own mappings, deadzones, force feedback, lighting, and macros. PadForge watches the foreground window and switches profiles automatically when a matching app gains focus. Controller-shortcut combos cycle profiles without touching the keyboard.
Map a controller stick to mouse movement. Map face buttons to WASD. The preview lights up every mapped key and mouse button in real time.
Flight sticks, racing wheels, HOTAS, third-party gamepads. 225+ HIDMaestro profiles plus a Custom mode that builds a HID descriptor from scratch. Up to 8 axes, 128 buttons, 4 POV hats. Configurable VID, PID, and product string.
DualShock 4, DualSense, and DualSense Edge through HIDMaestro. Source gyro, accelerometer, touchpad, and battery passed through to the game.
Channel 1-16. Configurable CC mapping, note mapping, and velocity. Axes send Control Change. Buttons send Note On / Off. No loopMIDI required. PadForge creates its own system endpoint via Windows MIDI Services.
Pick the virtual controller type. Buttons dim when you hit the per-type limit.
Every detected gamepad, joystick, keyboard, and mouse as a card. Live raw axes, buttons, POV compass, and gyro/accelerometer values for the selected device. Per-device HidHide toggle and Force Raw Joystick mode for when SDL3 guesses the gamepad layout wrong.
Connect a phone or tablet over Wi-Fi. Browser shows an Xbox 360 or DualShock 4 layout with virtual sticks, D-pad, triggers, and rumble. Touch the sticks to push them. Tap to click.
Language (10 locales, live-switch with no restart). Theme (System / Light / Dark). Polling interval (1-16 ms). Auto-start at login, minimize to tray, master input-hiding toggle.
- PadForge runs elevated so it can install and manage the HIDMaestro driver. Non-elevated games still read the virtual controllers normally.
- HidHide's device hiding is global per user account, not per-game.
- The MIDI virtual controller needs Windows MIDI Services (Windows 11 24H2 / build 26100 or later). On older systems the MIDI type is hidden.
Windows 10 or 11 on x64. The .NET 10 Desktop Runtime is bundled in the single-file release, so there is nothing else to install.
PadForge installs HIDMaestro on first run. HIDMaestro is the engine that creates virtual controllers. Add a slot and HIDMaestro spins up a HID device matching the controller "shape" you picked.
Two more drivers are optional. PadForge offers to install each one only when you need its feature:
| Driver | Install when |
|---|---|
| HidHide | A game sees both your physical and virtual controller at once |
| Windows MIDI Services | You want the MIDI virtual controller type |
OpenXInput is bundled inside PadForge.exe. No separate install. It filters PadForge's own virtual controllers out of its own XInput view so device enumeration stays clean.
dotnet publish PadForge.App/PadForge.App.csproj -c ReleaseOutput: PadForge.App/bin/Release/net10.0-windows10.0.26100.0/win-x64/publish/PadForge.exe
See BUILD.md for project structure, architecture notes, and developer reference. See the wiki for deeper dives into the input pipeline, virtual controller backends, settings file format, and visualization renderer.
PadForge's controller picker is the set of HIDMaestro profiles that ship with a captured HID descriptor. A few controllers are missing their captures, so they don't appear yet. If you own one of those controllers, you can capture it yourself from inside PadForge. No extra tools, no admin.
To capture and use a profile locally:
- Create or open any Extended-type slot.
- On the Controller page, click Imported profiles… on the Extended config bar.
- Under Connected devices available to import, pick your plugged-in device and click Import.
- The new profile appears in the slot's dropdown with a "(User Generated)" suffix and stays available across every Extended slot from then on.
Profiles live inside PadForge.xml and travel with your settings.
To share a captured profile upstream:
- In the same dialog, select your imported profile under Your imported profiles.
- Click Export… and save the JSON.
- Open a profile contribution issue on HIDMaestro and attach the file. Once merged, the profile ships in the next HIDMaestro release for everyone.
To import a profile someone else captured:
- Click Import from file… in the same dialog and pick the
.jsonthey sent you.
PadForge reads only the HID descriptor during capture. It does not record or forward your controller's input.
PadForge stands on these projects. Please consider supporting them directly.
| Project | Role | License |
|---|---|---|
| x360ce | Original codebase this fork started from | MIT |
| SDL3 | Controller input: joystick, gamepad, and sensor enumeration | zlib |
| HIDMaestro | User-mode UMDF2 virtual HID controller engine with 225+ device profiles | MIT |
| OpenXInput | Drop-in xinput1_4.dll replacement that filters PadForge's own virtual controllers from its own XInput view |
upstream trademark disclaimer |
| Handheld Companion | 3D controller OBJ meshes (Xbox 360, Xbox One, DualShock 4, DualSense) | CC BY-NC-SA 4.0 |
| Gamepad-Asset-Pack | 2D controller PNG schematics (Xbox 360, Xbox One S, Xbox Series, DualShock 4, DualSense) | MIT |
| HelixToolkit | 3D viewport rendering for WPF | MIT |
| WPF UI | Fluent 2 design system for WPF | MIT |
| CommunityToolkit.Mvvm | MVVM data binding framework | MIT |
| HidHide | Per-device hiding driver to prevent double input | MIT |
| Windows MIDI Services | Virtual MIDI device SDK | MIT |
Knowing PadForge is useful is reward enough. If you truly insist on donating, please donate to your charity of choice and bless humanity. If you can't think of one, consider Humanitarian Services of The Church of Jesus Christ of Latter-day Saints. Also consider donating directly to the upstream projects above. They made all of this possible.
My promise: PadForge will never become paid, freemium, or Patreon early-access paywalled. Free means free.
This project is licensed under CC BY-NC-SA 4.0 (Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International).
- 3D controller models adapted from Handheld Companion (CC BY-NC-SA 4.0). Copyright (c) CasperH2O, Lesueur Benjamin, trippyone.
- 2D controller assets from Gamepad-Asset-Pack (MIT), by AL2009man.
- Original codebase forked from x360ce (MIT).
- SDL3 is licensed under the zlib License.
- HIDMaestro is licensed under the MIT License.
- WPF UI is licensed under the MIT License.
- Windows MIDI Services is licensed under the MIT License.
- HidHide is licensed under the MIT License.
- OpenXInput ships only an upstream Microsoft-trademark disclaimer (no OSS license grant). Redistributed as-is under the same terms.
See LICENSE for the full license text.

