Write together. Ship on Cloudflare.
A block editor with real-time collaboration, nested pages, full-text search, and AI writing help that stays out of the way. Runs entirely on Cloudflare Workers.
Architecture
The platform runs on Cloudflare Workers with Durable Objects for real-time document collaboration.{" "} Rachel {" "} Each document is a lightweight server that handles WebSocket connections, Yjs sync, and persistence.
export class{" "}
DocSync extends{" "}
YServer {"{"}
{"\n "}
async onSave
{"() { "}
/* ... */
{" }"}
{"\n}"}
Real-time collaboration
One Durable Object per document. Yjs-powered presence, live cursors, awareness — the document{" "} is the server. No broker, no third-party sync service, no drift.
The Worker routes each connection to a matching{" "} Alex {" "} Durable Object that holds the Yjs document in memory, fans updates to every connected client, and persists to SQLite on save.{" "} Rachel
AI writing help
Workers AISelect a paragraph, pick an intent, accept the edit. Streams into the editor — and keeps quiet about it.
Each document is{" "} its own{" "} lightwieght {" "} server handling WebSocket connections .
- /ai continues at the cursor
- Summarize asks the page a follow-up
Full-text search
FTS5-powered instant search across every page in the workspace.
{/* Mini visual — search UI */}{r.match}
Rich block editor
Headings, lists, code blocks with syntax highlighting, tables, images, toggles, and more — all from a slash menu.
const doc ={" "}
new Y.Doc()
| Binding | Type |
|---|---|
| DB | D1 |
| R2 | Bucket |
| DocSync | DO |
-
{STACK.map(({ name, role }) => (
- {name}
- {role}