skade-katalog — crate card
Reverse-engineered (from source — verify, don't trust the name)
- One-line pitch: A pure-Rust, embedded, single-file ACID Apache Iceberg catalog backed by redb (implements
iceberg::Catalog). - Does: Implements the
iceberg::Catalogtrait against one.redbfile that holds all catalog metadata (namespaces, properties, table-pointer rows); table data/metadata blobs live in whateverFileIO/storage factory is supplied (local fs, S3, …). Key public types:RedbCatalog,RedbCatalogBuilder,RedbCatalogError, plusRedbCatalog::atomic_releasefor committing NTableCommits atomically in one redb write transaction. Caches metadata/pointers (moka, arc-swap, imbl, foldhash L1 mirror) and keeps a static search-tree (znippy-zoomies STree64) snapshot-id index. - Key deps:
iceberg(vendored arrow-58 forkiceberg-arrow58),redb(storage engine),moka/arc-swap/imbl/foldhash(caches),znippy-zoomies(STree64 snapshot index),async-trait,tokio(sync/rt),serde/serde_json,thiserror. Dev/test:nornir-testmatrix(functional-status emitter,testmatrixfeature passthrough). - Shape: lib only (~11 modules: catalog, store, static_index, atomic, builder, meta_cache/pointer_cache/table_cache, keys, error). catalog.rs and store.rs are the heavy modules (~38K/25K). Roots its own workspace pulling the vendored iceberg-arrow58 forks as members.
- Observed role in the workspace: The catalog layer under
skade(the writer/reader/SQL crate depends on it viapath+version) and driven byskade-katalog-bench. Published to crates.io asskade-katalog; the canonical publisher of theiceberg-arrow58fork names.
Fill in (one line each — only the human knows these)
- Primary consumer(s):
- Why it exists (vs the obvious alternative):
- Hard constraint (airgap / no-C-deps / no-FFI / pure-Rust / etc.):
- Release cadence & independence (rides a parent? own repo someday?):
- Status (production / prototype / experimental / stubbed):
- Must-NOT-change invariant:
- Biggest known gap or TODO:
- Anything a newcomer would get wrong about it: