Skip to content

SQLite stays the store; Convex is an optional second one

Status: accepted · 2026-09-04

Context

One target has one SQLite file in WAL mode with BEGIN IMMEDIATE claims; one target is served by one host. That gives crash recovery, offline use and a zero-infrastructure single-machine install. Ko asked whether Convex could hold the state instead, for concurrency across machines.

Decision

SQLite remains the default and only required store. Concurrency on one host is already solved; what Convex would add is several writer hosts on one project through serializable mutations, plus reactive queries for a frontend. That is wanted only once multi-host parallelism is wanted. When it is, the store becomes a protocol with two implementations held to one conformance suite, the way Provider already is. Secrets for the second store live in the environment, never in config.toml.

Consequences

The frontend is designed against the daemon's JSON, not the store, so it does not care which store is behind it. Multi-host durability meanwhile is file replication (Litestream or rsync), not centralisation.

Tickets

None yet; depends on note 11.