Skip to content

Sharing and Synchronization

Acelith edited this page Nov 1, 2026 · 2 revisions

Sharing and synchronization

Items

Pages, sessions, relationships and party members can be stored private (only the author's devices) or shared with the members. Character-sheet sections and images are shared-only, read-only projections. A relationship can be shared only if the pages it connects are shared too.

How a device stays aligned

  1. It sends each saved change with a unique operation ID and the revision it was based on. Retries with the same ID are acknowledged instead of applied twice.
  2. It reads everything that changed since its last position (a cursor), including tombstones for deletions and withdrawals. If its cursor is too old, it lists the campaign again.
  3. While connected, it keeps a notification stream open; each hint only says "something changed", never what.

Conflicts

If two devices change the same item, the second write is refused with the current server version. The app shows both versions; the user chooses. The server never merges text.

Offline

Devices keep working offline; their changes wait locally and are sent when the server answers again. Operation IDs older than 30 days are no longer acknowledged; the device then re-evaluates the item from its current state.

Limits

Bounded page sizes, payload sizes, image sizes (8 MiB per original for sharing) and storage quotas protect the server. See docs/API.md for exact values.

Clue board items

The desktop's M31 clue board sends a clue only after its author selects a private copy or shares that item. Its source page and session IDs must already be present for the same audience. The server validates the typed payload and keeps the item attributed to its author. Revoking a referenced page or session withdraws a publicly visible clue; it does not change the author's local note or create a factual relationship.

Clone this wiki locally