🎉 pluv.io is now stable! Read our announcement here

Create React Bundle

pluv.io provides react bindings via @pluv/react to use @pluv/client in a more react-friendly way.

Create a PluvIO instance

First, create a PluvIO instance from the @pluv/io package in your backend codebase.

You can view examples of setting up the PluvIO instance via your platform's respective quickstart guides:

  1. Next.js
  2. Cloudflare Workers
  3. Node.js
// backend/io.ts
import { yjs } from "@pluv/crdt-yjs";
import { createIO } from "@pluv/io";
import { platformPluv } from "@pluv/platform-pluv";

export const io = createIO(
  platformPluv({ /* ... */})
);

// Export the ioServer, so that this can be type-imported on the frontend
export const ioServer = io.server();

Create a Pluv React bundle

Then, import your PluvIO type to the frontend, and create your type-safe react bundle using @pluv/react.

// frontend/io.ts
import { yjs } from "@pluv/crdt-yjs";
import { createClient, infer } from "@pluv/client";
import { createBundle } from "@pluv/react";
import { z } from "zod";
// import your ioServer type from your backend codebase
import type { ioServer } from "./backend/io";

const types = infer((i) => ({ io: i<typeof ioServer> }));
const client = clientClient({ /* ... */});

export const {
  // components
  MockedRoomProvider,
  PluvProvider,
  PluvRoomProvider,

  // utils
  event,

  // hooks
  useBroadcast,
  useCanRedo,
  useCanUndo,
  useClient,
  useConnection,
  useDoc,
  useEvent,
  useMyPresence,
  useMyself,
  useOther,
  useOthers,
  useRedo,
  useRoom,
  useStorage,
  useTransact,
  useUndo,
} = createBundle(client);