← Notes

Where Yttrium ends and Atrium begins

Atrium is a chat workspace. Yttrium is the sync engine under it. The boundary between them is deliberate. Yttrium owns authoritative state, commit ordering, optimistic edits, CRDT extensions, sockets and reconnection, replicated policy, and durable delivery between domains. Atrium owns identity, resource types, membership, authorization, notifications, administration, and product meaning.

One resource, one domain

Each channel or document is one sync domain: one Durable Object with one commit clock. Domain names address resources. Global identity never contains a space.

directory              public space listings
profile/<id>           public display name and bio
user/<id>              private home: joined spaces, activity, read positions
dm/<a>~<b>             two participants, sorted
s/<space>/acl          membership, roles, invites (authoritative)
s/<space>/channel/<id> messages and reactions
s/<space>/doc/<id>     shared Markdown text CRDT

Control on one record

Membership, roles, invites, and resource declarations live in a single authoritative ACL record per space. That makes invite redemption and role changes atomic. Side effects, like directory listings and operator inventory, leave through a durable outbox. The client that made the change doesn’t carry them.

Activity without copying messages

A new top-level message publishes {head, at, mentionHead?} to each eligible recipient’s user/<id> home. The source commit and outbox are written in one SQL transaction. An alarm drains the outbox, rechecks permissions before each attempt, and retries failures. Retried or reordered deliveries can’t duplicate effects or move a head backward.

Try it at atriu.me. The engine docs are at ytt.rium.dev.