Hardware Using Joy-Cons on PC


Mar 22, 2017
EDIT 2 Jun 2020:
-Moved over to the new version of XOutput and it is much better
-I am now only using XOutput, instead of a mix of XOutput and Steam Define Layout
-Unlike the old version of XOutput, you can save mappings instead of re-configuring every time you want to do something different


Two pairs of Joy-Cons: vJoy Driver -> XOutput
Four individual Joy-Cons: vJoy Driver -> XOutput

EDIT 26 Mar 2020:
- Inputs being picked up by the wrong vJoy Device was fixed by ticking 'Prefer Left JoyCon' in the vJoy driver. In an issue on Github, someone else with this problem said that this did not fix it for them.
- Managed to get four separate Joy-Cons working with the driver and XOutput
Left Joy Con
Physical Appearance / Xbox name    / XOutput name

'Right button'      / A            / BN 1
'Bottom button'     / B            / BN 4
'Top button'        / X            / BN 3
'Left button'       / Y            / BN 2

SL                  / L Trigger    / BN 6
SR                  / R Trigger    / BN 5

Stick X             / LS X         / Axis 2
Stick Y             / LS Y         / |Axis 1
Stick Click         / LS Click     / BN 12

Screen Capture      / Start        / BN 14
-                   / Back         / BN 9

L                   / Left Bumper  / BN 7 [Not used in my setup]
ZL                  / Right Bumper / BN 8 [Not used in my setup]

Right Joy Con
Physical Appearance / Xbox name    / XOutput name

'Right button'      / A            / BN 2
'Bottom button'     / B            / BN 4
'Top button'        / X            / BN 1
'Left button'       / Y            / BN 3

SL                  / L Trigger    / BN 6
SR                  / R Trigger    / BN 5

Stick X             / LS X          / |Axis 2
Stick Y             / LS Y          / Axis 1
Stick Click         / LS Click      / BN 11

+                   / Start         / BN 10
Home                / Back          / BN 13

R                   / Left Bumper   / BN 7 [Not used in my setup]
ZR                  / Right Bumper  / BN 8 [Not used in my setup]
- Found out I'm using an outdated version of XOutput. The new one is being developed by csutorasa and others (the old one was by Stents).

Two pairs: vJoy Driver > Steam's 'Define Layout' > Xbox One Controller
Four separate: vJoy Driver > XOutput > Xbox 360 Controller
Note that 'Reverse Stick Y' and 'Prefer Left JoyCon for Gyro Controls' are ticked.

EDIT 24 Mar 2020: it has gone back to inputs to one vJoy device spilling over into the outputs of the other, for no apparent reason. Only inputs from the right Joy-Cons spill over into the other device.

Original post begins:

This post is about my experiences connecting Joy-Cons to my PC. My method is a little different to existing guides, and (for me, at least) works better and more reliably.

TL;DR: Using Steam's generic controller support instead of XOutput, I have managed to connect 2 pairs of Joy-Cons to my PC. They work reliably, without lagging, and without inputs from one controller spilling over into the other.

Skip to the end for a summary.

I realise that this topic is quite old, but I thought it would be worth at least recording my experiences/experiments with using Joy-Cons on the PC. (They are slightly different to all of the current guides that I have seen)

My aims were to be able to
-Connect four Joy-Cons to my PC, as two pairs
-Connect four Joy-Cons to my PC, separately
-Be able to play games

The first part was initially achieved with the method in NoThisIsStupider's guide (although at the time I was using an article on pcgamesn), using mfosse's vJoy Feeder, and XOutput.

Unfortunately, it didn't work well. Sometimes, the responses were laggy, sometimes XOutput crashed, and inputs to one controller were consistently spilling over into the outputs of the other, so pressing a button on one controller caused two characters to move.

So I was stuck with one controller pair, which sometimes didn't work properly. (Disconnecting and reconnecting the Joy-Cons usually helped, but it was slow and didn't always work first-time)

The second part (at first) did not work at all. Trying to use mfosse's driver with uncombined Joy-Cons left me with devices that Windows recognised as controllers, but which were unable to do anything, because the stick registered as being constantly pushed into one corner. (I don't know if this experience is unique to me - mfosse's README suggests that the driver should be fine with individual Joy-Cons, but I found nothing online about people trying to use it in this way - I guess everyone just wants a pair working together)
I found out what Windows thought about my controllers in
Start Menu > Search > Set up USB game controllers > Controller > Properties

