Product Teams Shipping Multiplayer UX
You need collaboration features this quarter, not a websocket rewrite.
Realtime gives you production-ready presence, cursors, and shared docs with SDKs.
Launch multiplayer product experiences without owning realtime infrastructure. Managed delivery with predictable, connection-based pricing.
Free tier includes 50 concurrent connections. No credit card required.
Move your cursor here
Positioning: Realtime is the collaboration infrastructure layer for SaaS products that need speed to market, predictable pricing, and deployment flexibility.
You need collaboration features this quarter, not a websocket rewrite.
Realtime gives you production-ready presence, cursors, and shared docs with SDKs.
MAU billing penalizes occasional users and causes unpredictable spend.
Realtime bills by concurrent usage bands so costs track real infrastructure load.
Hosted-only offerings conflict with compliance and deployment standards.
Realtime supports managed cloud and self-hosted paths with the same protocol.
See who's online with custom metadata. Show avatars, names, and status in real-time.
Display live cursor positions with smooth interpolation and automatic color coding.
Conflict-free collaborative editing with Yjs CRDTs. Works with any editor.
Broadcast arbitrary events to room members. Build reactions, notifications, and more.
Exponential backoff with automatic state recovery. Handle network issues gracefully.
JWT authentication, room-level access control, and encrypted connections.
Our React hooks make it simple to add real-time features to any app. No complex setup, no websocket management, no state synchronization headaches.
import { RealtimeProvider, useRoom, usePresence, useCursors } from '@realtime-sdk/react';
function App() {
return (
<RealtimeProvider
endpoint="wss://api.realtimesdk.dev"
authToken={getToken}
>
<CollaborativeEditor />
</RealtimeProvider>
);
}
function CollaborativeEditor() {
const room = useRoom('document-123');
const { others } = usePresence(room);
const { cursors, updateCursor } = useCursors(room);
return (
<div onMouseMove={(e) => updateCursor({ x: e.clientX, y: e.clientY })}>
{cursors.map(cursor => (
<Cursor key={cursor.id} {...cursor} />
))}
<PresenceList users={others} />
<Editor />
</div>
);
}We bill on peak concurrent connections (P95), not monthly active users. A 5-second visitor doesn't inflate your bill.
| Scenario | Liveblocks | Realtime SDK |
|---|---|---|
Small Startup 50 daily active, 200 monthly unique | $19/mo 200 MAU over limit | $0/mo ~50 concurrent, within limit |
Growing App 200 daily active, 2,000 monthly unique | ~$50-80/mo 2,000 MAU | $29/mo ~200 concurrent |
Scale 1,000 daily active, 15,000 monthly unique | ~$300-500/mo 15,000 MAU | $79/mo ~1,000 concurrent |
Viral Spike Normal 100, spike to 5,000 for 1 day | ~$100-200 5,000+ MAU counted | $29/mo P95 filters spike |
* Liveblocks prices based on public pricing. Actual costs may vary.
Start with Free, then upgrade through Stripe Checkout in minutes. Keep your pace with commercial-grade support when you scale.