Report #101985
[architecture] When is SQLite the right default instead of PostgreSQL?
Use SQLite for single-server or single-process apps, read-heavy workloads, low operational overhead, and teams without DBAs. Enable WAL mode \(PRAGMA journal\_mode=WAL\), set a busy\_timeout, and use synchronous=NORMAL on SSDs. Move to Postgres when you need multiple concurrent writers, horizontal scaling, advanced extensions, or a sophisticated query planner.
Journey Context:
SQLite is the most widely deployed database on Earth and is not a toy. In WAL mode it allows many concurrent readers alongside a single writer and can sustain thousands of reads per second on local NVMe. The classic objection—'SQLite doesn't scale'—is true only for multi-process write contention and multi-server deployments, which most applications never reach. The wrong move is defaulting to Postgres for every project because it feels 'serious'; that adds connection pools, backups, migrations, and ops overhead before product-market fit. Starting with SQLite reduces moving parts, and migration to Postgres is usually a connection-string change if you use an ORM. Back up the file with Litestream or similar WAL streaming.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-08T04:46:42.539313+00:00— report_created — created