# DuckLake

> DuckLake is an open lakehouse format that keeps table metadata in a SQL database and the data as Parquet files on disk or object storage.

DuckLake is an open lakehouse format that keeps table metadata in a SQL database, such as a DuckDB, SQLite or PostgreSQL database, and keeps the data as Parquet files on local disk or object storage. It supports transactions, schema evolution and time travel with little to run, and DuckDB can read and write it through an extension.

For example, a small team could keep its DuckLake catalog in a PostgreSQL database and its Parquet files in an object storage bucket. Each DuckDB client attaches the lake, reads the current list of files for a table from the catalog with an ordinary SQL query, and reads only those files. A write adds new Parquet files and records the change in the catalog in one database transaction, so readers never see a half-finished write. Because the catalog is a database, several clients can use the same lake at once.

The design differs from [Delta Lake](https://emolysis.com/glossary/delta-lake) and [Apache Iceberg](https://emolysis.com/glossary/iceberg), which keep their metadata as files next to the data. Keeping metadata in a database makes small changes cheap and avoids many tiny metadata files, at the cost of running that database. DuckLake is newer than Delta and Iceberg, and fewer engines support it, so production platforms such as Databricks, Snowflake and Microsoft Fabric use their own formats instead.

For local development, a format like DuckLake shows what a lakehouse needs at a minimum: data files, a list of which files make up each version of a table, and transactions over that list. See also [DuckDB](https://emolysis.com/glossary/duckdb) and the [DuckDB platform page](https://emolysis.com/platforms/duckdb).

Like the other open table formats, DuckLake stores table data as Parquet, so the data files themselves can be read by any engine that reads Parquet, even one that does not understand the catalog. What the catalog adds is the knowledge of which files belong to the current version of each table. See also [lakehouse](https://emolysis.com/glossary/lakehouse).

It is one of several ways to get lakehouse features without a server; see [lakehouse](https://emolysis.com/glossary/lakehouse), [Delta Lake](https://emolysis.com/glossary/delta-lake) and [Apache Iceberg](https://emolysis.com/glossary/iceberg) for the formats production platforms use. For how Emolysis keeps samples and test tables on your machine, see [Projects and emolysis.yml](https://emolysis.com/docs/projects).

---

Page: https://emolysis.com/glossary/ducklake. Emolysis is a product of Bandpey GmbH, Munich, Germany. It is in private development, and nothing is released yet.
