Realtime · Socket.IO
Custom channels
Broadcast named event to project
javascript
socket.emit("custom:broadcast", {
projectId: "6958511e8397f2dfa88090d8",
event: "board_updated",
payload: { columnId: "done", cardId: "x" },
})socket.emit("custom:broadcast", {
projectId: "6958511e8397f2dfa88090d8",
event: "board_updated",
payload: { columnId: "done", cardId: "x" },
})Others receive event name custom:board_updated:
json
{
"columnId": "done",
"cardId": "x",
"sender": "69566c4cf0bdc3ae3e81b108",
"timestamp": "2026-03-18T10:00:00.000Z"
}{
"columnId": "done",
"cardId": "x",
"sender": "69566c4cf0bdc3ae3e81b108",
"timestamp": "2026-03-18T10:00:00.000Z"
}Legacy passthrough
javascript
socket.emit("custom:event", {
projectId: "6958511e8397f2dfa88090d8",
foo: "bar",
})socket.emit("custom:event", {
projectId: "6958511e8397f2dfa88090d8",
foo: "bar",
})Others get custom:event: { foo, userId, timestamp }.
Direct message
javascript
socket.emit("custom:message", {
targetUserId: "69566c4cf0bdc3ae3e81b108",
message: "Ping",
type: "text",
})socket.emit("custom:message", {
targetUserId: "69566c4cf0bdc3ae3e81b108",
message: "Ping",
type: "text",
})