The third part was ok, but I had wanted to connect multiple controllers to my PC so I could play with friends, but this plan was somewhat foiled by only being able to connect one pair of Joy-Cons. (I have other controllers, but they aren't as nice as Joy-Cons)

Eventually, XOutput crashed one too many times, and on a whim I decided to try Steam's generic controller configuration instead. Trying to set it up with no guide was very confusing, but manageable.

Steam's controller support is on two levels:
-Define inputs from a controller for the whole of Steam for your PC (this part is hard to find, and is disguised as generic controller support, but it is a little more sophisticated than that. It's like XOutput but for several possible controller types)
-Define inputs from a controller for a single game (this part is easier to find, and is called the 'Configurator')

I used the first of these options, which is found in
Steam > Big Picture Mode > Settings > Controller Settings > Detected Controllers > Define Layout

This was the confusing part. (Again, I don't know if others trying this will have the same experience, but here we go)

Having clicked Define Layout for one of the vJoy Devices, I reached a screen where I could choose a virtual button (eg 'Primary Action') and assign a physical button (eg 'A') to it by pressing it on my controller.
I had to hold down or press the button multiple times before it would be assigned, (I can only assume this is something to do with mfosse's driver) but then that button would register as being repeatedly pressed. (like the stick virtually pushed into the corner with the individual Joy-Cons)
By the time I was a few buttons in, the mouse kept disappearing as Steam thought I was trying to use a controller every fraction of a second.
Eventually I reached the end and managed to click Save (I had to click several times quickly), and was asked to 'share this controller definition'. I figured no one else would be using it, and I hadn't tested it yet, so I clicked 'No thanks.', (leaving the drop-down menu to choose what kind of controller it was at its default option - Xbox One Controller) and returned to the Controller Settings menu, where, to my surprise, the vJoy Device had been transformed into an Xbox One Controller, which worked in all games that had controller support, without lagging. (The virtual repeated pressing stopped when I clicked No thanks.)

In an attempt to recreate this, (I went away and came back to it some time later, and forgot what I had done) I tried to remove my configuration and start again, but (this is the other confusing part) there is no option in Steam to do this. After some searching, I found that the solution is to go into
File Explorer > Steam Directory > config > config.vdf
and delete some lines near the end of the file, beginning with a long string of numbers, and ending with a comma.
030000007e0500000720000000000000,dev:xb1:R JC A as Xbox,platform:Windows,a:b1,b:b0,y:b2,x:b3,start:b9,back:b12,leftstick:b11,leftshoulder:b14,rightshoulder:b15,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,lefttrigger:b4,righttrigger:b5,
(In my example, it says, 'R JC A as Xbox'. I typed this in the 'Share this controller definition' dialog box, but still clicked No thanks. I had to rename it a second time back on the Controller Settings > vJoy Device > Preferences screen, but this original name is the one that appears in the config file. It should say 'LR JC A as Xbox', for Left and Right Joy-Cons pair A as Xbox controller, but I mistyped)

This method of changing vJoy inputs to Xbox outputs worked better than XOutput (though I would say that XOutput is excellent for what it is - an unfinished project), allowing me to have 2 pairs of Joy-Cons and no lag.

I wondered if I could still use XOutput to have individual Joy-Cons as mini-Xbox controllers, but as stated earlier, the vJoy Devices registered the stick as being constantly pushed into a corner. I compromised and used the Steam configuration without mfosse's driver to map individual Joy-Cons as mini Xbox One controllers. The stick thinks it is a d-pad (this is one of the problems which mfosse's vJoy Feeder fixes), but I figure that most games which only need one stick and two shoulder buttons can cope with 8-directional control.

So, to summarise:

To have pairs of Joy-Cons, I use
-mfosse's vJoy Feeder, with Reverse Stick Y and Combine JoyCons both ticked
-Steam's 'Define Layout' screen, which has issues setting up but works excellently once finished

And to have individual Joy-Cons, I
-go straight to Define Layout in Steam, resulting in a stick that thinks it is a d-pad, but which is fine for games that only need a few buttons and no analogue support (most party games)

Note that if a mistake is made you can go back into Define Layout to edit it, but if you want to completely get rid of the configuration (eg to try using XOutput again), then you need to go into config.vfg
Note that because it uses Steam's controller support, this only works for games in your Steam library, but you can add non-Steam games to your library, and it works just the same.
Last edited by lewiscarroll123,
General chit-chat
Help Users
  • No one is chatting at the moment.
    HelloShitty @ HelloShitty: Hello