Alpha

livelyryanwaits/lively

Self-hostable real-time collaboration

GitHubDemo ↗

Problem
Real-time collaboration means a vendor SaaS, or building a CRDT library yourself.
Architecture
10 packages, each depending only on the layer below it.
Primitives
LiveObject, LiveMap, and LiveList sync automatically, plus presence and undo/redo.
Self-host
Ships as a Dockerfile and a Render blueprint, backed by Postgres.
The Problem

Vendor SaaS, or Build It Yourself

Every product that wants live cursors, shared state, or presence reaches for a vendor SaaS — and ships user data through someone else's servers to get it. There's no self-hosted path that isn't "go implement a CRDT library yourself and build everything above it."

Terminal
# Adding real-time collaboration today
# 1. Pick a vendor (Liveblocks, PartyKit, ...)
# 2. Ship user data through their infra
# 3. Pay per connected user, forever
# Or: implement Yjs from scratch yourself
Under the Hood

Architecture

Ten packages, each depending only on the layer below it. CRDT primitives at the bottom, a framework-agnostic client and WebSocket server above that, React hooks above that, a UI kit on top. Use one layer or all of them.

Terminal
packages/
types/ # shared type definitions
storage/ # CRDT primitives
client/ # framework-agnostic SDK
server/ # WebSocket collab server
react/ # 40+ hooks
ui/ # cursors, avatars, badges
cli/ # scaffolding
Live Primitives

One Hook, Full Sync

LiveObject, LiveMap, and LiveList sync automatically across every connected client — plus ephemeral presence, undo/redo, and broadcast events, the primitives Figma-style products are built from.

canvas.tsx
const { others, myPresence } = usePresence();
const [cursor, setCursor] = useMyCursor();
const doc = useStorage((root) => root.doc);
// sync is automatic — no diffing, no manual reconciliation
Self-Hostable

Your Infra, Your Data

Ships as a Dockerfile and a Render blueprint, backed by Postgres. Teams that want Figma-style collaboration shouldn't have to choose between building it from scratch or handing user data to a vendor.

Terminal
docker build -t lively-server .
docker run -p 8080:8080 lively-server
# or: render.yaml blueprint, one click
Try It

Six Example Apps

A whiteboard, a markdown editor, a collaborative editor, a Notion-like editor, a workflow node editor, and a todo list ship in the repo. All live at lively.waits.dev.

Terminal
examples/
nextjs-whiteboard/
nextjs-markdown-editor/
nextjs-collab-editor/
nextjs-notion-editor/
nextjs-workflows/
nextjs-todo/
Get Started

Pick a Layer

Each package is independently installable — pull in just the client, or the full React + UI stack.

Client Only
npm install @waits/lively-client
Full Stack
npm install @waits/lively-react
npm install @waits/lively-server