Local-first data and sync
Your app's local store is its database. Reads and writes do not need to wait for a round trip to the server: writes always succeed locally, and sync runs in the background.
Revocation stops the feed — it doesn’t reach back
When access is removed, the server stops routing new data to that device. Changes already synced there stay on it — “stops receiving,” not remote-erase.
access.js on the server, then fanned out or converged server-wins.Offline means sync is not caught up
When a device is offline, people can keep reading and changing data already on that device. Those changes wait locally. When connectivity returns, sync catches up and replicas converge.
A successful local write does not mean the server has accepted it yet. Access rules still run only on the server. If the server refuses a signed-in write, the server's authorized version silently replaces the local version. Conflicts are resolved last-write-wins for the whole document; individual fields are not merged independently.
Signed-out visitors are the one exception. A write the server doesn't accept merely because the visitor has no identity yet is not replaced — it is saved locally as a pending change and syncs automatically when that visitor signs in. Only a write the server's access rules actually refuse converges back to server truth.
This silent server-wins behavior is deliberate. A possible someday-enterprise log mode could preserve rejected writes for an administrator's audit trail, but that mode is only an idea and is not part of today's creator contract.
Access controls sync, not copies already delivered
The server evaluates your access function and syncs only the channels its outputs authorize. Apps and clients do not evaluate access functions or grant themselves channels.
Revoking access stops that person receiving your data from then on. It does not remotely erase records already synced to their device. The same rule applies to social controls:
- removing a follower or being unfollowed stops future follower-only data;
- blocking stops future data delivery through that relationship;
- neither action promises to erase copies the other person already received.
An honest client may evict records after access changes, but eviction is local storage hygiene, not a security boundary. Design sharing flows with the same rule you would use for a downloaded file: only share data that the recipient may retain.
For channel and role rules, see the Access API. For app-level roles, invitations, and controls, see Sharing & Access.