Settings¶
Language, theme, engine timing, window behavior, drivers, and the settings file on disk all live on one page in the sidebar.

Language¶
A dropdown at the top of the page lists each language under its own name, with its English name beside it when the two differ. Typing jumps to a language by its own name. Changes apply right away. No restart. The picked language saves and comes back on the next launch.

With no language picked, PadForge follows the Windows display language: its own translation, else the one its speakers read. Austrian German reads German, Taiwanese Chinese reads Traditional Chinese, and Norwegian Bokmål and Nynorsk read Norwegian. English reads British English in the regions whose English follows British conventions, such as the United Kingdom, Ireland, Australia, New Zealand, India and South Africa, and American English everywhere else. A language with no translation shows American English.
The interface comes in 109 languages, 42 of them complete. A partial translation shows English wherever it has no string: its translator left out what could not be worded correctly rather than make it up. British English holds only the strings it writes differently and reads the American text for the rest. No native speaker has reviewed the translations.
Arabic, Central Kurdish, Persian and Urdu lay the interface out right to left. Controller drawings, curves and other pictures keep their left-to-right layout, so a left stick stays on the left. The touchpad overlay, the on-screen menus and the light gun's calibration window stay left to right whole.

| Language | Own name | Tag | Strings |
|---|---|---|---|
| Afrikaans | Afrikaans | af |
3660 of 3841 |
| Albanian | Shqip | sq |
3785 of 3841 |
| Amharic | አማርኛ | am |
3802 of 3841 |
| Arabic | العربية | ar |
3840 of 3841, right to left |
| Armenian | Հայերեն | hy |
3799 of 3841 |
| Basque | Euskara | eu |
3831 of 3841 |
| Belarusian | Беларуская | be |
all |
| Bengali | বাংলা | bn |
all |
| Bikol | Bikol | bik |
787 of 3841 |
| Bislama | Bislama | bi |
1107 of 3841 |
| Bulgarian | Български | bg |
all |
| Burmese | မြန်မာ | my |
3829 of 3841 |
| Cantonese (Traditional) | 廣東話(繁體) | zh-HK |
all |
| Cape Verdean Creole | Kabuverdianu | kea |
2263 of 3841 |
| Catalan | Català | ca |
3839 of 3841 |
| Cebuano | Cebuano | ceb |
2835 of 3841 |
| Central Kurdish | کوردیی ناوەندی | ckb |
3825 of 3841, right to left |
| Chichewa | Chichewa | ny |
887 of 3841 |
| Chinese (Pinyin) | Hànyǔ Pīnyīn | zh-Latn |
3758 of 3841 |
| Chinese (Simplified) | 中文(简体) | zh-Hans |
all |
| Chinese (Traditional) | 中文(繁體) | zh-Hant |
all |
| Chuukese | Fosun Chuuk | chk |
365 of 3841 |
| Croatian | Hrvatski | hr |
3838 of 3841 |
| Czech | Čeština | cs |
all |
| Danish | Dansk | da |
all |
| Dutch | Nederlands | nl |
all |
| English (United Kingdom) | English (United Kingdom) | en-GB |
all |
| English (United States) | English (United States) | en-US |
all |
| Estonian | Eesti | et |
3837 of 3841 |
| Fiji Hindi | Fiji Hindi | hif |
583 of 3841 |
| Fijian | Vosa Vakaviti | fj |
424 of 3841 |
| Finnish | Suomi | fi |
all |
| French | Français | fr |
all |
| Georgian | ქართული | ka |
3825 of 3841 |
| German | Deutsch | de |
all |
| Greek | Ελληνικά | el |
all |
| Guarani | Avañeʼẽ | gn |
771 of 3841 |
| Gujarati | ગુજરાતી | gu |
3829 of 3841 |
| Haitian Creole | Kreyòl ayisyen | ht |
3217 of 3841 |
| Hawaiian | ʻŌlelo Hawaiʻi | haw |
613 of 3841 |
| Hiligaynon | Hiligaynon | hil |
1009 of 3841 |
| Hindi | हिन्दी | hi |
all |
| Hmong | Hmoob | hmn |
946 of 3841 |
| Hungarian | Magyar | hu |
all |
| Icelandic | Íslenska | is |
all |
| Igbo | Igbo | ig |
829 of 3841 |
| Ilocano | Ilokano | ilo |
748 of 3841 |
| Indonesian | Bahasa Indonesia | id |
all |
| Italian | Italiano | it |
all |
| Japanese | 日本語 | ja |
all |
| Kannada | ಕನ್ನಡ | kn |
3808 of 3841 |
| Kazakh | Қазақша | kk |
3834 of 3841 |
| Khmer | ភាសាខ្មែរ | km |
3834 of 3841 |
| Kinyarwanda | Ikinyarwanda | rw |
1223 of 3841 |
| Korean | 한국어 | ko |
all |
| Lao | ລາວ | lo |
3819 of 3841 |
| Latvian | Latviešu | lv |
all |
| Lingala | Lingála | ln |
1238 of 3841 |
| Lithuanian | Lietuvių | lt |
3834 of 3841 |
| Luganda | Luganda | lg |
431 of 3841 |
| Luxembourgish | Lëtzebuergesch | lb |
3815 of 3841 |
| Macedonian | Македонски | mk |
all |
| Malagasy | Malagasy | mg |
1461 of 3841 |
| Malay | Bahasa Melayu | ms |
3835 of 3841 |
| Malayalam | മലയാളം | ml |
3804 of 3841 |
| Maltese | Malti | mt |
3770 of 3841 |
| Marathi | मराठी | mr |
3819 of 3841 |
| Mongolian | Монгол | mn |
3819 of 3841 |
| Māori | Te Reo Māori | mi |
1284 of 3841 |
| Nepali | नेपाली | ne |
all |
| Northern Sotho | Sepedi | nso |
732 of 3841 |
| Norwegian | Norsk | no |
all |
| Oromo | Afaan Oromoo | om |
1402 of 3841 |
| Papiamento | Papiamentu | pap |
1912 of 3841 |
| Persian | فارسی | fa |
all, right to left |
| Polish | Polski | pl |
all |
| Portuguese (Brazil) | Português (Brasil) | pt-BR |
all |
| Portuguese (Portugal) | Português (Portugal) | pt-PT |
3839 of 3841 |
| Quechua (Bolivia) | Qhichwa (Bolivia) | quh |
989 of 3841 |
| Romanian | Română | ro |
all |
| Russian | Русский | ru |
all |
| Samoan | Gagana Sāmoa | sm |
782 of 3841 |
| Serbian | Српски | sr |
all |
| Sesotho | Sesotho | st |
639 of 3841 |
| Shona | ChiShona | sn |
872 of 3841 |
| Sinhala | සිංහල | si |
3795 of 3841 |
| Slovak | Slovenčina | sk |
all |
| Slovenian | Slovenščina | sl |
all |
| Spanish | Español | es |
all |
| Swahili | Kiswahili | sw |
3769 of 3841 |
| Swedish | Svenska | sv |
all |
| Tagalog | Tagalog | fil |
3652 of 3841 |
| Tamil | தமிழ் | ta |
all |
| Telugu | తెలుగు | te |
all |
| Thai | ไทย | th |
all |
| Tok Pisin | Tok Pisin | tpi |
1246 of 3841 |
| Tongan | Lea faka-Tonga | to |
444 of 3841 |
| Tswana | Setswana | tn |
673 of 3841 |
| Turkish | Türkçe | tr |
all |
| Twi | Twi | tw |
416 of 3841 |
| Ukrainian | Українська | uk |
3835 of 3841 |
| Urdu | اردو | ur |
all, right to left |
| Vietnamese | Tiếng Việt | vi |
all |
| Waray | Winaray | war |
903 of 3841 |
| Welsh | Cymraeg | cy |
3814 of 3841 |
| Western Armenian | Արեւմտահայերէն | hyw |
3794 of 3841 |
| Xhosa | IsiXhosa | xh |
1174 of 3841 |
| Yoruba | Èdè Yorùbá | yo |
1351 of 3841 |
| Zulu | IsiZulu | zu |
1819 of 3841 |
Corrections and new translations land as pull requests. tools/l10n/check_translation.py checks a translation against the rules every file in the tree passes: placeholders, line breaks, digits, the names that stay in Latin letters, and decimal numbers written with a period.
Profile Shortcuts dropdowns keep their picked value when you switch language. See Profiles.
Appearance¶
Theme¶
| Option | Behavior |
|---|---|
| System Default | Follows your Windows theme, read at launch and again whenever you re-pick this option. |
| Light | Always light. |
| Dark | Always dark. |
Changes apply right away.
Show Welcome Tour¶
Re-runs the first-run welcome tour, the spotlight walkthrough that points out the main areas of the app. Click it any time you want the tour again.
The 2D-versus-3D controller view is set on the Pad page, not here. See 3D and 2D Visualization.
Window¶
Controls how PadForge acts as a Windows app. Five switches here. Combine them with Auto-Start Engine on Launch (in the Input Engine card below) for a fully background install.
Minimize to System Tray¶
Sends PadForge to the notification area instead of the taskbar when you minimize. Double-click the tray icon to bring the window back.
Close to System Tray¶
Keeps PadForge running when you click the window's close button or press Alt+F4. The window hides in the notification area and the engine keeps going. Double-click the tray icon or pick Show PadForge to bring the window back, and pick Exit in its menu to quit.
Always Show in System Tray¶
Keeps the tray icon visible while the window is open, so Show PadForge and Exit in its menu are always one click away. Off by default. Pair it with Close to System Tray to quit from the tray without closing the window first.
Start Minimized¶
Opens PadForge minimized to the taskbar. Combine with Minimize to System Tray for a launch with only a tray icon.
Start at Login¶
Registers a logon scheduled task so PadForge runs when you log into Windows. PadForge is elevated, and Windows will not launch an elevated app from a Startup-folder shortcut, so the task runs it at highest privileges with no UAC prompt.
Hands-off setup: turn on Auto-Start Engine on Launch, Start Minimized, Minimize to System Tray, and Start at Login. PadForge launches at login, starts the engine, and sits in the tray. Virtual controllers are live by the time you open a game.
Updates¶

