Typesafe RPC
Method names, arguments, results, and event payloads derive from the server target.
@repo/client-side-do connects browser state to Cloudflare Durable Objects over WebSockets. It derives a client RPC surface from a Durable Object type, queues calls while connecting, reconnects automatically, and broadcasts successful method results to subscribers.
Typesafe RPC
Realtime
Resilient connection
Optimistic state
graph LR UI[UI] --> DB[TanStack DB] DB --> C[Client-side DO] C -->|WebSocket RPC| DO[Durable Object] DO -->|response| C DO -->|events| O[Other clients] C --> DB O --> ODB[Local collections]
The Durable Object remains authoritative. Local collections provide immediate UI state and reconcile through method events.
Use the browser-safe entrypoint from frontend code:
import { createDOTransport, createOptimisticActionMetadata,} from '@repo/client-side-do/client';Server code can import createRpcServer and shared RPC types from the package root:
import { createRpcServer, type RpcFromTarget,} from '@repo/client-side-do';