# ducklake-storage

Async DuckLake catalog backends and metadata maintenance hooks.

This crate owns the backend abstraction used by `datafusion-ducklake-provider` and the
catalog implementations for SQLite, DuckDB-file, Postgres, and client-only
DuckDB Quack transports. The pure DuckLake format logic lives in
`ducklake-catalog`; this crate adds catalog I/O, object-store path handling,
metadata commits, cleanup, and maintenance hooks.

Feature flags:

| Feature | Meaning |
|---|---|
| `sqlite` | SQLite catalog backend through bundled `rusqlite`; enabled by default. |
| `duckdb` | Embedded DuckDB-file catalog backend. |
| `postgres` | Remote Postgres catalog backend. |
| `quack` | Client-only DuckDB Quack protocol backend. |
| `embedded` | Convenience feature for `sqlite` + `duckdb`. |
| `remote` | Convenience feature for `postgres` + `quack`. |
| `object-store-s3` | S3-compatible object-store support. |

Remote-only builds should not pull in SQLite or DuckDB native driver crates.
The repository guards that with `scripts/check-remote-native-deps.sh`.
