davidp.dev

Game · live

Doors

A free multiplayer shooter that runs in the browser. Two teams of robots, two doors, and a clock that decides when you can get through.

I designed it, I wrote it, and I run it: the game, the servers it plays on, the accounts and payments, and the cloud setup underneath.

Doors title art: a blue robot and a tan robot on either side of a split blue and red door

How a match works

Each team has a door. It opens for 30 seconds, and if you get into the other team's door while it's open, you score. Then both doors close for 15 seconds and grey agents come out to hunt everyone. The doors don't open again until every agent is down.

First to 21, win by 2. You get a pistol and a rifle, no ammo pickups, and a stamina bar shared by sprinting, crouching, and sliding. Signed-in players unlock a 12-skill tree and bring four skills into each match.

There is no text chat, no voice chat, and no gore. I wanted something a parent could say yes to, and there's a page written for them.

What's in it

  • Open matches you can drop into, with bots filling empty slots.
  • Ranked Arena with placement and rankings.
  • Co-op raids and parties, so friends can queue together.
  • An offline story campaign with its own maps, characters, and dialogue.
  • A map builder in the browser, and nine competitive maps.
  • A server you can host yourself. The match server is open source and the same code the official servers run.
  • A desktop app (beta) that wraps the same game.

Under the hood

The hard part of a browser shooter isn't drawing it. It's making sure the server is the one deciding what happened, keeping it fair, and keeping it up. This is how that's split:

Game clientReact and Three.js, built with Vite, served from Cloudflare.
Match serverDeno. Runs the simulation and has the final say on every shot and capture. Players connect over WebSockets or WebTransport.
Platform serverDeno and SQLite. Accounts, parties, matchmaking, ranking, inventory, billing, replays.
TrustThe platform server signs short-lived join tokens. The match servers can check them but never hold the key to make them, so a community server can't forge its way in.
BotsTheir own package, shared by the client (campaign) and the official servers.
InfrastructureOpenTofu on AWS, with a one-command deploy that drains live matches before it updates game hosts.
Open source cutEvery backend deploy checks the match server for private code, then mirrors it to the public repo.

Try it

It's free, and it works in a desktop browser with no install. You can pick a name and play right away; making an account keeps your progress.