Files
SteamlessController/README.md
T
Dylan DeverillandClaude Opus 5 ba215b2429 Fix custom back button mappings being ignored in mouse click mode
"Back Buttons as Mouse Click" hijacked L4 and R4 unconditionally: the
virtual controller skipped their bindings entirely, so a paddle mapped to
RT silently did nothing while the option was on. Only the upper paddles
were affected, so the symptom read as "two of my four paddles are dead"
rather than pointing at the toggle. The same gate also suppressed the
Left/Right Click bindings the remap window already offered, meaning the
feature disabled the very capability it existed to provide.

The toggle was a strict subset of the remap window, which already offers
left and right click per paddle, so retire it rather than teach it to
cooperate:

- Remove the backMouseEnabled gates, the tray item, and the duplicate
  L4/R4 handling in TrackpadMouse. Paddle mouse output now flows through
  the single edge-detection path in ReadLoop.
- Default L4 and R4 to left click so a fresh install still clicks out of
  the box.
- Add an explicit Off option to the picker. None was already a real
  "do nothing", but Reset now yields left click, so without this there
  would be no way to disable a paddle at all.
- Migrate BackButtons=1 into real bindings, filling in only paddles with
  no binding of their own so an explicit mapping is never overwritten,
  then delete the value so it runs once.

TrackpadMouse::Reset used to release a paddle held while game mode was
torn down. Removing its L4/R4 handling would have stranded the mouse
button down, so that cleanup moves to ReleasePaddleMouseButtons, which
also covers right click and runs on the enable, disable, and destructor
paths.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 18:55:24 -07:00

4.2 KiB

SteamlessController

A lightweight Windows system tray app that lets you use a Steam Controller as a standard gamepad — without Steam running.

image

When Steamless Mode is active, the app disables the controller's built-in keyboard/mouse emulation (lizard mode) and exposes it as a virtual Xbox 360 controller via ViGEmBus, making it compatible with any game that supports XInput or the Xbox controller.

Features

  • NEW in 1.9 - Bluetooth! Use the controller wired, through the dongle, or paired over Bluetooth LE
  • NEW in 1.8 - Automatically enable/disable based on if Steam is running, or a Steam game is running!
  • NEW in 1.8 - Advanced debugging and local logging to help diagnose issues
  • Rumble Support v2.0
  • Support for multiple Steam Controllers! Long live split screen!
  • New shiny UI for remapping L4/L5 R4/L5 back buttons!
  • Support for Xbox OR PlayStation controllers - with PS Touchpad and Gyro plumbing.
  • System tray icon shows connection and mode status
  • Steamless Mode — disables lizard mode and exposes controller as Xbox 360 gamepad
  • Trackpad Mouse — use the right (or left) trackpad as a mouse cursor
  • Back Buttons for Clicking — the upper paddles (L4/R4) left-click by default; rebind any paddle to a gamepad button, right click, or Off
  • Use Left Trackpad Instead — mirror all trackpad/back-button functionality to the left side for left-handed users
  • Start with Windows — launch automatically at login
  • Settings persist across restarts
image image

Requirements

To run

  • Windows 10 or later (64-bit)
  • ViGEmBus driver installed
  • Steam Controller — wired USB (PID 0x1302), wireless dongle (PID 0x1304), or Bluetooth LE (PID 0x1303, pair via Windows Bluetooth settings)
  • Steam closed (Steam claims the controller when running)

To build

  • Visual Studio 2022 with the Desktop development with C++ workload
  • CMake 3.20 or later (included with Visual Studio, or install separately)
  • Windows SDK 10.0.22000 or later (installed via Visual Studio Installer)

Building

git clone https://github.com/your-username/SteamlessController.git
cd SteamlessController
cmake -B build
cmake --build build --target SteamlessController

The executable will be at build\Debug\SteamlessController.exe.

For a release build:

cmake -B build/release -G "Visual Studio 18 2025"
cmake --build build/release --config Release --target SteamlessController

If you have Visual Studio 2022, replace "Visual Studio 18 2025" with "Visual Studio 17 2022".

CMake Targets

Target Description
SteamlessController Main system tray application
SteamProbe Console diagnostic tool — dumps raw HID report bytes as you interact with the controller. Useful for protocol research.
RawControllerProbe Checks whether Windows.Gaming.Input.RawGameController can enumerate the Steam Controller (requires WinRT).

How it works

The Steam Controller exposes a vendor HID collection (usage page 0xFF00) that carries all game input in a 54-byte report (ID 0x42) at ~60 Hz. By default the firmware runs in lizard mode, emulating a keyboard and mouse so the controller works without drivers.

SteamlessController sends HID feature reports to disable lizard mode, then reads the raw input reports and translates them into a virtual Xbox 360 controller via ViGEmBus. A background heartbeat re-sends the disable command every 800 ms to keep lizard mode off.

The full input report layout is documented in src/steam/SteamController.h.

Third-party

  • ViGEmClient — MIT License, built from source as a static library