#492·theatre

Our plan to make Theatre.js Local-First

Author: AriaMinaeiCreated Jul 1, 2024Updated Jun 30, 2025
LabelsNote

Theatre.js 0.8 (upcoming) supports real-time collaboration similar to GDocs and Figma.

We intend to make Theatre.js local-first.

Local-first removes the lock-in of a central server (although Theatre's server is also open-source). It also simplifies our backend and reduces maintenance costs.

But since local-first sync algorithms (CRDTs) haven't yet matured enough for creative apps, we decided to start with a server-ful approach and gradually transition to local-first.

Our server-ful implementation is called Saaz. Saaz' algorithm is a simple tree of registers, which allows us to gradually bring in domain-specific CRDT implementations for specific features (such as text, brush strokes, non-destructive bitmap editing, etc). As each of thse CRDTs mature, we can swap them in, and at some point, remove the server.