Skip to content
Arthur031221Public

About

Free self-hosted party games for one TV and everyone's phones, in a single Go binary

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Couchcade logo

Couchcade

Free party games for one TV and everyone's phones. One Go binary, no accounts, no app.

ci MIT

English | Traditional Chinese | Simplified Chinese | Japanese | Korean | Spanish | French | German | Portuguese

A Squiggle round on the TV with phones voting

Open Couchcade on a TV or laptop. Friends scan the QR code, type the four letter code and play from their own phones. It comes with six original games, an audience mode for crowds, bots for when you're short of people, and nine languages with prompts written for each one. Scores carry across games into a party scoreboard, and phones stay awake while you play.

Try it now: the hosted demo runs the same engine compiled to WebAssembly in your browser, with bots filling the seats.

The number

With 100 simulated phones (8 seated, 92 in the audience), every phone received the first question within 60 ms of the host pressing Start, in 12 out of 12 runs.

Here's how it was measured. couchcade loadtest -phones 100 starts a server in process, opens 100 real WebSocket connections over loopback, starts a Brain Teams round from the host connection, and timestamps the first state message that carries the question on every phone. Nothing is rendered, so it measures delivery to the phone's socket. We ran it 12 times on a Ryzen 5 7500F. Fan-out ranged from 37.5 to 48.1 ms. The server batches changes into one flush every 50 ms, so most of that figure is the batching tick. It measures the server, not your Wi-Fi, which will add its own delay.

Before and after

A typical paid party game box Couchcade
Cost Paid packs Free, MIT licensed
Where it runs Publisher's apps and servers One binary on your own network
Prompts Fixed by the publisher JSON files you can edit and share
Languages Varies by title 9, with prompts written for each
Big groups Depends on the game 8 players plus up to 500 audience

Couchcade isn't a clone of any commercial game. The six games and all prompts are original.

The games

Game What you do
Squiggle Draw the prompt in secret, then vote for the best drawing
Fibber Write a fake answer, then spot the real one
Brain Teams Two teams race through multiple choice questions
Zap Wait for green, then tap faster than everyone
Echo Think alike, matching answers score
Mole One player has no secret word, find them

Rules and player counts are in docs/how-to-play.md.

Quick start

couchcade serve

Open the first address it prints on the TV. Phones scan the QR code. If your machine has several network cards and the QR code points at the wrong one, pass -public-url http://192.168.1.20:8080.

Install

Download a binary from the releases page, or:

# Go 1.24 or newer
go install github.com/Arthur031221/Couchcade/cmd/couchcade@latest

# Docker
docker build -t couchcade https://github.com/Arthur031221/Couchcade.git
docker run --rm -p 8080:8080 couchcade serve -addr :8080 -public-url http://YOUR-LAN-IP:8080

# From source
git clone https://github.com/Arthur031221/Couchcade && cd Couchcade
go build -o couchcade ./cmd/couchcade

Make it yours

Prompts are plain JSON. Drop your own pack in a folder and start with -packs ./my-packs:

{"id": "office", "lang": "en", "items": {"squiggle": [{"text": "a tired printer"}]}}

couchcade packs validate FILE checks a pack and couchcade packs stats counts what you have. The format is in docs/content-packs.md. Hosting behind a proxy is in docs/hosting.md and the design is in docs/architecture.md.

What is tested

  • Go unit tests for content validation, the engine and every game, run with the race detector in CI.
  • A load test with real WebSockets.
  • 16 end to end tests that drive real Chrome against the real binary: each of the six games with a human and bots, reconnecting, kicking, more than 8 players, light and dark themes, no sideways scrolling at 320 px in every game, and all nine languages with translated button labels.
  • A browser test that plays a full game on the WebAssembly demo.

Limits

  • Phones and the TV need to reach the server, so the usual case is one Wi-Fi network. Playing over the internet needs a reverse proxy you set up.
  • Rooms live in memory. Restarting the server ends the games in progress.
  • Kick bans a browser token, not a person, and room codes are four letters. Treat both as party tools, not security.
  • There is no login. Don't expose the port to the open internet without a proxy you trust.
  • Drawing is finger or mouse only, with undo and clear but no pressure sensitivity.

Contributing

Prompts and translations are the easiest way in. See CONTRIBUTING.md.

License

MIT

Assisted by Claude/Codex.

About

Free self-hosted party games for one TV and everyone's phones, in a single Go binary

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages