Offline reads are relatively straightforward. Put data in SQLite, query it locally, and render the result. Offline writes are where things get uncomfortable.
What happens when two devices edit the same row while one is on a plane? What if the server applies a write but its response disappears? What happens to three days of pending work when the user loses access to a project? Can an old outbox survive a schema upgrade? I have been circling those questions for years.
In 2019 I built an offline-first datastore called debe. It combined CRDT-based sync, multi-master replication, and several storage adapters. It never became production-ready.
What stayed with me was the realization that convergence is only one part of a real sync product. Authorization, durable recovery, bootstrap, retention, schema evolution, and debugging are just as fundamental.
A useful mental model






