// the find
sqliteai/sqlite-sync
CRDT-based offline-first sync for SQLite. Syncs automatically with SQLite Cloud, PostgreSQL, and Supabase. No conflicts, no data loss, no backend to build. For offline-first apps and AI agents.
A C extension that adds CRDT-based sync to SQLite, letting local databases exchange changes without conflicts. Works with SQLite Cloud (their managed backend), or self-hosted PostgreSQL/Supabase. Primarily useful for offline-first mobile/desktop apps and the growing niche of agent-state synchronization.
The CRDT implementation covers four distinct algorithms (Causal-Length Set, Delete-Wins, Add-Wins, Grow-Only Set) — not just a single last-write-wins approach. Block-Level LWW for text columns is genuinely useful: line-level merging means two agents or users editing different sections of a markdown document preserve both changes, which most sync libraries get wrong. The test suite is thorough — 51 numbered SQL test scripts covering edge cases like out-of-order delivery, delete/resurrect cycles, schema hash mismatches, and corrupted payloads. Platform breadth is real: iOS, Android, Flutter, Expo, React Native, WASM, and a PostgreSQL server-side extension all come from the same C core.
The license is Elastic License 2.0, not OSI-approved open source — you cannot use this in a SaaS product or offer it as a managed service without a commercial license from SQLite Cloud, Inc. That's a meaningful constraint that the README buries. The sync protocol is opaque: there's no spec or protocol documentation, so you're fully dependent on their server implementation; self-hosting means running their Docker image, not writing your own compatible backend. The two-call pattern required on a new device (first call triggers package preparation, second downloads it) is a leaky implementation detail that will confuse developers. Schema changes after `cloudsync_init` require manual migration handling — the extension doesn't help you evolve the schema across already-synced clients.