FluxyChat

Features

Offline sync, federation, and merge conflicts

How offline queues, Matrix bridges, and merge-conflict UI fit together in FluxyChat.

Offline sync, Matrix federation, and merge conflicts are related problems. FluxyChat handles them as one story instead of three disconnected features.

The loop

sequenceDiagram
  participant Client
  participant DO as Room DO
  participant D1
  participant Matrix

  Client->>Client: IndexedDB outbox while offline
  Client->>DO: reconnect and delta sync (syncStatus)
  DO->>D1: authoritative messages
  Note over Client: If two edits collide, open merge-conflict UI
  Client->>DO: resolve keep_a / keep_b / merge_both
  DO->>Matrix: optional outbound bridge

Pieces

LayerWhatWhere
Offline-firstWS events, pending send queue, syncStatus@fluxy-chat/sdk, React Native outbox
Authoritative roomDurable Object and D1 historyWorker Room DO
Conflict UISide-by-side resolve when edits divergeMerge conflicts
FederationMatrix appservice bridge in and outBridge routes and docs

Operator checklist

  1. Enable offline-first in the SDK (offlineFirst: true, default on web).
  2. Show a connection banner when syncStatus is offline or pending.
  3. Wire MergeConflictPanel (or your own UI) on deliveryConflict and the pending merge API.
  4. For multi-org Matrix, configure the bridge and verify inbound traffic with the webhook emulator suite.

How this compares

CapabilityStream-styleMatrix-onlyFluxyChat
Offline queueSDK local cacheClient cacheIndexedDB or RN outbox plus syncStatus
Conflict UXUsually last-write-winsRoom stateExplicit merge panel
FederationLimitedNativeOptional Matrix bridge

On this page