Concepts
Sync & teams
Where multi-device and team support stands today — what ships, what's coming, and the honest tradeoffs.
Excellent is single-player by default: one machine, one database file, nothing shared. Team workspaces exist today for owner-run fleets — this page is the honest statement of what that means right now.
What works today
A team runs on a primary you own — a small sync server your workspace hosts itself (a Docker container or a ~$6 cloud box; Excellent never hosts your data). Setup lives in Settings → Team:
- Provision the primary with a guided wizard — Docker or DigitalOcean, with the keys and first credential generated for you — or point at one you already run.
- Invite teammates with single-use, expiring join links. The full-access credential is never what gets handed out. Terminal folks can join with
excellent-mcp sync join --invite <code>. - Every teammate keeps a full local copy. Their install becomes a live replica of the workspace: reads stay local-speed and offline-capable, writes forward to the primary and appear on every machine.
- Manage the fleet in-app — members and roles, every device signed into the workspace (with revocation for a lost laptop), and live sync status.
The ship / verify protocol holds across machines: a task shipped on one laptop can be verified from another.
New to this shape? The self-host guide is the guided introduction — why a primary, what it costs to run, and the walkthrough from empty box to synced team. This page stays the reference.
The honest limitation
Today this is serial multi-device. If two machines edit the same record while disconnected from the primary, the last write wins when they reconnect — Excellent does not yet merge concurrent offline edits field by field. For a team working online against a shared primary this rarely bites; for heavy offline use on shared records, it can.
Conflict-free, field-level merge — where concurrent edits to different fields both survive, and genuinely conflicting edits to money, status, or identity fields are surfaced for a human decision instead of silently arbitrated — is built and in verification now. We'll document it here when it ships; we won't promise it before then.
The posture
Sync is something you turn on deliberately, on infrastructure you own — never a silent default. That's the same principle as everything else in local-first: your data doesn't leave your machine until you decide where it goes.