Chatpack
Client

React integration

React hooks backed by Chatpack's small external store.

Install React with the client:

pnpm add @chatpack/client react
"use client";

import { createChatClient } from "@chatpack/client/react";

export const chatClient = createChatClient();

export function Messages({ conversationId }: { conversationId: string }) {
  const result = chatClient.useMessages({ conversationId, limit: 50 });
  if (result.isPending) return <p>Loading…</p>;
  if (result.error !== null) return <p>{result.error.message}</p>;
  return (
    <>
      <ul>
        {result.data?.messages.map((message) => (
          <li key={message.id}>{message.body}</li>
        ))}
      </ul>
      {result.data?.nextCursor !== null && (
        <button onClick={() => void result.loadMore()}>Older</button>
      )}
    </>
  );
}

Available hooks are useConversations, useConversation, useMessages, and useRealtimeStatus. useTyping, usePresence, and useReceipts read the matching client plugin state. Hooks use React's useSyncExternalStore, so React 18 and React 19 share the same cache and stream behavior.

SSR does not open an SSE connection. The connection starts after a browser subscriber or realtime-status hook mounts.