TL;DR: DuckLake stores the catalog and metadata together in a SQL database. Iceberg and Delta scatter metadata across object storage files. This session covers DuckLake's three architectural components — storage, catalog, and compute — including how concurrent writes stay transactionally safe, why inlining fixes the small file problem, and which settings matter for read performance.
Why the metadata lives in a database
Iceberg and Delta already use a database for their catalog, but it holds little more than a pointer to the latest snapshot. The actual metadata sits in layered files on object storage, and a query has to read them sequentially (metadata file, manifest list, manifest file) before it can touch data. At roughly 100 ms per object storage request, that adds up to about half a second of latency before a query even starts. DuckLake puts all of that into the catalog database, so finding the right files is one SQL query that returns in milliseconds. The getting started guide walks through this setup.
The three-component architecture
DuckLake has three pluggable pieces: storage (Parquet files on disk or object storage), a metadata catalog (a DuckDB file locally, Postgres or MotherDuck in production), and compute (DuckDB anywhere, from a laptop to a 192-core serverless instance). The same syntax works from a single-machine lakehouse to multi-user production. You swap components instead of re-architecting. One catalog can serve many compute instances of different sizes at once.
How concurrent writes stay safe
DuckLake uses optimistic concurrency control. Writers push their full Parquet files to object storage first. Those files are invisible to readers because nobody knows a file exists until the catalog says so. Once the data lands, the writer registers the files in a very short catalog transaction with ACID guarantees across tables. Non-conflicting commits retry automatically. That short transaction window is why DuckLake sustains around 100 transactions per second where incumbent formats manage about one.
Where to tune performance
The catalog prunes files using partitioning; compute prunes columns and row groups within files using sorting. Those two settings, plus a scheduled checkpoint for compaction and cleanup, are the main levers for a fast DuckLake. For how DuckLake compares to Iceberg and Delta in the broader stack, see the open lakehouse stack overview.



