5 min read

Cozy Coast multiplayer runs on zero servers

Cozy Coast shipped a multiplayer hub with no backend at all. Steam handles lobby discovery, connection brokering and packet relay, and the host relays player state.

Cozy Coast shipped multiplayer this week and I run no servers for it. Not a small managed backend. Not a serverless function that wakes up for lobby matching. None.

The game is an idle fishing widget that sits in the corner of your screen while you work. Until this week that was the whole thing: one window, one dock, one player. Now you can step off the dock and walk into a hub village, and your Steam friends can walk it with you.

Where does the multiplayer actually run?

Steam does the parts that normally need infrastructure. It holds the lobby list, so a player asking “what hubs are open right now” is asking Valve’s matchmaking, not a service I pay for. It brokers the connection between two machines. And when a direct route between them is not available, which happens constantly behind home routers and corporate NAT, Steam relays the packets itself.

Once a connection exists, the host is authoritative. Every client sends its position to the host, and the host fans that out to everyone else in the room. Your outfit rides along with it, so the clothes you picked in the wardrobe are the clothes the other anglers see.

Steam brokers the connection, the host relays state A joining client queries the Steam lobby list, connects to a host through Steam's brokering or relay, and the host fans player state out to the other clients. Your game joining client Steam lobby list discovery, no service of mine Steam networking broker, then relay if needed Host relays every position other anglers in the hub other anglers in the hub
Discovery and transport are Steam's. State is the host's. Nothing in the middle belongs to me.

My infrastructure bill for the entire feature is zero, and there is nothing to be paged about at two in the morning. For a solo project that second part matters more than the first.

The trade-off, named plainly

When the host leaves, the room ends. Everyone is walked back to their own coast, where their line goes straight back in the water. There is no host migration.

I could have built it. Migrating a host means electing a new one, transferring authoritative state, and handling the window where half the room thinks one machine is in charge and half thinks another is. It is a genuine distributed systems problem, and it is a lot of code to make a village survive the departure of the person whose village it was.

The hub is somewhere you drop into for ten minutes between casts. Pretending a room can outlive its host would have cost weeks and bought very little. So the room ends, and the game tells you clearly that it is ending.

What the saves do

Progress lives in Steam Cloud, so your coast follows you between machines. The save file is encrypted with a key derived from the Steam ID that owns it.

That gets two things at once. The save is not casually editable, so a text editor and five minutes will not give you a million coins. And it is not portable between accounts, so a maxed save cannot be passed around. The cost is that a save is genuinely tied to its account, and I have accepted that. Alongside it, an unreadable save is never overwritten and a local backup is kept, because the failure mode I actually fear is not cheating. It is a corrupt write eating somebody’s hundred hours.

What is true in this release, and what is not

Worth being specific, because “multiplayer” implies a lot of things it does not do here.

It does: host a hub or join one, walk the same village and see each other move, show the outfit you are wearing, four emotes on a hover wheel, and a host player list with a kick and a ban that you can lift later from a Bans tab.

It does not: share progression or hand out co-op rewards. The hub earns nothing. Coins are still tied to fish caught at your own rod. The shops in the village are placeholders with a “coming soon” board on every building, because the kitchen, the crops and the bar are still future work. There is no text chat and no voice chat, neither of which exists. Eight players is the working default rather than a locked decision.

There is also no text chat on purpose. The whole premise is a small window you ignore while you work, and a chat box in the corner of your screen is the opposite of ignorable.

This has been tested with a handful of players, not a crowd. If you want to help me find where it falls over, it is on Steam for Windows and macOS, and the coast is at cozycoast.website.

Let's connect.

Always happy to talk shop, compare notes, or just say hi. Email or LinkedIn is the fastest way to reach me.

Get in touch