Real-time multiplayer chat for Godot 4 games — without running your own chat servers.
You create a studio account, drop in one node, and your players can talk in isolated rooms. Rooms and chat history are completely separated by app_id, so different games never see each other. Players connect with short-lived JWTs that you mint on your own game server.
No infrastructure to maintain. Just chat.
Free tier limits:
- 20 concurrent connections
- 2 rooms
- 500 messages per day
- 20 messages of history returned on join
Higher limits are available on paid plans.
This addon does not host chat itself. The live API is https://aponteplace.io. Create a studio account at https://bgdchat.com to get an app_id and a server secret.
Important: Do not put an
sk_live_secret in a shipped game. Mint player tokens on a trusted game server. The Godot client only stores the player JWT and talks to the WebSocket.
Install
- Copy
addons/bdg_chatinto your project. - Project → Project Settings → Plugins → enable BDG Chat.
- Add a
BDGChatClientnode, or openaddons/bdg_chat/example/chat_demo.tscn.
In a game
$Chat.app_id = "app_xxxxxxxx"
$Chat.player_token = player_jwt_from_your_game_server
$Chat.connect_to_chat()
# Wait for the connected signal
await $Chat.connected
$Chat.join("lobby")
$Chat.send_chat("hello")
Exports
- ws_url (default wss://aponteplace.io/ws)
- app_id
- player_token
Methods
- connect_to_chat()
- join(room)
- send_chat(text)
- leave()
- close()
- is_socket_open()
Signals
- connected
- disconnected(code, reason)
- joined(room, user_id, display_name, users_online)
- chat_received(text, display_name, user_id, ts, room)
- user_joined(user_id, display_name)
- user_left(user_id, display_name)
- error_received(code, message)
- raw_event(payload)
The client sends a ping every 25 seconds. Minting player tokens (server only). BDGPlayerTokens.mint() POSTs to https://aponteplace.io/apps/{app_id}/player-tokens with Authorization: Bearer sk_live_... Use this from a trusted server or a private tool — never from a released client.
Protocol
- Game server: POST /apps/{app_id}/player-tokens with the studio secret.
- Client connects to: wss://aponteplace.io/ws
- Join: { "type":"join", "room":"lobby", "app_id":"app_xxx", "token": PLAYER_JWT }
- Chat: { "type":"chat", "text":"hello" }
- Events: joined, chat, user_joined, user_left, error
Requirements
- Godot 4.7 or newer
- A BDG Chat studio account and app_id
- A player token minted by your game server
The live API and product are from XStreamIO.
License: MIT
Copyright (c) 2026 XStreamIO / Misael Aponte
Site: https://bgdchat.com
API: https://aponteplace.io
Company: https://xstreamio.com
Changelog for version V1.0.0-alpha
No changelog provided for this version.