Properties2
| Type | Concept |
| Note created | Jun 19, 2026 |
OpenPuck is open-source firmware that turns a cheap nRF52840 microcontroller into a clone (the author calls it a “copycat”) of the Steam Controller 2 puck — the small USB dongle the controller uses for low-latency wireless communication with a host device. Measured latency is within ~1 ms of the official puck.
Why it exists
The Steam Controller 2 (2026) ships with a wireless puck, but it has two problems OpenPuck addresses:
- The puck isn’t sold separately. If you want a spare, or a second one (a single controller can pair to two pucks), you’re stuck. OpenPuck is a DIY replacement.
- The official puck only works through Steam Input. Outside Steam the controller is mostly useless. OpenPuck adds Xbox and Switch personalities so the controller works with non-Steam software too — see Using a Steam Controller as a Xbox 360 Controller.
Hardware
Officially targets a Pro Micro nRF52840 (~$8). I run it on a Seeed Studio XIAO nRF52840 instead, which needed several fixes — documented in Flashing OpenPuck to a Seeed Studio XIAO nRF52840.
Modes
Switch modes anytime by holding all 4 back buttons and pressing a face button:
| Button combo (configurable) | Mode | Comment |
|---|---|---|
| back-4 + A | Steam | Steam Controller mode (default) |
| back-4 + B | Lizard | Works even when Steam is closed |
| back-4 + X | Xbox | Xbox 360 controller — for non-Steam games |
| back-4 + Y | Switch Pro | Switch controller + gyro + haptics |
| WebUSB panel → mode 4 | Hori Pad | Switch mode, no gyro/haptics |
| WebUSB panel → mode 5 | DualSense + gyro + trackpad | PC only |
| WebUSB panel → mode 6 | DS4 / HIDGYRO + gyro + trackpad | PC only |
Shortcut: Steam + Y (held ~2 s) shuts the controller off in any mode.
Configuration
A WebUSB panel at safijari.github.io/openpuck (Chrome/Edge only) switches modes, remaps back paddles, shows the paired-controller bond slot, and can factory-erase. It works in every mode, including Steam mode with Steam running.
My setup
- Fork lives locally at
~/Projects/Personal/openpuck. - Flashed onto a Seeed XIAO nRF52840 → enumerates as a Valve “Steam Controller Puck” (28DE:1304).
- Caveat from the author: the project leaned heavily on LLMs for protocol discovery and code.