How to Use BetterJoy with Steam Without Double Input

BetterJoy and Steam Input are both good at translating Switch controllers — and that is exactly the problem. Leave both in charge of the same pad and you get the classic symptoms: every button press registers twice, menus scroll on their own, or the game ignores the controller entirely. The fix is not a hack; it is a decision. For each game, one translator should own the controller. This page lays out the three clean configurations, when Steam should simply handle the pad itself, and the decision table we recommend taping to your monitor.

Know what Steam already does

Valve’s client has supported the Switch Pro Controller natively since 2018, gyro included, and added Joy-Cons in August 2022 — both individually as mini-gamepads and combined into pairs. Inside Steam’s ecosystem that covers a lot of BetterJoy’s historical territory with zero drivers and zero background tools. Steam’s limits are scope, not quality: its translation only applies to games Steam launches or manages, and it offers no DSU/Cemuhook motion server for outside programs. BetterJoy’s remaining strengths are the mirror image: system-wide XInput or DS4 output for anything on the PC, plus the DSU server at 127.0.0.1:26760 that emulators consume. Neither tool is “better” — they own different territory, and the Platforms & Emulators hub maps that territory across programs.

Mode 1: Steam Input only (most Steam games)

If you play a Steam game with your Pro Controller or Joy-Cons and do not need a DSU motion feed, the cleanest setup is: close BetterJoy entirely and let Steam Input translate the pad. Enable Nintendo Switch controller support in Steam’s controller settings, let Steam detect the physical controller, and configure gyro there if the game uses it. With BetterJoy closed there is no virtual XInput pad competing for the game’s attention, and double input is impossible by construction. Most people who “have a BetterJoy problem in Steam games” actually have a two-translators problem, and this mode is the whole cure.

Mode 2: BetterJoy as a motion server only (emulators + Steam in the mix)

The hybrid case: you want Steam to handle your controller’s buttons — or an emulator launched through Steam to use its own input — but something still needs gyro data the BetterJoy way, via DSU. BetterJoy supports exactly this split:

  1. Pair the controller and start BetterJoy from the download page package.
  2. In BetterJoy’s settings, turn off XInput emulation. BetterJoy stops presenting a virtual Xbox controller, so nothing doubles.
  3. Leave the application running: its UDP motion server keeps broadcasting on 127.0.0.1:26760.
  4. Point your emulator’s DSU client at that address (the pattern used in our Cemu guide), while buttons come from the physical pad through Steam or the emulator’s own SDL reading.

This is also the mode the project’s own guidance points at for coexistence: motion from BetterJoy, buttons from whoever owns them — never both from both.

Mode 3: BetterJoy owns the pad (non-Steam games)

For a game outside Steam — a Game Pass title, an itch.io download, a standalone emulator — BetterJoy’s full mode is the point of the program: XInput or DS4 emulation, system-wide. The discipline is on the Steam side: quit Steam, or at minimum disable Steam Input for that controller while you play, so the client is not quietly translating the physical pad in parallel. If you skip this, you will meet the symptoms catalogued in our double input fix — including the console cousin, the “Duplicate timestamp enqueued” flood described in its own fix page, which appears when a program reads the wrong one of the two controller views.

The decision table

What you are playing Owner BetterJoy state
Steam game, Pro Controller or Joy-Cons Steam Input Closed
Steam game where you prefer BetterJoy’s gyro handling BetterJoy (full) Running; Steam Input disabled for the pad
Emulator needing DSU motion, launched via Steam Split Running, XInput emulation OFF, motion server only
Non-Steam game or standalone emulator BetterJoy (full) Running; Steam closed or its input disabled

The per-game middle ground

You do not have to reorganise your whole library around one mode. Steam lets you toggle Steam Input per game (in the game’s properties, under Controller), which makes a practical mixed setup possible: leave Steam Input in charge for the bulk of your Steam catalogue, disable it for the one or two titles where you prefer BetterJoy’s full emulation, and quit Steam entirely for non-Steam sessions. What you cannot do is improvise per launch — double input does not announce which translator caused it, it just ruins the session. Decide the owner when you install the game, note it if you have to, and hold the line. Also note that BetterJoy’s output choice (XInput versus DS4 emulation) does not change the rule: a virtual DS4 pad and Steam’s own reading of the physical controller are still two views of one pad, and the same one-owner discipline applies.

FAQ

Why do my buttons register twice only in Steam games?

Because Steam Input reads the physical controller while the game also sees BetterJoy’s virtual one — two views of the same pad, both active. Pick an owner using the table above; no other setting needs changing.

Can Steam Input replace BetterJoy completely?

For games inside Steam, largely yes — Pro Controller support dates to 2018 and Joy-Con pairing to 2022. What Steam cannot give you is system-wide XInput/DS4 output for non-Steam programs or a DSU motion server, which is where BetterJoy remains the tool.

Does turning off XInput emulation in BetterJoy break the motion server?

No — they are separate functions. With emulation off, BetterJoy stops creating a virtual controller but keeps serving motion data over UDP, which is precisely the split Mode 2 relies on.

Similar Posts