# DuckDB

DuckDB (duckdb.org) is an in-process analytical database — same deployment shape as [[lsm-tree|SQLite]], same workload as Postgres-with-analytical-extensions or BigQuery-on-a-laptop. First release 2019, the project comes out of CWI Amsterdam and is now under the DuckDB Foundation with commercial backing from MotherDuck and others. Columnar storage, vectorised execution, SQL with extensions, MIT-licensed, single binary or library.

The original positioning is *no client, no server, no protocol* — DuckDB lives inside your Python / R / JS / Java process and you call into it through a C / language-native API. That worked well for interactive data-science use cases and for "glue DuckDB on the side of an application to provide SQL on application data" patterns. It worked less well when multiple processes wanted to modify the same database file concurrently, because DuckDB keeps state in main memory and would have to synchronise across processes for concurrent writes.

In 2026 DuckDB shipped the **[[duckdb-quack-protocol|Quack]]** HTTP-based wire protocol (currently in `core_nightly`, available in v1.5.2, production target v2.0 in fall 2026), letting one DuckDB instance run as a server and others connect as clients — multiple concurrent writers, remote read-replicas, browser-from-Wasm direct access, all without leaving the DuckDB API surface. This is the same "in-process system grows a protocol" arc Redis went through ([[redis-cost-of-ambition]] for the other direction of that story), but tied to a concrete user-experience problem rather than ambition.

## Related extensions

- **pg_duckdb** — Postgres extension embedding DuckDB inside Postgres; the "EleDucken" the Quack post jokes about.
- **DuckLake** — DuckDB-flavoured lakehouse format; Quack is being integrated so a DuckDB server can act as a remote DuckLake catalog.
- **DuckDB-Wasm** — the browser distribution; gains native Quack support so a browser tab can talk to a DuckDB server on the network.

## Ingested articles

- [[duckdb-quack-protocol]] — Quack: HTTP-based client/server protocol, multiple concurrent writers, beats Arrow Flight SQL on bulk and beats Postgres-up-to-8-threads on small transactions
