Guide
When the Room DO is the source of truth, when D1 is, and what throughput to expect per room (without pretending one object scales infinite hot rooms).
Each Durable Object processes requests sequentially. For one chat room, that is often a feature: ordering is straightforward and you avoid distributed locks inside the room.
A single ultra-hot room (thousands of messages per second in one channel) may need sharding or fan-out patterns beyond one object. Most SaaS tenant rooms are far below that.
Stateless Workers cannot hold open WebSocket fan-out for a room across clients. You need sticky coordination. That is the DO (or an external broker). "Just Workers" fits HTTP, not multi-client room state.
We optimize for many rooms with moderate throughput each, not one global firehose. If you outgrow one room object, you shard by roomId (multiple products) or redesign that hot channel. We do not hide that limit.
FluxyChat packages the same stack: RoomDurableObject, D1 history, multi-tenant JWT, reconnect-aware SDK, and operator console. MIT self-host or hosted beta.
Topics: durable objects single threaded · durable objects vs d1 chat · cloudflare workers vs durable objects · room state source of truth
Canonical path: /guides/durable-objects-chat-tradeoffs