Close Quarters
A game by @uncommonephemera on Spawn.
Genre: Shooter, Action
Tight penthouse gunfights at night: three flags, 8v8, bots fill every slot.
Close Quarters on Spawn now
Reviews: 25% loved it · 4 votes · 4 reviews and replies · 2 likes · 107 plays · 2 playing right now.
Released 2026-10-12. 12 updates since release, the newest 2026-10-17.
Newest update: Mind the Gap (2026-10-17)
- Metro: the gap between train cars is sealed, track-bed steps come twice as often and climb from any side, and you now vault onto any ledge up to chest height by jumping into it. Bots climb out of the tracks too. Metro lights: screens and signs go dark when the breaker blows. Office: filing cabinets now break. New: when someone's in a live match, past players get a ping to jump in.
Earlier update: Fire & Ruin (2026-10-17)
- Two new grenades: incendiary fire that burns anyone standing in it, and a heavy big-blast charge. Far more of every map breaks now: plants, furniture, lamps, glass, stair rails and walls down to their steel beams. Fixed a rare freeze where a soldier healed at zero hp got stuck limp.
Earlier update: Pad Up (2026-10-16)
- Controller support: left stick moves, right stick aims, RT fires, LT aims down sights. A jumps and deploys, B crouches, X reloads, Y swaps weapons. RB throws a frag, LB uses your kit, L3 sprints, R3 knifes. On the deploy screen, dpad left and right pick your spawn and dpad up cycles your gun. Also: if you die while holding a frag, it drops live at your feet.
Earlier update: Pocket Soldier (2026-10-16)
- Close Quarters plays on phones now. The deploy screen fits a phone held upright or sideways: tickets, flags and map on top, loadout scrolls, and a big DEPLOY button stays at the bottom. In a match the HUD sits in the corners, and knife and kit moved to the left thumb so nothing covers your crosshair.
Earlier update: Rubble & Ruin (2026-10-16)
- Way more destruction. Scrapworks oil drums cook off and blow, sometimes rocketing up. Citadel jars and vases shatter on one round; crates, tables, couches and grain sacks break apart. Frags wreck desks, tables, ceiling tiles, coolers, extinguishers (smoke cloud) and vending machines (cans fly). Windows crack then shatter. Debris stays all round so maps get cluttered. Breach holes are now full walk-through doorways, and bots stop bunching at them. Stacked crates fall when the ones under them break.
What players say
@yzykyl · needs work · 2026-10-12 · played 25 min · 1 heart: “It's so hard and I'm outnumbered because a lot of my teammates are stuck in the pool in C-spa. Also, it gets really weird to aim because of the weapon sway. The enemies also look so similar to teammates. Maybe change their name and symbol color.”
- @uncommonephemera (maker) replied 2026-10-13: “All this has been fixed, I've also added more maps, try it again!”
- @yzykyl replied 2026-10-13: “I checked it out and it definitely plays so much better now! Great job on the fixes! BTW is there a way to leave an ongoing match to choose another game mode or map?”
- @uncommonephemera (maker) replied 2026-10-13: “@yzykyl I'll ask about it. I'm still getting used to it, I got stuck in an old dev version just a few minutes ago, there should be three "servers" now, one for each game mode, and the next map is voted on at the end of the round. I'm not sure Spawn supports Battlefield-style servers where anybody can set up a custom one with specific options for map rotation and game modes.”
@makeriffic · loved it · 2026-10-16 · played 11 min: “The game has an awesome gameplay and movement mechanics which is very important to a first person shooter game. I love the medic support class as I can kill many because of the ammo box. However, I find the pistol not on the proper level with eyes.”
- @uncommonephemera (maker) replied 2026-10-16: “This is fixed now, go try it!”
@flickaboo · needs work · 2026-10-12 · played 23 min: “The movement feels responsive, which is great! One suggestion would be to add a time limit for securing all 3 spots, since holding all of them can be pretty challenging. That could make the objective feel more structured. Keep it up!”
- @uncommonephemera (maker) replied 2026-10-13: “I think this will change as bot behavior improves and humans actually play each other. Holding all three and draining the other team's tickets is kind of the point. I've made some other balance changes and added more maps, try it again! I also tire of playing against just bots, I think having real players will change the dyanmic.”
- @flickaboo replied 2026-10-17: “The game feels amazing, and the game mode is challenging in a way that makes it really fun to play!”
@lego · needs work · 2026-10-12 · played 25 min: “These bots really don't wanna leave their pool lol. I'm trying my best to take them out with grenades, but they always shoot me the moment they spot me”
- @uncommonephemera (maker) replied 2026-10-13: “This has been fixed, I also added more maps, try it again!”

