Realtime SDK

React SDK

React SDK

Complete API reference for @realtime-sdk/react.

RealtimeProvider

Provides the Realtime client context to your app.

import { RealtimeProvider } from '@realtime-sdk/react';
 
<RealtimeProvider
  endpoint="wss://api.realtimesdk.dev"
  authToken={getToken}
  // Optional
  heartbeatInterval={30000}
  heartbeatTimeout={10000}
  maxReconnectAttempts={10}
  debug={false}
>
  {children}
</RealtimeProvider>

Props

PropTypeDefaultDescription
endpointstringRequiredWebSocket server URL
authTokenstring | () => string | () => Promise<string>RequiredJWT auth token
heartbeatIntervalnumber30000Ping interval (ms)
heartbeatTimeoutnumber10000Pong timeout (ms)
maxReconnectAttemptsnumber10Max reconnect tries (-1 for infinite)
debugbooleanfalseEnable debug logging

useRoom

Access or create a room.

const room = useRoom('room-id');

Returns

PropertyTypeDescription
idstringRoom ID
statusRoomStatus'joining' | 'joined' | 'leaving' | 'left' | 'error'
join(options?)() => Promise<void>Join the room
leave()() => voidLeave the room
on(event, callback)() => () => voidSubscribe to events

usePresence

Track users in a room.

const { users, self, others, updatePresence } = usePresence(room);

Returns

PropertyTypeDescription
usersPresenceUser[]All users in room
selfPresenceUser | nullCurrent user
othersPresenceUser[]Other users
updatePresence(data)(data: Partial<T>) => voidUpdate your presence

PresenceUser

interface PresenceUser {
  id: string;
  color: string;
  data: PresenceData;
  cursor: CursorPosition | null;
}

useCursors

Track cursor positions.

const { cursors, updateCursor } = useCursors(room, { throttle: 50 });

Options

OptionTypeDefaultDescription
throttlenumber50Update throttle (ms)

Returns

PropertyTypeDescription
cursorsCursorInfo[]All visible cursors
updateCursor(position)(pos: CursorPosition | null) => voidUpdate your cursor

CursorInfo

interface CursorInfo {
  id: string;
  name?: string;
  color: string;
  position: { x: number; y: number };
}

useDocument

Collaborative document sync with Yjs.

const { doc, awareness, synced, status, pendingChanges, provider } = useDocument(room, 'doc-id');

Returns

PropertyTypeDescription
docY.DocYjs document
awarenessAwarenessYjs awareness instance
syncedbooleanInitial sync complete
status'connected' | 'disconnected'Document provider status
pendingChangesnumberLocal updates queued while disconnected
providerDocumentProviderCompatibility provider for editor integrations

useBroadcast

Send custom events to the room.

const { broadcast, on } = useBroadcast(room);
 
// Send
broadcast('reaction', { emoji: '👍' });
 
// Receive
useEffect(() => {
  return on('reaction', ({ senderId, data }) => {
    console.log(`${senderId} reacted with ${data.emoji}`);
  });
}, [on]);

useConnectionStatus

Monitor connection state.

const status = useConnectionStatus();
// 'connecting' | 'connected' | 'disconnected' | 'reconnecting'

On this page