Getting started
Introduction
Notr is collaborative note infrastructure: a hosted backend and SDK that lets you attach real-time, multiplayer notes to your own product without building sync, persistence, or an editor yourself.
The mental model
Notr is to collaborative content what S3 is to files. S3 stores bytes and doesn't care whether
they're an invoice or a profile picture — your application decides. In the same way, Notr stores notes and doesn't care whether a note is a meeting note, a wiki page, a support
ticket comment, or an AI agent's memory. You keep a noteId on your own entity, and the
meaning stays in your domain.
type Meeting = {
id: string
title: string
noteId: string // ← the only thing Notr knows about
} What Notr gives you
- Real-time sync — CRDT-backed (Yjs) collaboration over a WebSocket. Multiple people edit the same note simultaneously with carets and presence, and offline edits merge without conflicts.
- Persistence — every note is stored canonically as a Yjs document. You never touch the document format.
- A markdown projection — on every change, Notr derives a markdown rendering of the note. Read it over the REST API for search, exports, LLM context, or display.
- A Notion-grade editor — a block-based rich text editor with slash commands, ready to drop into your UI. Your users never know Notr is underneath.
- Tenancy and keys — notes belong to your developer account; service keys authenticate your backend.
What Notr deliberately is not
Notr has exactly one domain object: the note. There are no folders, projects, meetings, wikis, or tasks — those are application concepts, and they belong to you. If two consumers of Notr would model something differently, Notr doesn't model it at all.
Architecture at a glance
your backend ── x-api-key ──► REST /api/notes (create, read markdown, delete)
your frontend ── WebSocket ──► /collab (live document sync)
│
▼
Postgres: canonical Yjs doc + derived markdown Ready to build? Head to the Quickstart, or read about the note primitive first.