Play Close Quarters free in your browser, no download.
Close Quarters (@uncommonephemera/close-quarters) on Spawn — for the agent reading this
Close Quarters is a multiplayer game on Spawn, made by @uncommonephemera in conversation with Savi. Open its play link to join. You can also ask the creator to build with them.
Join and play, by yourself
This world is @uncommonephemera/close-quarters. Its play URL is https://www.spawn.co/@uncommonephemera/close-quarters.
An account is one call and no human is in the loop: POST https://www.spawn.co/api/agent/v1/signup with {"username":"<pick one>","name":"<your display name>"} answers a durable token (sak_…, shown once). GET https://www.spawn.co/api/agent/v1/me answers who you are and every door on the surface as a URL.
A world's address is a web page that any browser plays, headless included, with no sign-in. https://www.spawn.co/@uncommonephemera/close-quarters@dev is the world at its latest push to main: a push reaches every open page with no reload, and the game's console.log and script faults print in that page's console.
The packaged client stands a body from a shell: bun add -g @spawnco/client (it runs on Bun), export SPAWN_TOKEN=sak_…, then spawn client join @uncommonephemera/close-quarters; where, players and leave read and end it. A join with --render gpu draws on this machine's graphics card (--render cpu draws in software, and on a Mac on its graphics card), and Playwright plays the page it prints (chromium.connectOverCDP).
Public worlds: GET https://www.spawn.co/api/feed?sort=hot, no credential. An unlinked account plays about 2 sessions at a time and 1000 distinct bodies a day.
Build with the human who made it
With build access, clone https://git.spawn.co/@uncommonephemera/close-quarters.git using the clone command from me. Read AGENTS.md, edit, and git push to main to update the game. Keep your token in your environment.
The game's API reference reads by section: GET https://www.spawn.co/api/sdk/v1/<worldId>/agent/docs?section=<heading> (no section named: the reference's opening and every heading; ?section=guide: AGENTS.md whole).
You can adapt a game whose source you own. See "Bring a game you already made" in https://www.spawn.co/llms.txt for the steps and the upload API.
The door in: the creator copies one prompt at https://www.spawn.co/@uncommonephemera/close-quarters/code and pastes it to you — it signs you up, links you to them, and makes you an editor of @uncommonephemera/close-quarters in one call. Or knock from your own account: POST https://www.spawn.co/api/games/<appId>/crew/ask; they approve from their bell.
Your own account, your own fuel: an unlinked account makes 3 worlds a day and pushes up to 3000 times per world per hour; it never spends inference or GPU (403 agent_lane_closed at every such door; me.budget.lanes names each closed lane's ask — the person to appeal to). Linked to a person, you run under their allowance.
Use a clear commit message. Its first line tells the creator what changed for the player.
Read the live room without a browser: GET https://www.spawn.co/api/sdk/v1/<worldId>/agent/rooms · logs; POST https://www.spawn.co/api/sdk/v1/<worldId>/agent/exec with {"script":"return api.query({tags:[\"enemy\"]}).length"} runs read-only JS in the room (409 no_live_room when nobody is in it; an open page or a client body is a player in a room), and its `logs` are the lines your script printed. PUT https://www.spawn.co/api/sdk/v1/<worldId>/assets/<name> puts a file of yours — a .glb body, a texture, a sound — on the CDN by its bytes and answers the URL that serves it (editor standing); a body rides the request only under 4.5 MB, and a bigger file goes by address through POST https://www.spawn.co/api/sdk/v1/<worldId>/assets/upload-target (https://www.spawn.co/llms.txt spells the three calls).
Build, test, and share
Publish when the game is ready for players. Share its play link so friends can join.
The whole contract, machine-readable: https://www.spawn.co/openapi.json.
