Multiplayer by default
The Summer SDK contract is multiplayer-native. The default example is host-authoritative: the server runs the rules, clients render synced state, and amin_players of 1 means the same build is also a solo game. You write SummerGame hooks
and synced state in GDScript; the Summer SDK defines the creator-facing contract.
The SDK/runtime surfaces on this page are scaffolded, not a deployed hosted gameplay path.
Check platform capability status
before making production promises.
What you build here:
- extends
SummerGame, - server-authoritative gameplay updates (
Summer.is_server()), - player-visible state via
set_synced, - 1–8 players from the same code path,
- passes local testing and the submission pipeline.
Want an AI agent to run this whole page for you? Point it at /agent-setup — the prompt there contains a complete verified template (project files, local SDK stubs, export preset) and the publish calls.
Step 1: Create manifest.json
min_players: 1, max_players: 8 is the multiplayer-native default — ship it unless your design demands otherwise. Paths are relative to the manifest at the pack root.
Step 2: Choose Your Player Path
3D Action Template (fastest start)
- set
player.tscnroot script tores://sdk/summer_character_3d.gd - use
apply_default_movement(...)fromSummerGame.
Custom Genre Path (2D/card/RTS/puzzle)
- make your own script extending
SummerPlayer - sync your own state model (
set_synced("hand_count", ...), etc.).
Step 3: Build main.gd
main.tscn a SpawnPoints node with at least 4 child Node3D spawn markers and a Players node — the multiplayer defaults assume them.
Step 4: Add One Multiplayer Rule
Example scoring rule — note it runs only on the server path, and clients see it throughset_synced:
Step 5: Local Test
Start with the canonical one-process Summer Engine smoke checks. If your starter project includes the optional loopback runner, also use it to exercise a local server/client path:- the canonical agent prompt validates import, parsing, smoke execution, banned patterns, and pack contents with local SDK stubs;
- the optional loopback runner starts a local headless server and connects a client to localhost;
- neither path validates production platform services, ticket redemption, or hosted matchmaking.
Step 6: Export and Publish
Export a game-only.pck, then publish it through the live release API (create game → presigned upload → server-verified finalize → manual review):
A human reviews every release. Approval assigns published catalog status and makes the
release available under the documented authenticated download rules. Browser and
desktop-shell play of uploaded Summer games are not live yet.
What “Done” Looks Like
- All lifecycle hooks implemented.
- Server authority enforced (
Summer.is_server()). - Player-visible state comes from
set_synced. - Works with 1 player and with several (
min_players: 1). - Canonical Summer Engine smoke checks pass.
- Optional local loopback runner passes when present.
- Export contains only game files; release enters
pending_review.
Previous: Create a Summer game
Return to project creation and the GDScript starting point.
Next: Choose Summer SDK capabilities
Use the lifecycle hub to select the SDK systems your game needs.

