Skip to content

Rewrite in Rust: workspace + federation engine + CLI#19

Merged
jeafreezy merged 3 commits into
mainfrom
rust-be
May 21, 2026
Merged

Rewrite in Rust: workspace + federation engine + CLI#19
jeafreezy merged 3 commits into
mainfrom
rust-be

Conversation

@jeafreezy
Copy link
Copy Markdown
Collaborator

Summary

Complete rewrite of superstac as a Rust workspace. Replaces the Python prototype
with a federated STAC engine that queries multiple catalogs concurrently,
deduplicates results, and normalizes collection + asset names to canonical
forms. Ships both a library API and a superstac CLI.

Workspace

Crate Purpose
superstac-core domain models, errors, storage trait
superstac-config YAML config loading
superstac-search federated search logic
superstac-engine runtime (health, introspection, orchestration)
superstac-cli the superstac binary

What it does

  • Federated search — concurrent fan-out, retry with exponential backoff,
    per-catalog timeouts, configurable concurrency cap.
  • Collection + asset aliasing — declare per-catalog rename rules; users
    query canonical names; items come back normalized.
  • Source selection — introspect /collections at startup; skip catalogs
    that can't serve the request.
  • Deduplication — collapse items by id across catalogs with seen_in
    provenance.
  • Discovery APIlist_collections, catalogs_supporting,
    collections_by_catalog, describe_collection.
  • CLI with search and collections subcommands, --json output,
    --verbose / --quiet log control.
  • Tracing logging with RUST_LOG override.
  • YAML config with shared + per-catalog settings.

Breaking change

Complete rewrite. The Python from superstac import ... API is gone.
Python bindings via PyO3 are on the roadmap.

Release prep

Unified workspace versioning (0.1.0), per-crate crates.io metadata,
CHANGELOG.md, cargo-release config. Ready for cargo publish once
crate names are claimed.

Test plan

  • cargo build --workspace
  • cargo test --workspace — 84 tests pass
  • cargo doc --workspace --no-deps — no warnings
  • cargo publish --dry-run -p superstac-core
  • Manual: superstac collections against a real config
  • Manual: superstac search -c sentinel-2-l2a -l 5

@jeafreezy
Copy link
Copy Markdown
Collaborator Author

jeafreezy commented May 21, 2026

Will be closing #18, #5, #10, #3 and #18

@jeafreezy jeafreezy merged commit c33e021 into main May 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant