base on Windows kernel-mode driver emulating well-known USB game controllers. # ViGEm Bus Driver Windows kernel-mode driver emulating well-known USB game controllers. [![Build status](https://ci.appveyor.com/api/projects/status/rv74ufluwib52dq2?svg=true)](https://ci.appveyor.com/project/nefarius/vigembus) [![GitHub All Releases](https://img.shields.io/github/downloads/ViGEm/ViGEmBus/total)](https://somsubhra.github.io/github-release-stats/?username=nefarius&repository=ViGEmBus) [![Discord](https://img.shields.io/discord/346756263763378176.svg)](https://discord.nefarius.at) [![Website](https://img.shields.io/website-up-down-green-red/https/vigem.org.svg?label=docs.nefarius.at)](https://docs.nefarius.at/) [![GitHub followers](https://img.shields.io/github/followers/nefarius.svg?style=social&label=Follow)](https://github.com/nefarius) [![Mastodon Follow](https://img.shields.io/mastodon/follow/109321120351128938?domain=https%3A%2F%2Ffosstodon.org%2F&style=social)](https://fosstodon.org/@Nefarius) --- ## 🧟 THIS PROJECT HAS BEEN RETIRED 🧟 Users of this software are encouraged to [read the end-of-life statement](https://docs.nefarius.at/projects/ViGEm/End-of-Life/). So long, cheers šŸ–– --- ## About The `ViGEmBus` driver and `ViGEmClient` libraries represent the core of the Virtual Gamepad Emulation Framework (or `ViGEm` , for short). `ViGEm` aims for a 100% accurate [emulation](<https://en.wikipedia.org/wiki/Emulator>) of well-known gaming peripherals as pure software-based devices at kernel level. As it mimics "the real thing" games and other processes require no additional modification whatsoever to detect `ViGEm`-based devices (no Proxy-DLLs or API-Hooking) and simply work out of the box. While the (now obsolete) [Scarlett.Crush Productions Virtual Bus Driver](<https://github.com/nefarius/ScpVBus>) is the spiritual father of this project, `ViGEm` has been designed and written from the ground up utilizing Microsoft's [Kernel-Mode Driver Framework](https://en.wikipedia.org/wiki/Kernel-Mode_Driver_Framework). ### Emulated devices Emulation of the following USB Gamepads is supported: - [Microsoft Xbox 360 Controller](https://en.wikipedia.org/wiki/Xbox_360_controller) - [Sony DualShock 4 Controller](https://en.wikipedia.org/wiki/DualShock#DualShock_4) ## Use cases A few examples of the most common use cases for `ViGEm` are: - You have an unsupported input device you'd like to use within games without modifying said game. - You want the freedom to use a different controller of your choice in [PS4 Remote Play](<https://remoteplay.dl.playstation.net/remoteplay/>). - You encountered a game not compatible with [x360ce](<https://www.x360ce.com/>) (prior to version 4.x). - You want to extend the reach of your input device (like send traffic to a different machine over a network). - You want to test/benchmark your game and need a replay mechanism for your user inputs. - You want to work around player slot assignment order issues in `XInput`. ## Supported Systems šŸ›‘ **Windows Server** might work but is **not supported** šŸ›‘ Bug reports/support requests regarding running on a Server OS will be discarded. ### Version 1.16 and below The driver is built for Windows 7/8.1/10 (x86 and amd64). ### Version 1.17 and above The driver is built for Windows 10/11 only (x86, amd64 and ARM64). ## License The ViGEm Bus Driver is licensed under the **BSD-3-Clause**, see [LICENSE](./LICENSE.md) for more information. ## How to build ### Prerequisites - [Step 1: Install Visual Studio 2019](https://docs.microsoft.com/en-us/windows-hardware/drivers/other-wdk-downloads#step-1-install-visual-studio) - [Step 2: Install WDK for Windows 10, version 2004](https://docs.microsoft.com/en-us/windows-hardware/drivers/other-wdk-downloads#step-2-install-the-wdk) - [Step 3: Clone the Driver Module Framework (DMF)](https://github.com/microsoft/DMF) into the same parent directory. - Build the `DmfK` project with Release and Debug configurations for all architectures (x64 and Win32). You can build directly within Visual Studio. Do bear in mind that you'll need to **sign** the driver to use it without [test mode](https://docs.microsoft.com/en-us/windows-hardware/drivers/install/the-testsigning-boot-configuration-option#enable-or-disable-use-of-test-signed-code). ## Contribute ### Bugs & Features Found a bug and want it fixed? Open a detailed issue on the [GitHub issue tracker](../../issues)! Have an idea for a new feature? Let's have a chat about your request on [Discord](https://discord.nefarius.at). ### Questions & Support Please respect that the GitHub issue tracker isn't a helpdesk. We offer a [range of support resources](https://docs.nefarius.at/Community-Support/) you're welcome to check out! ## Installation Pre-built production-signed binaries **for Windows 10/11** are provided by `Nefarius Software Solutions e.U.` [as an all-in-one setup](../../releases/latest). ## Sponsors Sponsors listed here have helped the project flourish by either financial support or by gifting licenses: - [3dRudder](https://www.3drudder.com/) - [Parsec](https://parsec.app/) - [JetBrains](https://www.jetbrains.com/resharper/) - [Advanced Installer](https://www.advancedinstaller.com/) - [ICAROS](https://www.icaros.com/) ## Known users of ViGEm A brief listing of projects/companies/vendors known to build upon the powers of ViGEm. This list is non-exhaustive, if you'd like to see your project included, contact us! - [3dRudder](https://www.3drudder.com/) - [Parsec](https://parsec.app/) - [GloSC](https://github.com/Alia5/GloSC) - [UCR](https://github.com/Snoothy/UCR) - [InputMapper](https://inputmapper.com/) - [Oculus VR, LLC.](https://www.oculus.com/) - [WiimoteHook](https://forum.cemu.info/showthread.php/140-WiimoteHook-Nintendo-Wii-Remote-with-Motion-Rumble-and-Nunchuk-support) - [XJoy](https://github.com/sam0x17/XJoy) - [HP](https://www8.hp.com/us/en/gaming/omen.html) - [DS4Windows](https://ryochan7.github.io/ds4windows-site/) - [XOutput](https://github.com/csutorasa/XOutput) - [RdpGamepad](https://github.com/microsoft/RdpGamepad) - [Touchmote](https://github.com/Ryochan7/Touchmote/tree/ryochan7) - [Mi-ViGEm](https://github.com/grayver/mi-vigem) - [BetterJoy](https://github.com/Davidobot/BetterJoy) - [Regame](https://github.com/ksyun-kenc/liuguang) - [NetInput](https://github.com/usertoroot/NetInput) - [NetJoy](https://github.com/Qcent/NetJoy/) ", Assign "at most 3 tags" to the expected json: {"id":"4564","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"