What is the difference between GD-Sync and Godot's built-in multiplayer API?
Both GD-Sync and Godot's built-in High-Level API are peer-to-peer at their core, meaning gameplay logic runs locally. The difference lies in the infrastructure and workflow.
While Godot’s native networking gives you complete control over your architecture, raw ENet requires the host to manually open a port on their router (port forwarding) or forces you to implement complex NAT punch-through logic, which is notoriously unreliable and often fails. To avoid this, you would have to build and host your own relay server.
GD-Sync removes these infrastructure barriers entirely. It provides a globally managed relay service out of the box, where players connect outbound to GD-Sync servers, bypassing NAT and router configuration completely. Paired with a clean, straightforward API and powerful custom nodes, GD-Sync is significantly easier to use and drastically reduces your setup time.
GD-Sync vs Godot Built-in Architecture Comparison
Property
GD-Sync
Godot Built-in
Topology
P2P via managed relay
P2P (ENet) or client-server
Game logic
Locally on clients / host client
Locally on clients / your server
Relay infrastructure
Managed by GD-Sync
You build or pay for it
Transport
ENet, WebSocket
ENet, WebSocket, WebRTC
Cheat resistance
Moderate, logic runs locally
High, but only with a dedicated server
Full Feature Comparison
Every major decision point between GD-Sync and the built-in API, in one table.
GD-Sync vs Godot 4 High-Level Multiplayer API comparison for developers
Feature
GD-Sync
Godot Built-in
Setup & Installation
Installation
Asset Library, 2 clicks
Built into Godot
First working session
~10 minutesConnect and create session easily
Hours to daysManual transport and port config
Lines to connect
~10 lines
50–100+ lines
Architecture & Networking
Dedicated server support
NoPurely P2P via managed relay
YesFull authoritative server support
Offline / LAN Play
YesFully supported for local networks
YesNative local network support
Port forwarding
Not requiredManaged relay handles connections
Required for P2PHost must open port or setup punch-through
NAT traversal
Automatic
Manual
Web export support
Yes, auto TCP fallback
Yes, manual WebSocket integration
Cross-platform play
SeamlessWeb players can join PC players directly
FragmentedWebSockets and ENet cannot mix natively
Encryption
Built in
Manual
Variable Synchronisation
Sync mechanism
PropertySynchronizer NodeEasy configuration in Inspector, no code
The same goal, two players connected in a shared session. The difference in boilerplate is why most Godot developers choose GD-Sync.
With GD-Sync, you connect to the managed global relay and create a session in about 10 lines of code. With Godot's native ENetMultiplayerPeer, you have to write separate client and server logic, handle IP addresses manually, and crucially, either force your host to configure port forwarding on their router or implement NAT punch-through.
GD-Sync (~10 Lines)
# Connect to the managed relay and automatically handle NATextendsNodefunc_ready() -> void:
# 1. Listen for connection and lobby eventsGDSync.connected.connect(_on_connected)
GDSync.lobby_created.connect(_on_lobby_created)
# 2. Connect to the GD-Sync global networkGDSync.start_multiplayer()
func_on_connected() -> void:
# 3. Create a public lobby for up to 4 playersGDSync.lobby_create("MyLobby", "", true, 4)
func_on_lobby_created(lobby_name: String) -> void:
# 4. Join the lobby you just created.# Other players can join it using the lobby_name.GDSync.lobby_join(lobby_name, "")
Godot Built-in (ENet Implementation)
# NOT global out-of-the-box. Remote play requires manual IP# configuration, port forwarding, or custom NAT punch-through.extendsNodefunc_ready() -> void:
multiplayer.peer_connected.connect(_on_peer_connected)
multiplayer.peer_disconnected.connect(_on_peer_disconnected)
multiplayer.connected_to_server.connect(_on_connected)
multiplayer.connection_failed.connect(_on_failed)
# --- Server Side (Host) ---funcstart_server() -> void:
varpeer = ENetMultiplayerPeer.new()
ifpeer.create_server(7777, 32) != OK:
print("Host error")
returnmultiplayer.multiplayer_peer = peer# Global play requires Port Forwarding or NAT punch-throughprint("Server started")
# --- Client Side (Joiner) ---funcjoin_server(ip: String) -> void:
varpeer = ENetMultiplayerPeer.new()
ifpeer.create_client(ip, 7777) != OK:
print("Connect error")
returnmultiplayer.multiplayer_peer = peer# --- Network Callbacks ---func_on_peer_connected(id: int) -> void:
print("Peer connected: ", id)
# Still required: Manual RPCs, matchmaking, etc.func_on_peer_disconnected(id: int) -> void:
print("Peer disconnected: ", id)
func_on_connected() -> void:
print("Connected to host")
func_on_failed() -> void:
print("Connection failed")
Lobbies & Matchmaking
Building a lobby system from scratch in Godot requires a matchmaking server, session browser, and database infrastructure.
GD-Sync includes a first-class lobby system natively. GDSync.lobby_create() allows you to set player limits, passwords, and custom tags (like game mode or map). Players can browse active sessions using GDSync.get_public_lobbies(), and if a host disconnects, GD-Sync automatically handles host migration, firing the host_changed signal on all connected clients.
When to Choose Each
When to choose GD-Sync vs Godot built-in multiplayer API
Scenario
Recommended
Reason
Co-op & PvE Games
GD-Sync
No port forwarding, instant lobbies, auto node sync
Party & Casual PvP
GD-Sync
Built-in lobbies, host migration
Game Jams & Prototypes
GD-Sync
Working multiplayer session in under 10 minutes
Web Browser Exports
GD-Sync
Native UDP with auto TCP fallback for web
Cloud Saves & Leaderboards
GD-Sync
Integrated player accounts and cross-device data
Highly Competitive PvP
Godot + Dedicated Server
Needs custom dedicated server for strict authority
Custom Servers
Godot Built-in
Studio builds and pays for custom infrastructure
Frequently Asked Questions
Godot's built-in API is powerful but complex, requiring you to manage NAT traversal, port forwarding, write custom @rpc functions, and build your own lobby system from scratch. GD-Sync is tailored specifically for ease of use, making multiplayer a breeze even for newcomers. It replaces that complexity with a managed relay, PropertySynchronizer for automatic variable sync, and out-of-the-box lobbies, matchmaking, cloud storage, and leaderboards.
Yes. GD-Sync is designed as a complete, easy-to-use replacement for Godot's High-Level Multiplayer API to streamline your workflow. You do not need to mix GDSync calls with ENetMultiplayerPeer or MultiplayerSynchronizer nodes, and doing so in the same project is not supported.
Yes. GD-Sync automatically reassigns a new host when the current one disconnects, firing GDSync.host_changed(is_host: bool) on all clients. The first player to join is the initial host. Manual transfer is also available via GDSync.set_host(client_id).
GD-Sync's own documentation is explicit: peer-to-peer is vulnerable to cheaters because gameplay logic runs locally on each client. For co-op, party games, and casual PvP this is fine. For highly competitive PvP where cheating must be prevented architecturally, use Godot's built-in API with a dedicated authoritative server.
Ready to Start?
If GD-Sync is the right fit, the getting started tutorial walks through the full setup in 10 minutes. For the complete API reference see the official documentation.