Skip to content

React Setup

The @zocket/react package provides a factory that generates fully typed hooks and a context provider.

Terminal window
bun add @zocket/react @zocket/client @zocket/core

Use createZocketReact to generate typed hooks from your app definition:

src/zocket.ts
import { createClient } from "@zocket/client";
import { createZocketReact } from "@zocket/react";
import type { app } from "../server/app";
export const client = createClient<typeof app>({
url: "ws://localhost:3000",
});
export const {
ZocketProvider,
useClient,
useActor,
useEvent,
useActorState,
} = createZocketReact<typeof app>();

Wrap your app with ZocketProvider:

src/App.tsx
import { ZocketProvider, client } from "./zocket";
export function App() {
return (
<ZocketProvider client={client}>
<YourApp />
</ZocketProvider>
);
}

The provider makes the client available to all hooks via React Context.

ExportDescription
ZocketProviderContext provider — wrap your app with it
useClientGet the typed client from context
useActorGet a ref-counted actor handle
useEventSubscribe to actor events with auto-cleanup
useActorStateSubscribe to actor state with optional selector

All hooks are fully typed from your actor definitions — no manual type annotations needed.

If you have multiple Zocket apps (e.g. different servers), create separate factories:

game-zocket.ts
export const { ZocketProvider: GameProvider, useActor: useGameActor } =
createZocketReact<typeof gameApp>();
// chat-zocket.ts
export const { ZocketProvider: ChatProvider, useActor: useChatActor } =
createZocketReact<typeof chatApp>();

Nest the providers in your app:

<GameProvider client={gameClient}>
<ChatProvider client={chatClient}>
<App />
</ChatProvider>
</GameProvider>