Presence
See who is in the room in real time — names, colors, and any metadata you attach, synced the instant someone joins or leaves.
Presence, multiplayer cursors, shared state, and awareness for any app — over WebRTC, BroadcastChannel, or your own relay, with first-class React, Vue, Svelte, Solid, and Angular bindings.
Ten collaboration primitives and a transport layer that just works. Compose only what you need — each one is tree-shakeable and typed end to end.
Wrap your tree, call a hook, and you have live presence and cursors. The same primitives are Vue composables, Svelte stores, and Solid signals too.
import {
RoomfulProvider,
usePresence,
useCursors,
useSharedState,
} from '@roomful/react';
function DesignReview() {
return (
<RoomfulProvider roomId="design-review" presence={{ name: 'Ada' }}>
<Canvas />
</RoomfulProvider>
);
}
function Canvas() {
const { others } = usePresence();
const [zoom, setZoom] = useSharedState('zoom', { initialValue: 1 });
useCursors(); // live multiplayer cursors, mounted
return <p>{others.length} teammates exploring at {zoom}×</p>;
} One API, three transports. Prototype with zero infrastructure, then move to a relay you control without rewriting a line of product code.
Peers connect directly for small rooms. No server to run, no per-seat bill — just open a room and collaborate.
Sync tabs and windows on one machine with no network at all. Perfect for local-first apps and demos.
Self-host the open-source relay (Docker or npm) with JWT auth, CORS, and Redis fan-out when you outgrow peer-to-peer.
Install the core package, follow the five-minute quickstart, and have teammates in the same room before your coffee gets cold.