Who owns what
PEERLESS coordinates identity, parties, invitations, matchmaking, credentials and optional hosting. Your game owns its simulation, rules, validation, snapshots, persistence and reconciliation. A party is never implicitly the match roster.
Choose a path
| Path | Networking value | Best for | Capacity |
|---|---|---|---|
| Relay rooms | peerless_rooms | Small games without a backend; small event messages. | Up to 16 players |
| Listen hosting | peerless_rooms with hosting.mode: "listen" | One player's browser hosts over WebRTC. | Up to 16 players |
| Your own servers | developer_backend | You already run regional servers. | Yours |
| Managed Node | managed_backend | PEERLESS runs your compiled Node backend. | From your manifest |
| Forge Host | managed_backend with hosting.mode: "forge" | One dedicated container per game, $10/month. | Soft cap of 50 |
Persistent worlds need your own servers or Forge Host. Listen matches end when the match ends.
Parties, rooms and squads
| Concept | Lifetime | Owner |
|---|---|---|
| Party | Persistent group of friends | PEERLESS |
| Launch cohort | The ready members of one shared launch | PEERLESS |
| Room or match | One network session | Your networking path |
| Match squad | A temporary team in a match | Your game |
Show the party with Peerless.social, but queue the verified cohort with Peerless.sessions. Random teammates belong to the match squad, never to the persistent party.
Declare what you support
Multiplayer builds declare their models (host_join, queue, drop_in), modes with party, squad and match capacities, stranger fill and join-in-progress behavior. Declare only features you have tested; the declaration is locked with the uploaded release.
{
"protocol": 2,
"models": ["host_join", "queue"],
"defaultMode": "casual",
"modes": [
{
"id": "casual",
"label": "Casual",
"partyCapacity": 4,
"squadCapacity": 4,
"matchCapacity": 8,
"strangerFill": true,
"joinInProgress": false
}
],
"visibility": ["public", "private"],
"region": "us-east"
}