Native SDKs for DuckLake.
See the codeducklake-sdk — Native SDKs for DuckLake
Read and write DuckLake tables from Rust and Python - no DuckDB required.
DuckLake is an integrated data lake and catalog format that stores metadata in a SQL catalog database and writes data as Parquet files. This repository provides standalone Rust and Python SDKs that talk to DuckLakes directly, with no dependency on DuckDB or its DuckLake extension.
All language SDKs are built on the same Rust core, which bundles the implementation of the DuckLake specification.
Python (ducklake-sdk)
Rust (ducklake)
[!WARNING] This is not an official SDK released by DuckLabs.
Python
pip install ducklake-sdk # core
pip install "ducklake-sdk[polars]" # Polars integration
pip install "ducklake-sdk[arrow]" # Arrow + DuckDB integration
Rust
cargo add ducklake
import ducklake as dl
import polars as pl
# Create a new DuckLake backed by SQLite metadata and local Parquet storage
ducklake = dl.create("sqlite:///metadata.sqlite", data_path="data_files/")
# Define a table.
table = ducklake.create_table(
"events",
schema={"id": dl.Int64(), "message": dl.Varchar()},
)
# Write data using Polars
lf = pl.LazyFrame({"id": [1, 2, 3], "message": ["hello", "ducklake", "sdk"]})
table.sink_polars(lf)
# Read it back as a Polars LazyFrame
df = table.scan_polars().collect()
For the full API, see the Python documentation or the Rust API docs.
The Rust core — and therefore every SDK built on top of it — supports:
The Python SDK additionally provides:
Catalog Databases
| Database | Status |
|---|---|
| SQLite | ✅ |
| Postgres | ✅ |
| MySQL | 🟧 (no data inlining*) |
| DuckDB (via Quack) | ❌ |
*Data inlining for MySQL is not defined in the DuckLake specification.
Storage Backends
| Backend | Status |
|---|---|
| Local / NFS | ✅ |
| AWS S3-compatible | ✅ |
| Google Cloud Storage | ✅ |
| Azure Blob Storage | ✅ |
DuckLake Specification Versions
| Version | Status |
|---|---|
| 1.0 | ✅ (actively supported) |
| 0.4 | ⬆️ (requires migration) |
| 0.3 | ⬆️ (requires migration) |
| 0.2 | ⬆️ (requires migration) |
| 0.1 | ⬆️ (requires migration) |
See the DuckLake release calendar for upcoming versions.
[!NOTE] This project is in alpha. It will move to beta once the full specification is implemented, and to stable once all relevant limitations have been addressed. Expect occasional breaking changes until then.
Rust SDK (may impact efficiency):
Python SDK:
Contributions, bug reports, and feature requests are very welcome. See the contribution guidelines to get started.
Licensed under the MIT License.
373 followers · starred May 2026
13 followers · starred Jun 2026
16 followers · starred May 2026
Native SDKs for DuckLake.
See the codeducklake-sdk — Native SDKs for DuckLake
Read and write DuckLake tables from Rust and Python - no DuckDB required.
DuckLake is an integrated data lake and catalog format that stores metadata in a SQL catalog database and writes data as Parquet files. This repository provides standalone Rust and Python SDKs that talk to DuckLakes directly, with no dependency on DuckDB or its DuckLake extension.
All language SDKs are built on the same Rust core, which bundles the implementation of the DuckLake specification.
Python (ducklake-sdk)
Rust (ducklake)
[!WARNING] This is not an official SDK released by DuckLabs.
Python
pip install ducklake-sdk # core
pip install "ducklake-sdk[polars]" # Polars integration
pip install "ducklake-sdk[arrow]" # Arrow + DuckDB integration
Rust
cargo add ducklake
import ducklake as dl
import polars as pl
# Create a new DuckLake backed by SQLite metadata and local Parquet storage
ducklake = dl.create("sqlite:///metadata.sqlite", data_path="data_files/")
# Define a table.
table = ducklake.create_table(
"events",
schema={"id": dl.Int64(), "message": dl.Varchar()},
)
# Write data using Polars
lf = pl.LazyFrame({"id": [1, 2, 3], "message": ["hello", "ducklake", "sdk"]})
table.sink_polars(lf)
# Read it back as a Polars LazyFrame
df = table.scan_polars().collect()
For the full API, see the Python documentation or the Rust API docs.
The Rust core — and therefore every SDK built on top of it — supports:
The Python SDK additionally provides:
Catalog Databases
| Database | Status |
|---|---|
| SQLite | ✅ |
| Postgres | ✅ |
| MySQL | 🟧 (no data inlining*) |
| DuckDB (via Quack) | ❌ |
*Data inlining for MySQL is not defined in the DuckLake specification.
Storage Backends
| Backend | Status |
|---|---|
| Local / NFS | ✅ |
| AWS S3-compatible | ✅ |
| Google Cloud Storage | ✅ |
| Azure Blob Storage | ✅ |
DuckLake Specification Versions
| Version | Status |
|---|---|
| 1.0 | ✅ (actively supported) |
| 0.4 | ⬆️ (requires migration) |
| 0.3 | ⬆️ (requires migration) |
| 0.2 | ⬆️ (requires migration) |
| 0.1 | ⬆️ (requires migration) |
See the DuckLake release calendar for upcoming versions.
[!NOTE] This project is in alpha. It will move to beta once the full specification is implemented, and to stable once all relevant limitations have been addressed. Expect occasional breaking changes until then.
Rust SDK (may impact efficiency):
Python SDK:
Contributions, bug reports, and feature requests are very welcome. See the contribution guidelines to get started.
Licensed under the MIT License.
373 followers · starred May 2026
13 followers · starred Jun 2026
16 followers · starred May 2026