You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Oct 29, 2025. It is now read-only.
XJoy allows you to use a pair of Nintendo Joy-Cons as a virtual Xbox 360 controller
on Windows. XJoy is made possible by ViGEm and
hidapi.
Support this project
XJoy is a free product that I work on in my free time, so any contributions are greatly appreciated.
Note
Currently the newer versions containing analog support appear to have some issues. I recommend using the last version
before analog support was introduced v0.1.8.
Download the latest zip from the releases page and extract it somewhere permanent like your
Documents folder
That's it!
Usage
Pair each of your Joy-Cons with Windows (hold down the button on the side to put into
pairing mode, then go to add bluetooth device in Windows)
Ensure that both Joy-Cons show as "Connected" in your bluetooth devices page
Run XJoy.exe
Start playing games with your Joy-Cons. A virtual xbox controller should
show up as soon as XJoy.exe starts running (you will hear the USB device inserted sound).
To confirm that it is working, try pressing some buttons on your Joy-Cons. You should
see the names of the buttons currently being pressed printed in the terminal.
To exit, press [ENTER] in the terminal window. You can also simply close the window
however this may not disconnect from the Joy-Cons and the virtual controller properly.
When you launch XJoy.exe, you should get output similar to this:
XJoy v0.1.0
initializing emulated Xbox 360 controller...
=> connected successfully
=> added target Xbox 360 Controller
initializing threads...
=> created report mutex
=> left Joy-Con thread started
=> found left Joy-Con
=> successfully connected to left Joy-Con
=> right Joy-Con thread started
=> found right Joy-Con
=> successfully connected to right Joy-Con
Customization
Right now all buttons are hard-coded to their "default" xbox equivalents. If you wish to
customize these mappings, feel free to modify the process_button method in XJoy.cpp and
recompile yourself. I plan to add support for a configuration file and maybe a GUI in later
versions. The default mappings are shown below:
Joy-Con Button
Xbox Button
A
B
B
A
X
Y
Y
X
Left Trigger
Left Trigger
Right Trigger
Right Trigger
Left Shoulder
Left Shoulder
Right Shoulder
Right Shoulder
D-PAD
D-PAD
Left Analog
Left Analog
Right Analog
Right Analog
Left Stick
Left Thumb
Right Stick
Right Thumb
Home
Start
Capture
Back
Plus
Start
Minus
Back
SL on Joy-Con (L)
A
SR on Joy-Con (L)
X
SL on Joy-Con (R)
B
SR on Joy-Con (R)
Y
Building
If you wish to build XJoy yourself, simply install the ViGEm Bus Driver as outlined in the
installation steps, open the XJoy.sln file in Visual Studio 2017, and build. Everything
should work out of the box but if it does not feel free to submit an issue. Note that at
least on my end it seems to be working in Visual Studio 2019 as well, which is good.
test your changes, doing your best to ensure you aren't introducing any environment-specific
behavior that may cause issues for users without your exact setup. XJoy's target audience is
freshly installed Windows 10 users who have followed the ViGEm installation instructions.
submit a pull request
About
Use Nintendo Switch JoyCons as a virtual Xbox 360 controller in Windows