Skip to content

Collaboration

Expanse can sync a workbook live between people through a collab server. The same collaboration code runs on a self-hosted server and on the hosted Cloudflare backend, so the behaviour is the same either way.

This is opt-in. The desktop app is fully local by default; it only connects when you point it at a collab server.

Set two environment variables on the desktop app:

  • EXPANSE_COLLAB_URL: your collab server’s WebSocket URL, for example ws://your-host:8787/sheet/<workbook-uuid>.
  • EXPANSE_COLLAB_TOKEN: a bearer token from signing in.

See Self-hosting to run your own server, or use the hosted backend.

When two clients are connected to the same workbook:

  • Cell values, styles, and row / column inserts sync live between everyone connected.
  • Edits are ordered by a Lamport clock; two people editing the same cell at once resolve last-write-wins.
  • A late joiner gets the edit history replayed on join, so they catch up to the current state.

A workbook is identified by a UUID in the connection URL. The auth service decides who is allowed to join, based on membership of the workbook’s organization or a share link. Everyone connected to the same workbook UUID sees the same live sheet.

Collaboration is real but early. Today it does not include:

  • Live cursors or presence: you won’t see other people’s selections or where they’re working.
  • An in-app share / invite button: you coordinate the workbook URL yourself for now.
  • A history or version-travel view: edits are stored, but there’s no timeline UI to browse or roll back.
  • Multi-sheet sync: a session covers a single sheet today.
  • Concurrent row / column deletes: inserts sync, but deletes aren’t applied across peers yet.