GodotWithU is a lightweight, pure GDScript real-time collaboration plugin for the Godot Engine (v4+). It allows multiple developers to work on the same Godot project simultaneously over a local network or VPN, similar to Unreal Engine's Multi-User Editing.
- Real-Time Scene Sync: Instantly replicate node additions, deletions, translations, and property changes across all connected Godot editors.
- CRDT Script Sync: Collaborative coding with Conflict-free Replicated Data Types (Logoot). Edit the same
.gdfile simultaneously, Google Docs style. - Node Locking: When a remote peer selects a node, it becomes locked (shown with a lock icon in the scene tree) to prevent conflicting edits. Locks auto-expire after 30 seconds of inactivity.
- Pure GDScript Networking: Uses Godot's built-in
ENetMultiplayerPeerindependently from the SceneTree API. No C++ GDExtension compilation required. - Host & Join Workflow: One editor acts as the Host/Relay Server, and others join as Clients via configurable IP and Port.
- Action Interception: Transparently hooks into Godot's
EditorUndoRedoManagerto broadcast your edits. - Initial State Sync: When a new peer joins, the host automatically sends the full scene state and all CRDT script buffers so the joiner is immediately up to date.
- Download the latest release from the Releases tab or clone this repository.
- Copy the
addons/godot_with_ufolder into your Godot project'saddons/directory. - Open your Godot Project.
- Go to Project -> Project Settings -> Plugins and enable GodotWithU.
- In the Godot Editor, look for the GodotWithU dock panel (usually on the top right).
- Leave the Port as default (e.g.,
7654) or change it if necessary. - Click Host. Your editor is now broadcasting changes and waiting for peers.
- Another developer opens the same project on their machine (or another Godot instance on your machine locally).
- In the GodotWithU dock, enter the IP address of the host machine (defaults to
127.0.0.1for local testing). - Set the Port to match the host.
- Click Join.
Once connected, any changes made to the 3D/2D Scene or Scripts will mirror instantly!
Instead of relying on heavy C++ implementations or modifying the main SceneTree.multiplayer, GodotWithU utilizes an independent NetworkManager running an ENetMultiplayerPeer. The plugin actively polls for messages every 0.05 seconds and serializes intercepted Godot actions into binary packets, broadcasting them reliably across peers.
| Layer | Strategy | Details |
|---|---|---|
| Script Editing | CRDT (Logoot) | Each character has a unique, mathematically sortable position ID. Concurrent inserts at the same location are resolved deterministically by comparing site IDs. No coordination needed. |
| Node Selection | Locking | When a remote peer selects a node, it is locked for that peer. Other peers cannot modify or delete locked nodes. Locks auto-release when the peer changes selection, disconnects, or after a 30-second timeout. |
| Property Changes | Last-Write-Wins | Simultaneous property changes to the same node use last-write-wins ordering based on receive order. The locking system prevents most simultaneous edits to the same node. |
| Node Add/Delete | Idempotent | Duplicate node_add actions are ignored if the node already exists. Delete actions silently succeed if the node is already gone. |
- Remote node instantiation is validated against a whitelist of safe Godot node types.
- Packet size is limited to 8 MB to prevent memory exhaustion.
- Peer IDs use SHA-256 derived identifiers to minimize collision risk.
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
If you find this plugin useful, consider supporting the development:
This project is licensed under the MIT License - see the LICENSE file for details.
