Get from an empty Godot project to two players moving on screen in under five minutes. No backend to write, no servers to configure — one autoload, one key, one node.
What you need
- Godot 4.3+
- A SpawnWeaver project key (
pk_…) — free, from the dashboard
1. Get a project key
Sign up at the dashboard, create a project, and copy its public key
(pk_…). The public key is safe to ship inside your game — it identifies your project,
nothing more. (Never put the sk_… secret key in a game client.)
2. Install the SDK
From your Godot project root (the folder with project.godot):
iwr https://spawnweaver.dev/install.ps1 -UseBasicParsing | iex # Windows
curl -fsSL https://spawnweaver.dev/install.sh | bash # macOS / Linux
This downloads the addon into addons/spawnweaver/. See
Installation for manual install and upgrade options.
3. Enable and configure the plugin
- In Godot: Project → Project Settings → Plugins → enable "SpawnWeaver".
- Open the SpawnWeaver dock (right panel).
- Click Get a free key — your browser opens, you approve (signing up right there if you're new), and the key appears in the dock by itself: saved and connection-tested, nothing to copy.
Already have a key? Paste it into Project key, click Save, then
Test connection. Either way the dock writes res://spawnweaver.cfg and the
autoload reads it automatically — no code needed for configuration.
4. Add multiplayer
Option A — generated starter scene (zero code)
In the SpawnWeaver dock, click Generate starter scene. It creates
res://spawnweaver/StarterGame.tscn: a ready-to-run scene with a Create room button, a
Join field, and a movable square per player, already synced over the network.
Option B — drop-in lobby node (zero code)
Add a LobbyBrowser node to your menu scene (Create Node dialog → LobbyBrowser). It renders a full lobby — name field, Create room, Quick match, join by code, live public-room list — and connects on its own. Hook one signal to enter your game:
$LobbyBrowser.entered_room.connect(func(room):
get_tree().change_scene_to_file("res://arena.tscn"))
Option C — ten lines of GDScript
extends Node
func _ready() -> void:
await SpawnWeaver.start()
var result := await SpawnWeaver.create_room()
if result.ok:
print("Room code: ", result.room.code) # share this with player 2
# Player 2 runs this instead of create_room():
# await SpawnWeaver.join_room("4V8772")
That is a working multiplayer session. For player movement you usually need zero
further networking code: drop a PlayerSpawner node into your level, assign your
player scene in the Inspector, and put a SpawnSync node inside that player scene. The
local copy sends its transform; remote copies interpolate smoothly. See
State sync.
5. Run two players
- In the SpawnWeaver dock, click Playtest ×2 — two game windows open, each with its own player identity. (Godot's own Debug → Run Multiple Instances works too.)
- In window one, create a room and note the code (e.g.
4V8772). - In window two, join with that code.
Both squares move, each controlled by its own window. You have multiplayer.
No internet? No account yet?
You don't need either to start building. SpawnWeaver.start_offline() runs a complete
local session in-process — rooms, state sync, storage, the same signals and awaits —
with no server and no key. Build your whole multiplayer flow offline, then swap one
line (start_offline() → start()) when you're ready to go online. See
Offline mode.
Where to go next
| Goal | Read |
|---|---|
| Understand the moving parts | Core concepts |
| Rooms, codes, and rosters | Rooms |
| Automatic movement sync | State sync |
| Skill-free matchmaking | Matchmaking |
| Persistent player saves | Player storage |
| Full API reference | SDK reference |