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

Socket.IO and Engine.IO client addon that supports both HTTP long-polling and Websocket
Socket.IO Godot Client
This is a Socket.IO and Engine.IO client addon for Godot written in GDScript that supports both HTTP long-polling and Websocket.
This is still a work in progress and is not yet fully featured. Please make sure to check out the #features section before using it. The current implementation is functional and works, but there are some known cases that have not been implemented or covered yet (like binary messages)
Compatibility
Godot | plugin version | Socket.IO server |
---|---|---|
4.3 | 0.1.x | 4.x |
I havenβt checked the current implementation with older versions of the Godot and Socket.IO server. I hereby ask you to do this and inform me if it works or not.
Quickstart
Add the Socket.IO node to your tree and fill out the parameters in the Inspector, connect the signals via code or IDE, and use it.
@onready var client: SocketIO = $SocketIO
func _ready() -> void:
client.socket_connected.connect(_on_socket_connected)
client.event_received.connect(_on_event_received)
func _on_connect_pressed() -> void:
client.make_connection()
func func _on_socket_connected() -> void:
client.emit("hello")
client.emit("some_event", { "value": 10 })
func _on_event_received(event: String, data: Variant, ns: String) -> void:
print("event %s with %s as data received" % [event, data])
Features
Name | Status | Description |
---|---|---|
HTTP long-polling | βοΈ | |
Websocket | βοΈ | |
WebTransport | β | requires: Add support for WebTransport in Godot |
auto upgrade | βοΈ | |
emit events | βοΈ | |
listen to events | βοΈ | |
namespaces | βοΈ | Multiplexing |
custom path | βοΈ | |
auth | βοΈ | |
automatic reconnection | β | reconnection attempts, delay, factor |
connection timeout | β | if the client does not receive a ping packet within pingInterval + pingTimeout, then it SHOULD consider that the connection is closed (link) |
query | β | additional query parameters that are sent when connecting a namespace socket.handshake.query |
extra headers | β | |
emit with acknowledgement | β | acknowledgement |
Websocket only | β | connect to Websocket only (disable polling) |
binary messages | β | |
noop packet | β | |
error handling for HTTP requests | β | inside request.gd |
custom serializer | β | Custom parser |
C# API | β |
License
MIT
Socket.IO and Engine.IO client addon that supports both HTTP long-polling and Websocket
Reviews
Quick Information

Socket.IO and Engine.IO client addon that supports both HTTP long-polling and Websocket