Home

Awesome

Build XOutput Github All Releases Download XOutput Donate Quality Gate Status Discord

XOutput

If you have an older or not supported game controller (gamepad, wheel, joystick, etc.), but XBox 360 controllers are supported you can use this software and enjoy gaming with your controller.

XOutput is a software that can convert DirectInput into XInput. DirectInput data is read and sent to a virtual XInput (Xbox 360 Controller) device. XInput is the new standard game controller input on windows, and DirectInput can no longer be used with Universal Windows Platform software, but with this tool you can use DirectInput devices as well.

General information

If you have any questions or feature requests feel free to create Github Issue.

Any contribution is welcome, open your Pull request.

To join the discussion or just say hi, there is a discord channel.

This version is currently under development. Please use 3.x version for stable features

VersionStateSupport
4.xUnder development (no releases yet)Development with new features
3.xStableBugfixes only
2.xOld version (superseeded by 3.x)Expired at Mar 7 2018
1.xOld version (superseeded by 3.x)Expired at Mar 7 2018

How to install

Install emulation software

Install one of the two libraries. ViGEm (preferred) or SCPToolkit (unsupported, legacy)

SoftwareStateDownload
ViGEmBusDeprecated since Nov 2, 2023ViGEmBus
ScpToolkitDeprecated since Mar 20, 2023ScpToolkit

Install dependencies

Install:

Download XOutput

How to upgrade

Download the application:

Hiding original input (exclusive mode)

SoftwareStateDownload
HidHideActive developmentHidHide
HidGuardianDeprecated since Jul 27, 2023HidGuardian

HidGuardian setup

Affected devices and whitelist can be managed by the application, but it needs administrator priviledges.

  1. Enable HidGuardian initialization in the settings.
  2. Restart the application as administrator.
  3. Add device to affected devices in the input settings.
  4. Reconnect device or reboot PC

Add affected device manually (use this method only, if you want to hide non recognized HID devices):

  1. Run regedit and go to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HidGuardian\Parameters
  2. Create multi-string value with the name AffectedDevices
  3. Open Device Manager, find your input device and open properties
  4. Go to details, select Hardware ID and copy string that looks like HID\VID_046D&PID_C219&REV_0200 and HID\VID_046D&PID_C219
  5. Paste the values into HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HidGuardian\Parameters
  6. Reconnect devices or reboot PC

Manage process whitelist manually (use this method only, if you want to use HidGuardian for other applications):

  1. Start XOutput (or any other application)
  2. Open Task Manager, find your application, then go to details.
  3. Remember the value of the PID column.
  4. Run regedit and go to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HidGuardian\Parameters\Whitelist
  5. Create subkey with the PID you found before.

Technical problem

Problem visualisation

graph TD
    subgraph XInput
        X1(Xbox controller 1) -->|Read hardware input| XD[Xbox controller driver - xusb22.sys]
        X2(Xbox controller 2) -->|Read hardware input| XD
        XD -->|Read input| XR[XInput handler - xinput1_3.dll]
    end
    subgraph DirectInput
        D1(fa:fa-gamepad Older controller) -->|Read hardware input| D1D[Controller driver]
        D2(Joystick) -->|Read hardware input| D2D[Joystick driver]
        D3(Gaming wheel) -->|Read hardware input| D3D[Gaming wheel driver]
        D1D -->|Read input| DR[Direct input handler - dinput8.dll]
        D2D -->|Read input| DR
        D3D -->|Read input| DR
    end
    subgraph Games
        XR -->|Read XInput| NG[Newer games]
        XR -->|Read XInput| CG[Compatible games]
        DR -->|Read DInput| CG[Compatible games]
        DR -->|Read DInput| OG[Older games]
    end

Offered solution

graph TD
    subgraph XInput
        X1(Xbox controller 1) -->|Read hardware input| XD[Xbox controller driver - xusb22.sys]
        X2(Xbox controller 2) -->|Read hardware input| XD
        XD -->|Read input| XR[XInput handler - xinput1_3.dll]
    end
    subgraph DirectInput
        D1(fa:fa-gamepad Older controller) -->|Read hardware input| D1D[Controller driver]
        D2(Joystick) -->|Read hardware input| D2D[Joystick driver]
        D3(Gaming wheel) -->|Read hardware input| D3D[Gaming wheel driver]
        D1D -->|Read input| DR[Direct input handler - dinput8.dll]
        D2D -->|Read input| DR
        D3D -->|Read input| DR
    end
    DR -->|Read DInput| XOA[XOutput.App]
    subgraph Solution
        DR -->|Read HTML5 gamepad API| B[Browser]
        B -->|Browser| XOS[XOutput.Server]
        XOA -->|Sends input| XOS[XOutput.Server]
        XOS -->|Control emulation| V[ViGEm]
    end
    V -->|Emulate controller| XD
    subgraph Games
        XR -->|Read XInput| NG[Newer games]
        XR -->|Read XInput| CG[Compatible games]
        DR -->|Read DInput| CG[Compatible games]
        DR -->|Read DInput| OG[Older games]
    end

How it works

ComponentImplementationDescription
Device emualationViGEmExternal software that emulates XBox and DS4 controllers
Device emualationSCP toolkitLegacy external software that emulates XBox controllers
BackendXOutput.ServerServer that collects data from clients and sends to the emulation software
ClientXOutput.AppDesktop application that collects data from the devices and sends to the backend
ClientWeb controllerWeb application that allows to emulate a device
ClientWeb clientWeb application that uses the Gamepad API