I wanted a party game night where nobody has to buy a pack, make an account or install an app. So I built Couchcade, a free game box you host yourself. It's one Go binary. You open it on a TV or laptop, people scan a QR code, type a four letter code and play from their own phones.

A Squiggle round on the TV with phones voting

You can try it without installing anything. The hosted demo runs the same engine compiled to WebAssembly in your browser, with bots in the seats.

What is in it

Six original games: Squiggle (draw the prompt, vote for the best), Fibber (write a fake answer, find the real one), Brain Teams (team trivia), Zap (a reaction test), Echo (match answers) and Mole (find the player with no secret word). Eight people get a seat and up to 500 more join as audience. Bots fill empty seats. The interface and prompts come in nine languages, and the prompts are written per language, not translated word for word.

One engine, two homes

The engine has no HTTP in it. It talks to a connection interface with a non blocking send, and a room lock serializes every change. State goes out as one message per connection, flushed every 50 ms, and big payloads like drawings only travel again when they change. The server adapts WebSockets to that interface. The WebAssembly build adapts a JavaScript callback to it. Both run the same code, so the hosted demo is the real game.

What I measured

With 100 simulated phones over loopback, every phone got the first question within 60 ms of the host pressing Start, in 12 of 12 runs. Most of that is the 50 ms batching tick. It only measures the server. Wi-Fi isn't in it and nothing is drawn on screen.

What a review found

Before publishing I asked for a hostile review of the code. It found real problems. A single TV connection could open rooms in a loop until the code generator spun forever. A phone that sent join twice left a ghost player behind. If every phone dropped at once, a game skipped through its rounds. The audience could outvote the seated players in Fibber. All of these are fixed, each with a test. Two issues remain by design and are in the README: kicking bans a browser token, not a person, and room codes are only four letters, so keep it off networks you don't trust.

Try it

go install github.com/Arthur031221/Couchcade/cmd/couchcade@latest couchcade serve 

Prompts are plain JSON, so you can add your own pack and check it with couchcade packs validate. The code is MIT licensed at github.com/Arthur031221/Couchcade. Prompts and translations are the easiest way to contribute.