Skip to content
PEERLESSDocs

Multiplayer overview

Pick the multiplayer path that fits your game, from relay rooms to managed servers.

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

PathNetworking valueBest forCapacity
Relay roomspeerless_roomsSmall games without a backend; small event messages.Up to 16 players
Listen hostingpeerless_rooms with hosting.mode: "listen"One player's browser hosts over WebRTC.Up to 16 players
Your own serversdeveloper_backendYou already run regional servers.Yours
Managed Nodemanaged_backendPEERLESS runs your compiled Node backend.From your manifest
Forge Hostmanaged_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

ConceptLifetimeOwner
PartyPersistent group of friendsPEERLESS
Launch cohortThe ready members of one shared launchPEERLESS
Room or matchOne network sessionYour networking path
Match squadA temporary team in a matchYour 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.

Multiplayer capabilities (protocol 2)
{
  "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"
}