Install Asset
Install via Godot
To maintain one source of truth, Godot Asset Library is just a mirror of the old asset library so you can download directly on Godot via the integrated asset library browser
Quick Information
QTI Neon is a minimal, game-agnostic, relay-based UDP multiplayer protocol library.Clients never communicate directly. The relay routes packets by destination ID in the packet header, keeping NAT traversal trivial and host addresses private. The host is just another participant — it has no special network position, only a special protocol role.Neon features:- Relay-mediated UDP with automatic NAT traversal- Connection handshake with host-assigned client IDs and session tokens- Token-based reconnection (5-minute window by default)- Opt-in reliable delivery with retransmit and duplicate detection- Per-source rate limiting (100 pps default)- Auto-ping keepalive- Optional DTLS 1.2/1.3 encryption — relay-terminated, transparent to game code- Zero game-specific logic in the relay or library
QTI Neon — Godot Addon
Relay-based UDP multiplayer library for Godot 4.
A NeonRelay server routes packets between a NeonHost and any number of NeonClients. Clients never connect to each other directly, so NAT traversal is trivial and host addresses stay private.
Classes
| Class | Role |
|---|---|
NeonRelay |
Relay server — run this on a VPS |
NeonHost |
Game session host |
NeonClient |
Game session client |
NeonConfig |
Shared configuration |
DtlsConfig |
Optional DTLS encryption |
GamePacketRegistry |
Register game packet type IDs |
BatchAckManager |
Batch-acknowledge reliable packets |
ReliablePacketManager |
Reliable delivery with retransmit |
Quick start
# Host
var host := NeonHost.new(session_id, "relay.example.com:7777")
host.set_client_connect_callback(func(cid, name, sid): print("connected: ", name))
host.set_unhandled_packet_callback(func(type, sender, payload): print("packet from ", sender))
Thread.new().start(func(): host.start_and_run())
# Client
var client := NeonClient.new("PlayerName")
client.set_unhandled_packet_callback(func(type, sender, payload): print("packet from ", sender))
if client.join(session_id, "relay.example.com:7777"):
Thread.new().start(func(): client.run())
client.send_packet(PackedByteArray([0x01, 0x02]), 0x10, 1)
License
MIT — see LICENSE.
Full documentation and source: https://github.com/quiet-terminal-interactive/qtineon
QTI Neon is a minimal, game-agnostic, relay-based UDP multiplayer protocol library.
Clients never communicate directly. The relay routes packets by destination ID in the packet header, keeping NAT traversal trivial and host addresses private. The host is just another participant — it has no special network position, only a special protocol role.
Neon features:
- Relay-mediated UDP with automatic NAT traversal
- Connection handshake with host-assigned client IDs and session tokens
- Token-based reconnection (5-minute window by default)
- Opt-in reliable delivery with retransmit and duplicate detection
- Per-source rate limiting (100 pps default)
- Auto-ping keepalive
- Optional DTLS 1.2/1.3 encryption — relay-terminated, transparent to game code
- Zero game-specific logic in the relay or library
Reviews
Quick Information
QTI Neon is a minimal, game-agnostic, relay-based UDP multiplayer protocol library.Clients never communicate directly. The relay routes packets by destination ID in the packet header, keeping NAT traversal trivial and host addresses private. The host is just another participant — it has no special network position, only a special protocol role.Neon features:- Relay-mediated UDP with automatic NAT traversal- Connection handshake with host-assigned client IDs and session tokens- Token-based reconnection (5-minute window by default)- Opt-in reliable delivery with retransmit and duplicate detection- Per-source rate limiting (100 pps default)- Auto-ping keepalive- Optional DTLS 1.2/1.3 encryption — relay-terminated, transparent to game code- Zero game-specific logic in the relay or library