Checks GitHub for new versions of PadForge and installs them from here.
- Check for Updates Automatically is on by default. It checks 20 seconds after launch and every 12 hours after that.
- Install Updates Automatically downloads a new version in the background and installs it the next time PadForge starts. It shows only while the automatic check is on.
- Include Pre-Releases also offers the dev build of the latest commit.
- Check Now checks right away. Install and Restart and Release Notes appear once a newer version is found.
PadForge contacts only GitHub, and the only data it sends is its own version number. Updates covers what an install does, pre-releases, and every message the card can show.
Input Engine¶
Controls the polling loop that reads physical controllers, runs mappings and deadzones, and writes the virtual controllers.
Auto-Start Engine on Launch¶
Starts the engine when PadForge opens. Off means you start it by hand from the Dashboard power button.
Turn it off if you want PadForge to open without making virtual devices live.
Continue Polling When Window Loses Focus¶
Keeps the engine running when PadForge is not the foreground window.
Leave this on. Without it, the engine stops the moment you tab into a game and virtual controllers go dead. Turn it off only if you use PadForge as a passive diagnostic.
Flydigi Enhanced Protocol¶
Turns on the extra buttons and motion sensors that supported Flydigi controllers expose beyond their standard gamepad report.
If Flydigi's own software is running, PadForge says so on the device. Both can hold the same controller interface, and a Vader 5 Pro has been reported dropping and reconnecting repeatedly while both had access. Stop the Flydigi service while using PadForge, or keep the controller hidden and take the service out of the HidHide whitelist.
Read Logitech G-Keys¶
Reads the G-keys and extra mouse buttons on Logitech gaming gear through the vendor's G-key SDK, and presents them as their own device row. See Logitech G-Keys.
The SDK ships with Logitech Gaming Software 8.55 or later, not with G HUB. The status line under the checkbox says which step is missing: no SDK on the machine, a registered SDK whose file is gone, an SDK that was found and would not load, a library that loaded but is not the G-key SDK, or an SDK that refused to start because Logitech Gaming Software is not running. Once it connects, the line counts key events.
Two steps happen in Logitech Gaming Software, not in PadForge. Drag the G-key command onto each key in the PadForge profile there, or the key never reports. Then make that profile the persistent profile, or the keys only reach PadForge while its window is in front. Logitech's profiles have nothing to do with PadForge's own profiles.
Read Analog Keyboards¶
Reads how far every key is pressed on analog and Hall effect keyboards, and gives each supported keyboard its own device row. It is off by default. See Analog Keyboards for the keyboards it reads.
Most keyboards are read over the channel their own configurator uses, so close the configurator while this is on. Razer keyboards report only while Razer Synapse runs, and a Razer keyboard waiting for Synapse says so on its own row's panel on the Devices page. The status line under the checkbox says when no supported keyboard was found.
Read Bliss-Box Adapters¶
Talks to Bliss-Box adapters through their API, so PadForge knows the controller in each port, reads a DualShock 2's pressure, rumbles through the adapter's own motor commands, and offers the Dreamcast screen, Controller Pak and player number actions in the port's detail pane on the Devices page. It is off by default. See Bliss-Box Adapters.
Close the Bliss-Box API Tool and DeviceBuddy while this is on, since they talk to the adapter over the same channel. While it is on, each port reads in the adapter's own layout instead of through SDL's gamepad mapping, so map a port again after turning it on or off. Each port's row names the controller in it. The status line under the checkbox says when no port was found.
Polling Interval¶
How often the engine reads input, in milliseconds. Default: 1 ms (~1000 Hz).
| Value | Frequency | Fits |
|---|---|---|
| 1 ms | ~1000 Hz | Competitive play, lowest latency (default) |
| 2 ms | ~500 Hz | Responsive, a bit lower CPU |
| 4 ms | ~250 Hz | Balanced for most games |
| 8 ms | ~125 Hz | Casual play, real CPU savings |
| 16 ms | ~60 Hz | Lowest CPU, matches 60 fps |
Lower means quicker reads and more CPU. Higher means slower reads and less CPU. Most users should leave the default. Raise it when CPU is tight or the machine runs on battery.
A number field with up / down arrows. Range: 1-16 ms.
While the active profile sets its own polling rate, that rate applies instead, and a note under the field names the profile and its rate. See Profiles.
Inactivity Timeout¶
Seconds a virtual controller stays alive after all of its mapped physical devices go offline. Default: 60 s. Set to 0 to disable (the controller stays around indefinitely). One timeout governs every virtual controller type: Xbox, PlayStation, Nintendo, Extended, VR, Keyboard + Mouse, and MIDI.
When a slot's mapped pads disconnect (laptop sleeps, USB hub unplugged, battery dies), PadForge holds the virtual controller open for this many seconds. If the devices come back, the controller stays in place. If not, PadForge tears it down to free its kernel slot (the XInput slot, for Xbox types). Surviving controllers of the same type then re-bind to lower kernel slots so the order stays contiguous, and shift back as slots reactivate. Slot configuration is kept either way. Plug the devices back in and the virtual controller comes back on its own.
Range: 0–3600 seconds.
Assignment Prompts¶
When a device connects while a virtual controller's page is open, PadForge can offer to assign it there. A banner appears under the device bar with the device's name, an Assign button, and Not Now. Nothing is assigned until you click Assign. Keyboards, keyboard screens, mice, touchpads, and media keys are never offered.

