About

Why this project exists, what it covers, and how far along it is.

The goal

Applications that share data usually reach for a central database and a network connection to it. That works until the network drops, until two people edit the same thing, or until the data has to live in a place everyone already has, such as a shared folder. CRDTs solve those cases by making the merge rule part of the data.

This site collects the pieces needed to use them in ordinary applications: small libraries for each data type, and one complete shared database that stores structured data and serves it over HTTP and WebSocket.

What the shared database is for

A group of people, each with one or more machines, working on the same data. A chat room, a shared workspace, a task list, a catalogue. Every participant keeps a full copy. Changes travel through a shared folder, or through a direct connection between servers when one is available.

Each service defines the shape of its data: structs for fixed fields, tagged unions for choices, and collections for sets of items. Data that belongs to one person lives in that person's own area, where only their machines may write. Data that everybody edits lives in the shared area.

Design principles

PrincipleWhat it means in practice
One writer per fileEach machine writes only its own directory, so a syncing folder never has to resolve a conflict.
Append firstThe current day is append-only. Rewrites happen on sealed days, under a rule that keeps readers correct.
Absence only hidesA missing record may be a deletion or a file still in transit, so nothing permanent is decided from it.
Presence removesData is removed for good on evidence that exists: a tombstone, or a verified index that no longer lists a record.
Small recordsA node is 64 bytes on disk. Values of 16 bytes or fewer sit inside the record.
Plain filesLogs, data files and index files. Any program can read them, and any sync tool can move them.

Status

The format and the algorithms are written up in full in the Reference section. The libraries are being built against that specification. Sample content on this site is provisional while the first release is prepared.

Following the work, or want a say in the format before it settles? The specification pages carry the open questions alongside the decided rules.

Licence

The libraries and the specification are published under the MIT licence. The file format is free to implement.