TypeSafe Primitives for a Realtime Web

Open-source, multiplayer APIs powered-by TypeScript inference end-to-end

Users online

Automatic type-safety

Leverage the full-power of TypeScript interfence to catch errors quickly and get IDE auto-completions as you're developing!

* Server procedures are exclusive to self-hosted pluv.io.

Built for React

First-class React support with components and hooks that seamlessly integrate the pluv.io client into React's render lifecycle.

Multi-CRDT storage

Allow multiple users to edit shared storage data with either the Yjs or Loro ecosystems.

Multi-runtime

Own your own realtime infrastructure if you choose. Designed for self-hosting first, pluv.io supports both Node.js and Cloudflare Worker runtimes.

Managed realtime

Have pluv.io manage your realtime infrastructure for you at scale on its globally distributed edge network.

Presence

Give users a presence in your rooms by managing per-user states viewable by all other participants.

Authorization & identity

Define your own custom authorization to restrict access to rooms and identify each collaborator.

Usage monitoring

When hosted on the pluv.io network, track active rooms and connections, and custom events to gain insights on how your app is being used.

Prebuilt components(coming soon)

Copy & paste presence-aware cursors, forms, rich-text editors and more; just like your favorite UI libraries today 😉.

Developer-Focused APIs

Unlock powerful utilities to build complex multiplayer experiences in minutes, not days.

1

Create your PluvIO server

To get started with pluv.io, you will first need to create a PluvIO server that can start registering new realtime connections.

Pick which platform (i.e. adapter) you wish to connect to. Connect to pluv.io as a fully-managed service for your Next.js app. Or self-host on Node.js or on Cloudflare Workers.

Define a Zod schema validator to ensure the structure and type-safety of authorized users in your rooms.

2

Set-up HTTP endpoints

Next, set-up custom authorization for your rooms. And mount the `PluvServer` to enable realtime connections to your pluv.io instance.

Setup will vary depending on the platform (e.g. Node.js or Cloudflare Workers) used.

3

Prepare your frontend bundle

Afterwards, we will prepare our frontend bundle by using a type import of our ioServer. This frontend bundle contains all of pluv.io's APIs for realtime collaboration.

You can optionally unlock more realtime capabilities for your app by defining:
  1. A presence state for each user with Zod.
  2. CRDT storage with Yjs or Loro.
  3. Custom typesafe events on your backend[1] or your frontend.
* Available only when self-hosted
4

Wrap with PluvRoomProvider

The room bundle provides a PluvRoomProvider to wrap your page with. Once you do, pluv.io APIs can now be used in nested components!

5

Build with typesafe realtime primitives!

With our frontend bundle ready to use, you can start using pluv.io realtime primitives with TypeScript autocompletion and intellisense for your custom events, presence and storage.

Type definitions will be as narrow as you've configured, with minimal manual type definitions and without code-generation!

Native-like Realtime Data

Treat your realtime data like ordinary state.
Storage data is shared and modifiable by all participants.