« All posts

duckdb_object_storage: A Full DuckDB Database Running on Just a Bucket

New DuckDB extension stores native database files in S3 with no catalog, coordinator, or compactor—just a bucket and full DuckDB semantics.

duckdb_object_storage is a new DuckDB community extension that stores DuckDB's native file format—indexes, constraints, WAL included—directly in object storage. Unlike table formats such as Iceberg or DuckLake, it needs no separate catalog service, coordinator, or compactor; even writer fencing metadata lives in the bucket itself.

Built on SlateDB and Apache OpenDAL, the extension swaps out the disk underneath DuckDB's storage engine rather than modifying the engine itself, so ART indexes, enforced constraints, checkpoints, and extensions all behave exactly as they would on local disk. Read performance stays close to native DuckDB (roughly 10% overhead), while cold S3 reads run about 1.2x slower than native DuckDB over HTTPFS.

A key engineering detail is chunk alignment: 256 KiB chunks matched to DuckDB's block size mean every block maps to exactly one object, turning reads and writes into single operations instead of read-modify-write cycles. For engineers, this means running a fully ACID-compliant database on ephemeral compute with nothing to operate but a storage bucket.

This synthesis was produced from its source by AI; there is no human editor or manual review step. How we work