Sync

Four transports, none of which is a service you sign up for.

Umbra ships the merge logic and no backend. A board is an append-only log per device, so two logs always merge — which means sync can ride on almost anything that moves files.

An Umbra kanban board with four columns, a work-in-progress limit and a blocked card

Shared folder

Point two machines at the same Drive, Dropbox or Syncthing folder. That is the entire setup.

Git

Append-only logs do not produce merge conflicts, so a board can live in the repository it belongs to and travel with the code.

The office LAN

Peers discover each other over mDNS (_umbra._tcp.local.) and connect directly. The TXT record carries only a device id and a protocol version — keys and names go inside the encrypted handshake. No relay, no account, no internet.

A relay

For teammates who are not on your network. Traffic is encrypted per link (X25519 + ChaCha20-Poly1305) and per board before it reaches any transport, so the relay holds nothing readable. It is about 180 lines and you can self-host it.

Private boards

A private board is not a permission flag. It never enters the sync set at all, which is a property of the code rather than a promise in a settings screen.

If we disappear

Boards live on disk, LAN peers find each other with no server, and a folder remains a supported transport. If our relay goes away — outage, bankruptcy, a decision — every board is still openable, still editable, and still syncable by another route.