Skip to main content
Bun’s WebSocket implementation includes built-in pub/sub support.

Pub/Sub Server

server.ts
Bun.serve({
  fetch(req, server) {
    server.upgrade(req);
  },
  websocket: {
    open(ws) {
      ws.subscribe("chat");
    },
    message(ws, message) {
      // Publish to all subscribers
      ws.publish("chat", message);
    },
  },
});

Multiple Channels

Bun.serve({
  websocket: {
    open(ws) {
      ws.subscribe("lobby");
    },
    message(ws, message) {
      const data = JSON.parse(message);
      
      if (data.action === "join") {
        ws.subscribe(data.channel);
        ws.send(JSON.stringify({ joined: data.channel }));
      } else if (data.action === "send") {
        ws.publish(data.channel, data.message);
      }
    },
  },
});
See WebSocket API for complete documentation.

Build docs developers (and LLMs) love