CrossPuck

Use the Steam Controller(2026) with CrossOver Steam,
with input and haptics bridged both ways.

Tested with macOS Tahoe and CrossOver 26.1.
Steam Controller must be paired with the Puck connected to macOS over USB; Bluetooth connection is not supported.

Steam Controller input on macOS passes through to CrossOver

Host app on macOS

CrossPuck.app runs in the menu bar, reads the physical controller, and sends input to the guest process.

Guest driver for CrossOver

The bundled hid.dll exposes controller profiles to Steam and forwards non-virtual HID calls to the real system HID DLL.

Feedback comes back

Steam haptics and rumble requests are bridged back through the host app so the physical controller responds normally.

Requirements

Mac setup

  • macOS Tahoe(26) or later
  • CrossOver 26.1 or later
  • Steam bottle installed

Controller setup

  • Steam Controller paired with Puck
  • Newer firmware updated from macOS native Steam

Install

  • A CrossPuck .dmg release
  • Input Monitoring permission for CrossPuck.app

Pair the controller before using CrossPuck

CrossPuck assumes the Steam Controller is already paired with the Puck.

The pairing information is stored on the Puck, so this only needs to be done once on any platform.
If the controller was already paired from macOS, Windows, or another native Steam setup, you can skip this step.

Steam running in CrossOver can use the controller after pairing, but it cannot perform the first pairing step itself.

  1. Quit CrossPuck.app first.
  2. Connect the Puck over USB and launch the native macOS Steam app.
  3. Keep the Puck connected over USB, then connect the Steam Controller to another USB port.
  4. Follow Steam's UI to pair or register the controller to the Puck.
  5. Quit native Steam, start CrossPuck, then launch Steam from the CrossOver bottle.

Install from the DMG

Move the app

Open the .dmg and drag CrossPuck.app into Applications.

Enable Input Monitoring

Start CrossPuck once, then enable it in System Settings, Privacy & Security, Input Monitoring. Restart CrossPuck after changing the permission.

Install the Steam driver

Quit Steam in the bottle, open the CrossPuck menu, and choose Install Steam Driver....

Launch Steam

Keep CrossPuck running, then start Steam from the CrossOver bottle. Steam should see the bridged controller.

CrossPuck menu showing Install Steam Driver when the driver is not installed

Install from the menu bar

When the driver is missing, choose Install Steam Driver... from the CrossPuck menu.

CrossPuck menu showing Repair Steam Driver and Uninstall Steam Driver after installation

Confirm the installed state

After installation, the menu changes to repair and uninstall actions for the Steam driver.

Steam settings showing Steam Controller and Steam Controller Puck connected

Check Steam Controller settings

Steam should list the Steam Controller and the Steam Controller Puck in Controller settings.

Steam Controller layout test showing controller input state

Run a quick input test

Open the controller layout test in Steam and confirm that buttons, triggers, pads, and joystick values respond.

Verify the Wine DLL override

Manual check in CrossOver

  1. Open the CrossOver app that owns the Steam bottle.
  2. Select the Steam bottle and open the C: drive for the bottle.
  3. Confirm hid.dll is in the same directory as Steam.exe.
  4. Select the Steam bottle and open Wine Configuration.
  5. Open the Libraries tab.
  6. In Existing overrides, confirm hid (native, builtin) is present.
  7. If it is missing, add hid, edit it, and choose Native then Builtin.
  8. Click Apply, then OK.

Frequently asked questions

Why does CrossPuck need Input Monitoring permission?

macOS requires this permission before CrossPuck can open and read the Steam Controller or Steam Puck HID device from the host. Without it, the app can wait for the CrossOver guest connection, but it cannot read controller reports. To be a trustworthy macOS app, release builds are signed and go through Apple Notarization before distribution.

Where does the driver go?

CrossPuck installs hid.dll next to Steam.exe in the target bottle.

Does it edit user.reg directly?

No. It writes crosspuck-wine-override.reg into the bottle and imports it through CrossOver regedit.

Which CrossOver app is supported?

Both CrossOver.app and CrossOver Preview.app are supported, with fallback handling when only one is installed.

Should I install hid.dll into system32?

No. This driver is designed to live next to Steam and should not be installed into drive_c/windows/system32.