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

  1. In Godot: Project → Project Settings → Plugins → enable "SpawnWeaver".
  2. Open the SpawnWeaver dock (right panel).
  3. 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

  1. 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.)
  2. In window one, create a room and note the code (e.g. 4V8772).
  3. 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