DuckIceLake: an Iceberg v3 REST Catalog proxy on top of DuckLake

A FastAPI REST proxy that lets standard Iceberg clients speak directly to a DuckLake-backed lakehouse — no migration, no lock-in, full governance over S3 access.

DuckLake gives you a governed, Postgres-backed lakehouse for almost nothing. The catch: your existing tools — PyIceberg, Trino, Spark — speak Iceberg, not DuckLake. DuckIceLake closes that gap.

It’s a FastAPI REST proxy that materialises DuckLake’s Postgres catalog state into spec-compliant Iceberg metadata on S3 in real time, so any Iceberg client reads and writes seamlessly while DuckLake stays consistent underneath (DuckLake HEAD == Iceberg current-snapshot-id).

Why it matters for sovereign data:

  • Dual-path, one source of truth — Iceberg REST clients and DuckLake direct clients hit identical data, kept in sync automatically.
  • Full Iceberg v3 — a PyIceberg shim enables production v3 writes, including deletion vectors and row lineage.
  • Credential governance — per-table STS credential vending (MinIO AssumeRole) means no shared root keys handed to query engines.
  • Zero lock-in — a spec-compliant REST surface keeps clients portable; swap the backing store and only the proxy changes.

This is exactly the kind of EU-hostable, auditable lakehouse layer I build with clients — and you can manage it yourself in the Experience Sovereign AI & Data cohort.

DuckIceLake is open source: github.com/kellerkev/duckicelake.

This is a condensed version. Read the full article on kevinkeller.org →

Ready for sovereign, compliant AI & data infrastructure?

Tell me briefly about your environment and goals — I'll get back to you.

Or email hello@fineupp.com