Replication

ElectricSQL implements active-active, conflict-free replication between SQLite and Postgres, via AntidoteDB. Replication from SQLite, within a local app, is handled transparently, in the background as a side effect of electrifying your database driver.

As a result, as a developer, you don’t need to do anything special to enable or control replication. It just happens in the background. However, there are a number of things that it’s useful to be aware of and to potentially configure and control.

Configuration

As described in the configuration guide, you can configure the app, env and url that the local app connects to when establishing replication.

Protocol

Replication from SQLite sends changesets, encoded using protocol buffers, over a web socket connection. You can see the protocol buffers specification here and the backend implementation here.

Merge semantics

The core replication layer uses AntidoteDB. This provides transactional causal+ consistency with CRDTs. Rows are stored as an antidote_crdt_map_rr (a CRDT map that supports deletes using a reset mechanism). Replicated updates always contain the whole row.

Within the local devices, we use additional merge logic to arbitrate conflicts so that last write wins. Compensations are applied using add-wins semantics.

More information

See the reference pages on consistency, integrity and anomalies.

Next step