Offline
What keeps working without a connection, and what happens when it returns.
GleanLog is local-first. The last boards, tasks, comments and notes stay readable, new work is accepted immediately, and every queued write reaches the server in order when the connection comes back.
Reads
- A cold start without a network shows the last successful data for each screen the account had loaded — up to seven days old.
- A snapshot belongs to the account that wrote it. A different account clears it instead of inheriting someone else's rows, and a workspace switch keeps its own history.
- Attachment images are not stored offline; everything else a screen lists is available.
Writes
Capture, task edits, tag moves, archive/delete, done/reopen, comments and replies, and note create/rename/save/move/delete are all accepted locally and queued. The screen updates without waiting for the server.
- The queue replays in the order you made the writes.
- A task created offline gets a temporary id; later edits follow it, and the server's id replaces the temporary one everywhere.
- Repeated edits are coalesced to your latest intent.
- Creates carry an idempotency key, so a retried create returns the same task instead of making a duplicate.
- A queued write that can never succeed is reported and removed instead of retrying forever. A write the server has already applied counts as success.
Attachments and "resolve with a deliverable page" need the network, because the file or page is uploaded against the server's record. The app explains this instead of failing silently.
Conflicts
Task field edits are last-write-wins: replay sends only the fields you changed.
A note save names the version and the text it started from. If another device saved in between, GleanLog merges the two edits line by line. Compatible changes merge silently; only a real overlap asks you to choose Keep mine or Use theirs.
Status
Both clients surface the same state — { online, pending, syncing, failures }. The web app
shows a header pill; the mobile app shows a banner with the pending count and a sync
section with retry. Signing out does not discard the queue: it stays scoped to the account
and workspace that wrote it.
Every request has a 20-second deadline. A socket that never answers becomes a retryable failure instead of leaving sync open forever.