Ship --> game.json
Unknown fields are rejected. Record a richer multiplayer profile in notes, not in this file.
{
"schemaVersion": 1,
"name": "arena",
"entrypoint": "index.html",
"multiplayer": {
"enabled": true,
"authority": "host",
"maxPlayers": 8,
"tickRate": 30
},
"networkAllowlist": []
}
| Field | Required | Rules |
|---|---|---|
schemaVersion | Yes | Must be 1 |
name | Yes | 1–80 characters |
entrypoint | Yes | Relative *.html path. No leading /, no .. |
multiplayer | No | If present, all four subfields are required |
multiplayer.enabled | true or false | |
multiplayer.authority | "host" or "server". "server" requires step | |
multiplayer.maxPlayers | Integer 1–16 | |
multiplayer.tickRate | Integer 1–30 | |
networkAllowlist | No | Up to 10 absolute URIs. Default [] |
tickRate is a deployment-time room-loop hint. Do not copy a realtime snapshotHz into it. Realtime publish is a separate ceiling (default 30 Hz, cap 100 Hz) set on the room.
npx lokiplay init and connect write this file if it is missing. Default maxPlayers is 8 and tickRate is 30. Default authority is "host". "server" is valid only with step (abiVersion, modulePath, sha256).
A new manifest does nothing to the live game until you ship. The play link keeps serving the last activated release.