Skip to main content
Bun provides built-in WebSocket support via Bun.serve().

Basic WebSocket Server

server.ts
Bun.serve({
  port: 3000,
  fetch(req, server) {
    const success = server.upgrade(req);
    if (success) return undefined;
    return new Response("Upgrade failed", { status: 500 });
  },
  websocket: {
    open(ws) {
      console.log("Client connected");
    },
    message(ws, message) {
      console.log("Received:", message);
      ws.send(`Echo: ${message}`);
    },
    close(ws) {
      console.log("Client disconnected");
    },
  },
});

console.log("WebSocket server running at ws://localhost:3000");

Client

client.ts
const ws = new WebSocket("ws://localhost:3000");

ws.onopen = () => {
  console.log("Connected");
  ws.send("Hello Server");
};

ws.onmessage = (event) => {
  console.log("Received:", event.data);
};
See WebSocket API for complete documentation.

Build docs developers (and LLMs) love