Ai-design-components implementing-realtime-sync
Real-time communication patterns for live updates, collaboration, and presence. Use when building chat applications, collaborative tools, live dashboards, or streaming interfaces (LLM responses, metrics). Covers SSE (server-sent events for one-way streams), WebSocket (bidirectional communication), WebRTC (peer-to-peer video/audio), CRDTs (Yjs, Automerge for conflict-free collaboration), presence patterns, offline sync, and scaling strategies. Supports Python, Rust, Go, and TypeScript.
git clone https://github.com/ancoleman/ai-design-components
T=$(mktemp -d) && git clone --depth=1 https://github.com/ancoleman/ai-design-components "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/implementing-realtime-sync" ~/.claude/skills/ancoleman-ai-design-components-implementing-realtime-sync && rm -rf "$T"
skills/implementing-realtime-sync/SKILL.mdReal-Time Sync
Implement real-time communication for live updates, collaboration, and presence awareness across applications.
When to Use
Use this skill when building:
- LLM streaming interfaces - Stream tokens progressively (ai-chat integration)
- Live dashboards - Push metrics and updates to clients
- Collaborative editing - Multi-user document/spreadsheet editing with CRDTs
- Chat applications - Real-time messaging with presence
- Multiplayer features - Cursor tracking, live updates, presence awareness
- Offline-first apps - Mobile/PWA with sync-on-reconnect
Protocol Selection Framework
Choose the transport protocol based on communication pattern:
Decision Tree
ONE-WAY (Server → Client only) ├─ LLM streaming, notifications, live feeds └─ Use SSE (Server-Sent Events) ├─ Automatic reconnection (browser-native) ├─ Event IDs for resumption └─ Simple HTTP implementation BIDIRECTIONAL (Client ↔ Server) ├─ Chat, games, collaborative editing └─ Use WebSocket ├─ Manual reconnection required ├─ Binary + text support └─ Lower latency for two-way COLLABORATIVE EDITING ├─ Multi-user documents/spreadsheets └─ Use WebSocket + CRDT (Yjs or Automerge) ├─ CRDT handles conflict resolution ├─ WebSocket for transport └─ Offline-first with sync PEER-TO-PEER MEDIA ├─ Video, screen sharing, voice calls └─ Use WebRTC ├─ WebSocket for signaling ├─ Direct P2P connection └─ STUN/TURN for NAT traversal
Protocol Comparison
| Protocol | Direction | Reconnection | Complexity | Best For |
|---|---|---|---|---|
| SSE | Server → Client | Automatic | Low | Live feeds, LLM streaming |
| WebSocket | Bidirectional | Manual | Medium | Chat, games, collaboration |
| WebRTC | P2P | Complex | High | Video, screen share, voice |
Implementation Patterns
Pattern 1: LLM Streaming with SSE
Stream LLM tokens progressively to frontend (ai-chat integration).
Python (FastAPI):
from sse_starlette.sse import EventSourceResponse @app.post("/chat/stream") async def stream_chat(prompt: str): async def generate(): async for chunk in llm_stream: yield {"event": "token", "data": chunk.content} yield {"event": "done", "data": "[DONE]"} return EventSourceResponse(generate())
Frontend:
const es = new EventSource('/chat/stream') es.addEventListener('token', (e) => appendToken(e.data))
Reference
references/sse.md for full implementations, reconnection, and event ID resumption.
Pattern 2: WebSocket Chat
Bidirectional communication for chat applications.
Python (FastAPI):
connections: set[WebSocket] = set() @app.websocket("/ws") async def websocket_endpoint(websocket: WebSocket): await websocket.accept() connections.add(websocket) try: while True: data = await websocket.receive_text() for conn in connections: await conn.send_text(data) except WebSocketDisconnect: connections.remove(websocket)
Reference
references/websockets.md for multi-language examples, authentication, heartbeats, and scaling.
Pattern 3: Collaborative Editing with CRDTs
Conflict-free multi-user editing using Yjs.
TypeScript (Yjs):
import * as Y from 'yjs' import { WebsocketProvider } from 'y-websocket' const doc = new Y.Doc() const provider = new WebsocketProvider('ws://localhost:1234', 'doc-id', doc) const ytext = doc.getText('content') ytext.observe(event => console.log('Changes:', event.changes)) ytext.insert(0, 'Hello collaborative world!')
Reference
references/crdts.md for conflict resolution, Yjs vs Automerge, and advanced patterns.
Pattern 4: Presence Awareness
Track online users, cursor positions, and typing indicators.
Yjs Awareness API:
const awareness = provider.awareness awareness.setLocalState({ user: { name: 'Alice' }, cursor: { x: 100, y: 200 } }) awareness.on('change', () => { awareness.getStates().forEach((state, clientId) => { renderCursor(state.cursor, state.user) }) })
Reference
references/presence-patterns.md for cursor tracking, typing indicators, and online status.
Pattern 5: Offline Sync (Mobile/PWA)
Queue mutations locally and sync when connection restored.
TypeScript (Yjs + IndexedDB):
import { IndexeddbPersistence } from 'y-indexeddb' import { WebsocketProvider } from 'y-websocket' const doc = new Y.Doc() const indexeddbProvider = new IndexeddbPersistence('my-doc', doc) const wsProvider = new WebsocketProvider('wss://api.example.com/sync', 'my-doc', doc) wsProvider.on('status', (e) => { console.log(e.status === 'connected' ? 'Online' : 'Offline') })
Reference
references/offline-sync.md for conflict resolution and sync strategies.
Library Recommendations
Python
WebSocket:
- AsyncIO-based, production-readywebsockets 13.x
- Built-in, dependency injectionFastAPI WebSocket
- Socket.IO protocol with fallbacksFlask-SocketIO
SSE:
- FastAPI/Starlette, async, generator-basedsse-starlette
- Redis backend for pub/subFlask-SSE
Rust
WebSocket:
- Tokio integration, production-readytokio-tungstenite 0.23
- Built-in extractors, tower middlewareaxum WebSocket
SSE:
- Native support, async streamsaxum SSE
Go
WebSocket:
- Battle-tested, compression supportgorilla/websocket
- Modern API, context supportnhooyr/websocket
SSE:
(native) - Flusher interface, no dependenciesnet/http
TypeScript
WebSocket:
- Native WebSocket server, lightweightws
- Auto-reconnect, fallbacks, roomsSocket.io 4.x
- Edge runtime (Cloudflare Workers, Deno)Hono WebSocket
SSE:
(native) - Browser-native, automatic retryEventSource- Node.js
(native) - Server-side, no dependencieshttp
CRDT:
- Mature, TypeScript/Rust, rich text editingYjs
- Rust/JS, JSON-like data, time-travelAutomerge
Reconnection Strategies
SSE: Browser's EventSource handles reconnection automatically with exponential backoff. WebSocket: Implement manual exponential backoff with jitter to prevent thundering herd.
Reference
references/sse.md and references/websockets.md for complete implementation patterns.
Security Patterns
Authentication: Use cookie-based (same-origin) or token in Sec-WebSocket-Protocol header. Rate Limiting: Implement per-user message throttling with sliding window.
Reference
references/websockets.md for authentication and rate limiting implementations.
Scaling with Redis Pub/Sub
For horizontal scaling, use Redis pub/sub to broadcast messages across multiple backend servers.
Reference
references/websockets.md for complete Redis scaling implementation.
Frontend Integration
React Hooks Pattern
SSE for LLM Streaming (ai-chat):
useEffect(() => { const es = new EventSource(`/api/chat/stream?prompt=${prompt}`) es.addEventListener('token', (e) => setContent(prev => prev + e.data)) return () => es.close() }, [prompt])
WebSocket for Live Metrics (dashboards):
useEffect(() => { const ws = new WebSocket('ws://localhost:8000/metrics') ws.onmessage = (e) => setMetrics(JSON.parse(e.data)) return () => ws.close() }, [])
Yjs for Collaborative Tables:
useEffect(() => { const doc = new Y.Doc() const provider = new WebsocketProvider('ws://localhost:1234', docId, doc) const yarray = doc.getArray('rows') yarray.observe(() => setRows(yarray.toArray())) return () => provider.destroy() }, [docId])
Reference Documentation
For detailed implementation patterns, consult:
- SSE protocol, reconnection, event IDsreferences/sse.md
- WebSocket auth, heartbeats, scalingreferences/websockets.md
- Yjs vs Automerge, conflict resolutionreferences/crdts.md
- Cursor tracking, typing indicatorsreferences/presence-patterns.md
- Mobile patterns, conflict strategiesreferences/offline-sync.md
Example Projects
Working implementations available in:
- FastAPI SSE for LLM streaming (RUNNABLE)examples/llm-streaming-sse/
- Python FastAPI + TypeScript chatexamples/chat-websocket/
- Yjs collaborative editorexamples/collaborative-yjs/
Testing Tools
Use scripts to validate implementations:
- WebSocket connection testingscripts/test_websocket_connection.py