Building Real-time Chat with Durable Objects

Create a real-time chat application using Cloudflare Durable Objects for state management.

Advanced⏱️ 90 minutes📋 3 steps

Prerequisites

  • Workers experience
  • WebSocket knowledge
  • JavaScript/TypeScript

Tags

durable-objectswebsocketsreal-timechat

Progress

Step 1 of 3
1

Set up Durable Object

Create a Durable Object class to manage chat room state.

Instructions

  1. Create a new Worker project
  2. Define a Durable Object class for chat rooms
  3. Configure wrangler.toml with durable_objects binding
  4. Implement basic state management

Code Example

export class ChatRoom {
  constructor(state: DurableObjectState, env: Env) {
    this.state = state;
    this.sessions = [];
  }

  async fetch(request: Request): Promise<Response> {
    const webSocketPair = new WebSocketPair();
    const [client, server] = Object.values(webSocketPair);
    
    server.accept();
    this.sessions.push(server);
    
    return new Response(null, {
      status: 101,
      webSocket: client,
    });
  }
}

Expected Output

Durable Object class defined

💡 Tips

  • Durable Objects provide consistent, low-latency state management
  • Each object instance handles its own WebSocket connections
Step 1 of 3