One-time setup on your Steam Deck. Takes about 5 minutes.
ngrok creates a public URL so phones can reach the Steam Deck over the internet. Sign up free at ngrok.com, then copy your Auth Token from the dashboard — you'll need it in step 3.
Switch to Desktop Mode. Install Node.js via the Discover store, or download it from nodejs.org. No other dependencies needed — the virtual controller uses Python, which is already built into SteamOS.
Open a terminal in Desktop Mode and run:
git clone https://github.com/Jun1perjack/Buzzd.git cd Buzzd/server npm install cp .env.example .env
Then open .env in a text editor and fill in:
NGROK_AUTHTOKEN=your_token_here VERCEL_URL=https://buzzd-xi.vercel.app
The server creates a virtual gamepad via /dev/uinput. Run these three commands to grant access:
echo 'KERNEL=="uinput", GROUP="input", MODE="0660"' | sudo tee /etc/udev/rules.d/99-uinput.rules sudo udevadm control --reload-rules && sudo udevadm trigger sudo usermod -aG input $USER
Then log out and back in (or reboot) for the change to take effect.
cd Buzzd/server npm start
A QR code will appear in the terminal. Players scan it with their phone to join instantly — no URL or room code to type.
The server creates a virtual gamepad called Buzz Controller. Start the server first so PCSX2 can detect it.
In PCSX2: Settings → Controllers → USB → set port 1 to BuzzController → Configure.
Bind each input by clicking it in PCSX2, then pressing the matching button on your phone in the Buzzd app:
| PCSX2 input | Press on phone |
|---|---|
| Player 1 / Red | P1 — big red BUZZ |
| Player 1 / Blue | P1 — Blue |
| Player 1 / Orange | P1 — Orange |
| Player 1 / Green | P1 — Green |
| Player 1 / Yellow | P1 — Yellow |
| ↑ Repeat for Players 2, 3, 4 ↑ | |
The download includes the full button mapping and instructions for merging it directly into PCSX2.ini if you prefer to skip manual binding.
Or run this script to patch PCSX2.ini automatically — it detects the correct device index and writes all 20 bindings for you:
python3 ~/Buzzd/server/setup-pcsx2.py