- Offer New Devices to the Open Virtual Controller fires only for a device PadForge has never seen before. Devices it already knows connect without a prompt.
- Offer Any Connecting Device When the Open Virtual Controller Has No Devices fires for any device, new or already known, as long as the open virtual controller has nothing assigned yet. Once it has a device, this prompt no longer appears.
Assign runs the same path as dragging the device onto the slot: the auto-map, input hiding defaults, and the Mappings tab refresh all happen exactly as they do for a dropped device. Not Now dismisses that device for that slot until PadForge restarts. Neither prompt fires on startup or when the engine restarts, since both re-enumerate every device at once.
PadForge never assigns a device on its own. Sim rigs and arcade setups carry many devices with no obvious home for each, so the app only ever offers, and both offers can be switched off here.
Handheld PC Buttons¶
Enable Handheld PC Buttons is off by default, and off means nothing runs. On, the Devices page gains a row for the paddles, menu keys and hotkeys a handheld gaming PC or laptop hides from games, learned by pressing each one once, and a row for the machine's own gyroscope when Windows reports one. See Handheld PC Buttons.
Keyboard Screens¶
Drive Keyboard Screens is off by default. On, PadForge draws on the screens built into Logitech's GamePanel keyboards and the G19, on a phone through Logitech Arx Control, and on the Mad Catz S.T.R.I.K.E. 7's touchscreen, and the Devices page gains a row for each screen. A screen's row sets what it shows and carries the keys beside it. Turning the switch off gives a G19 screen PadForge bound to WinUSB back to Windows. See Keyboard Screens.
While the engine runs, the card names only what the feature as a whole is missing: the Arx Control or S.T.R.I.K.E. 7 library, or any screen at all. Download Strike7API.dll, Choose Strike7API.dll… and Install Visual C++ 2008 Runtime get the S.T.R.I.K.E. 7's library and the runtime it needs.
Novint Falcon¶
Drive Novint Falcon is off by default. On, PadForge opens each Novint Falcon through Force Dimension's SDK, which you install from Force Dimension, and the Devices page gains a row for each one. An open Falcon belongs to PadForge alone, so FalconJoyForce and Force Dimension's own tools cannot open it, and turning the switch off closes every Falcon. See Novint Falcon.
While the engine runs, the card names the library that loaded, and when no Falcon opened, why. Each open Falcon's line and its Calibrate Reach are on its row's panel on the Devices page. Choose dhd64.dll… loads a copy of Force Dimension's library you pick in place of any other, within a few seconds, and a Falcon open on another copy opens again on it. Install Falcon Driver shows for a Falcon with no driver and installs Force Dimension's from the SDK folder. Get Force Dimension's SDK opens Force Dimension's download page.
Battery Alerts¶
Get notified when a controller's battery runs low, before it dies mid-game.
- Notify When Battery Runs Low turns the alerts on.
- Notify at or Below sets the percentage that triggers one.
- Also Vibrate the Controller adds a buzz on the pad itself, so the warning reaches you without looking at the screen.
- Test Notification sends a sample alert at the threshold level through the same path, so you can check it without draining a battery.
The same rumble drives identify: buzzing a device is how you tell which of several identical pads is which.

Driver Management¶
Five driver cards. Each card has an ember flame beside its status text (lit when installed, an unlit outline when not). HidHide also shows the installed version, and HIDMaestro and BthPS3 the version PadForge carries.
- HidHide Driver card: Install and Uninstall buttons.
- HIDMaestro Driver card: the installed state and an Uninstall button. The driver installs itself the first time you create a virtual controller and is required for every Xbox / PlayStation / Nintendo / Extended / VR slot. Uninstall shows what HIDMaestro left on the PC, then stops the engine and removes it. See Driver Management.
- BthPS3 Bluetooth Driver card: the installed state and an Uninstall button. BthPS3 lets PlayStation 3 controllers, the PlayStation Move and the Navigation controller connect over Bluetooth, and installs itself the first time one of them is paired. Uninstall shows what BthPS3 left on the PC, then stops the engine and removes it. See Driver Management.
- Windows MIDI Services card: the API PadForge uses (Built into Windows, App SDK Runtime with the runtime's version, or Legacy MIDI API), or Not Running with the reason: the Windows MIDI service did not respond, a MIDI driver did not respond, or the runtime's uninstaller is still running. Under Legacy MIDI API the card names the error when the API built into Windows is registered but did not start. A Windows MIDI Services API that did not start when PadForge first checked is taken later, once it starts, with nothing restarted. Install shows on Windows 11 24H2 or later while Windows has no API of its own and no runtime is installed, and installs PadForge's build of the Windows MIDI Services runtime. Uninstall shows while a runtime is installed. See Driver Management.
- SteamVR card: needed only for VR slots. It describes itself as VR runtime for virtual VR controllers. Installs from Valve's servers with no Steam account or Steam client needed (several GB).
PadForge is already elevated from its startup UAC prompt, so the Install / Uninstall buttons run their installer in the same elevated session without a second prompt.
Driver summary¶
| Driver | What it does | When to install |
|---|---|---|
| HidHide | Hides physical controllers from games so they only see the virtuals. Stops double input. | Games see both the physical and the virtual. |
| HIDMaestro | Single user-mode driver that creates Xbox, PlayStation, Nintendo (Switch Pro and Switch 2 Pro), and Extended (DirectInput) virtual controllers, and the virtual keyboards and mice of a Keyboard+Mouse slot. 337 device profiles, of which PadForge offers 239 that carry a HID descriptor. Replaces ViGEmBus and vJoy in v3. | Installs itself the first time you create an Xbox, PlayStation, Nintendo, Extended, or VR slot, or set a Keyboard+Mouse slot to a keyboard or mouse model. Required for those five slot types and those models. |
| BthPS3 | Bluetooth drivers for PlayStation 3 controllers, the PlayStation Move and the Navigation controller: a profile driver and a filter on the PC's Bluetooth. | Installs itself the first time one of those controllers is paired for Bluetooth. |
| Windows MIDI Services | Gives each MIDI slot a port of its own and reads MIDI inputs. Part of Windows 11 25H2 from the late-November 2026 update. Without it, MIDI runs on the legacy MIDI API, where slots send to a port you pick. | On 24H2 or later before Windows carries the API, click Install on its card for the runtime. |
| SteamVR | Valve's VR runtime. PadForge fetches it directly, with no Steam account and no Steam client. | You want a VR slot. The VR tile stays disabled without it. |
Uninstall guards¶
PadForge blocks four driver uninstalls until you clear what still depends on them.
- HidHide stays locked while any device still has the cloak armed. Disarm the cloak on the Devices page first.
- Windows MIDI Services (the runtime) stays locked while any slot still outputs MIDI through it. Delete those slots or switch them to another output on the Controller Slots page first. When the API built into Windows or the legacy MIDI API runs MIDI, the slots do not hold the runtime.
- SteamVR stays locked while any VR slot exists. Delete those slots or switch them to another type first.
- BthPS3 waits while a PlayStation controller is connected over Bluetooth. Turn the controller off, then select Refresh. Its drivers stay while DsHidMini is installed, since DsHidMini needs them.
The HidHide, MIDI and SteamVR guards read the slots you have saved rather than what the engine is currently running, so they hold with the engine stopped, which is when most people go tidying up drivers. Switching a slot's type releases the old type's driver and locks the new one straight away.
The SteamVR card¶

Before installing, the card offers an Install Location. It defaults to C:\SteamVR and takes any full path on any drive. A bare drive root is refused, because the uninstall side deletes the recorded directory and pointing that at an entire drive is not a mistake worth allowing.
Uninstall appears only for an install PadForge itself created. PadForge works that out by checking whether it recorded the path and whether Steam's own registry entries point at the same folder. A SteamVR installed through the Steam client belongs to Steam, shows no Uninstall button here, and is never touched. The uninstall also stays disabled while any VR slot exists, and refuses while SteamVR is running.
SteamVR keeps its own log and settings inside the folder you chose, as logs and config subfolders. Removing the install takes them with it.
When another OpenVR driver is registered under HIDMaestro's driver name, the card warns: "Another OpenVR driver uses HIDMaestro’s driver name, so SteamVR can load it in place of PadForge’s and the virtual VR controllers will not appear. Remove that driver to clear this:" and lists that driver's folders, one per line. OpenVR loads one driver per name, so the VR slot's controllers would otherwise fail with nothing else to show for it. PadForge takes the list from HIDMaestro's HMVR.FindDriverNameConflicts (HIDMaestro 1.12.0), which reads SteamVR's driver registrations and changes nothing, at most every ten seconds.
Hide Devices from Games¶
This checkbox sits inside the HidHide Driver card. It only shows when HidHide is installed. Master switch for input hiding. Two pieces sit under it.
- HidHide cloaking makes physical controllers invisible to games at the OS level.
- Input hook suppression stops mapped raw inputs reaching other input APIs.
On (default) means the per-device hide toggles on the Devices page do what they say. Off forces every controller visible no matter what the per-device toggles are set to. Use it as a panic button.
Keep Devices Cloaked Between Launches¶
The second checkbox in the HidHide Driver card, also shown only when HidHide is installed.
Off (default) clears every HidHide cloak when PadForge exits, so other sessions see your controllers normally.
On leaves the cloaks in place between launches. Pick this when another app (Steam launching after PadForge exits, for example) scans for pads while PadForge is closed and you want it to keep seeing the physical controllers as hidden. The next PadForge start re-asserts the cloaks with no visible flicker.
Flipping Hide Devices from Games off still decloaks right away, no matter what this is set to.
HidHide Whitelisted Applications¶
When HidHide is installed, a Whitelisted Applications section drops in under its card. The whitelist picks which apps can still see hidden controllers.
PadForge whitelists itself. You may also want to whitelist:
- Other controller-config tools
- Emulators that read raw hardware
- Diagnostic apps like joy.cpl
| Button | Action |
|---|---|
| Add... | Browse for an .exe. That program sees physical controllers even when hidden. |
| Remove | Drops the selected entry. PadForge is whitelisted automatically and never appears here, so there is nothing of its own to preserve. |


For full driver detail see Driver Management.
MIDI Configuration¶
When a slot outputs MIDI, its config bar shows:
| Setting | What it does |
|---|---|
| Channel | MIDI channel (1-16). |
| CC Count | Number of Control Change outputs. How many axes send CC. Clamped so the highest CC stays within range, so the max is 128 minus Start CC (128 only when Start CC is 0). |
| Start CC | Base CC number (0-127). Axis CCs count up from here. |
| Note Count | Number of Note outputs. How many buttons send Note messages. Clamped so the highest note stays within range, so the max is 128 minus Start Note (128 only when Start Note is 0). |
| Start Note | Base note (0-127, 60 = Middle C). Button notes count up from here. |
| Velocity | Note On velocity (1-127). Higher = louder. |
Under Windows MIDI Services, PadForge creates one virtual MIDI device per slot, with no port to pick. Under the legacy MIDI API the bar adds Output Port, and the slot sends to the existing port picked there. Different slots can target different channels.
Community Configs¶

Controls the Steam Workshop Config Import feature: browsing community-made Steam Input controller configs and translating them into PadForge profiles.
Enable Community Configs¶
The master opt-in, off by default. PadForge sends nothing to Steam until you check it.
With it on, PadForge connects directly to Steam, and only when you act (a search, opening a config, or the update check below). The servers are all Steam's own: store.steampowered.com, api.steampowered.com and the connection servers it names, steamcommunity.com, cdn.steamusercontent.com, cdn.cloudflare.steamstatic.com, and avatars.fastly.steamstatic.com. PadForge sends your search text, the ids of the games, configs and creators involved, and its version number. The anonymous Steam logon also sends the OS type, a language, and a machine id built from SHA-1 hashes of the Windows machine GUID, the physical network adapters' MAC addresses and the boot disk serial. No telemetry, no third-party service, no Steam sign-in. Steam Workshop Config Import says what each server receives.
The Browse Community Configs button on the Profiles page works either way. With the opt-in off, its dialog opens on an explanation panel and offers the enable step there.
Show Legacy Workshop Configs¶
Appears once the opt-in is on. Configs from before 2017 have no downloadable file on Steam's servers, so PadForge lists them with a LEGACY badge and reads them through your Steam install instead. Off by default. See Legacy configs.
Clear Cached Configs¶
Empties the local Workshop cache (search results, config files, artwork) at %LOCALAPPDATA%\PadForge\SteamWorkshopCache. No confirmation, and nothing of value is lost: the cache refills as you browse. Imported profiles live in PadForge.xml, not the cache, and survive a clear. The status bar confirms with "Workshop cache cleared".
Check Imported Profiles for Updates¶
Asks Steam whether any config you imported has been updated since the import, in one query.
| Outcome | What you see |
|---|---|
| Everything current | Status bar: "Imported profiles are up to date (3 checked)". |
| Updates found | A Workshop Updates dialog lists each stale profile and its config, with Browse Community Configs as the re-import route. |
| No imported profiles | Status bar: "No profiles imported from the Steam Workshop yet". |
| Opt-in off | Status bar: "Enable Community Configs to check for updates". Nothing is sent. |
Settings File¶
Every slot, mapping, deadzone, profile, macro, and preference lives in one XML file: PadForge.xml.
Location¶
The full path shows at the top of this section. Use it to back up, copy between machines, or share for bug reports.
Buttons¶
| Button | Action | When to use |
|---|---|---|
| Save | Writes the in-memory config to disk. | Force-save, or confirm changes hit disk. |
| Reload | Throws out in-memory changes, re-reads from disk. | Undo since last save, or pick up an external edit. |
| Reset to Defaults | Restores factory defaults. | Last resort for a broken config. No undo. |
| Open Folder | Opens the config folder in Explorer. | Backup or sharing. |
If unsaved changes exist, an orange "Unsaved Changes" warning sits under the buttons.
Auto-save¶
Most settings auto-save on their own. A change reaches the engine within ~250 ms, and the file on disk is written after about 2 seconds of quiet, one write per editing burst. You do not need to click Save after every change.
The Save button is there for two cases.
- Force-save before a risky operation.
- Batch-save after a rapid run of changes.
Diagnostics¶
Version information, plus engine event logging for troubleshooting.

Version info¶
| Field | Description |
|---|---|
| App Version | PadForge's version and build, for example 4.5.3 (r3682@176208e): the version, the commit count and the short commit hash. A build made without git shows the version alone. |
| .NET Runtime | .NET runtime in use |
| SDL Version | SDL3 library version |
Paste these into any issue you file.
Keep a Diagnostics Log¶
Off by default. A healthy install writes no log.
Ticking it writes engine events continuously to diagnostics.log, in the
folder shown under the checkbox, which is the folder PadForge runs from.
The setting persists, so it survives a restart and covers sessions that
start with Windows. That matters because a launch-time environment
variable cannot reach an auto-started session, which is the case this
was built for.
At 8 MB the file rolls over to diagnostics.log.old, so leaving it on
for days costs one file plus its rollover. Each launch writes a marker
line, so several sessions in one file stay easy to tell apart.
Save Snapshot¶
Writes the engine's most recent events to a new timestamped file and opens Explorer with it selected.
PadForge always keeps its recent engine events in memory, whether or not the log is on, so this captures the moments around something that just happened without having had logging enabled beforehand. Use it right after a glitch.
Open Log Folder¶
Opens the folder holding diagnostics.log and any snapshots.
Related pages¶
- Installation: first-time setup.
- Dashboard: engine status and overview.
- Controller Slots: add and manage virtual controllers.
- Devices: physical controllers and assignments.
- Driver Management: driver install detail.
- Profiles: per-app config and Profile Shortcuts.
- Steam Workshop Config Import: the feature behind the Community Configs card.
- Troubleshooting: more help.
Last updated for PadForge 5.2.0.