provenance is a CLI that generates SBOMs and third-party notices for JavaScript and Rust repositories, and checks that committed outputs stay current.
It is designed to be deterministic, repo-friendly, and boring to operate.
The current baseline focuses on:
- JavaScript projects and workspaces
- Rust crates and workspaces
- Mixed JS/Rust repositories
- Optional container image SBOM generation via
syft
The workflow is file-based:
- one config file
- deterministic generated outputs
- no direct CI pushes to
main - repo-friendly
generate,check, anddiffflows
THIRD-PARTY-NOTICESis a generated inventory of detected third-party components and declared license identifiers. It is not legal advice, and some licenses may require additional attribution text at distribution time.- The safest canonical outputs come from a controlled CI or release environment, especially when your dependency graph includes platform-specific packages.
notice.internal_scopescan be used to exclude first-party scoped packages from generated notices and repo SBOM component inventories.sbom.exclude_regexescan be used to exclude generated runtime artifacts such aswasm/dist/outputs or root-level*.wasi-browser.jsfiles from SBOM evidence so post-build checks stay deterministic.output_dirmust point to a dedicated directory such asprovenance; the tool refuses to write managed outputs directly into the repository root.
Download a pinned binary from GitHub Releases for CI and automation.
Example for Linux x64:
curl -fsSL -o /tmp/provenance.tar.gz \
https://github.com/stella/provenance/releases/download/v0.1.0/provenance-v0.1.0-x86_64-unknown-linux-gnu.tar.gz
tar -xzf /tmp/provenance.tar.gz -C /tmp
install /tmp/provenance-v0.1.0-x86_64-unknown-linux-gnu/provenance ~/.local/bin/provenanceTo build or install from source instead:
cargo install --git https://github.com/stella/provenance --lockedFor local development:
cargo install --path .The CLI itself is a single Rust binary. Analysis still depends on ecosystem tooling:
cdxgenfor JavaScript and Rust SBOM generation- supported discovery order:
cdxgen,bunx @cyclonedx/cdxgen,npx --yes @cyclonedx/cdxgen
- supported discovery order:
syftfor optional container SBOMs
You can also point the CLI at explicit binaries:
PROVENANCE_CDXGEN=/path/to/cdxgenPROVENANCE_SYFT=/path/to/syft
provenance init
provenance generateprovenance init discovers JavaScript and Rust projects under the current root
and writes .provenance.yml.
provenance generate writes deterministic compliance artifacts into the
configured output directory.
For ongoing verification:
provenance check
provenance diffFor a single-project repo:
provenance/sbom.cdx.jsonprovenance/THIRD-PARTY-NOTICES.txt
For multi-project repos:
provenance/projects/<id>/sbom.cdx.jsonprovenance/projects/<id>/THIRD-PARTY-NOTICES.txt
For each configured container:
provenance/containers/<name>/sbom.cdx.jsonprovenance/containers/<name>/THIRD-PARTY-NOTICES.txt
Repo-level outputs:
provenance/report.json
When there is more than one project or any configured containers:
provenance/THIRD-PARTY-NOTICES.repo.txt
The recommended flow is:
- run
provenance generatewhen dependency inputs change - commit the generated outputs
- run
provenance checkin CI
This repo follows that model directly in GitHub Actions.
cargo fmt -- --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test
cargo test --test integration_real -- --ignored
cargo doc --no-deps
cargo deny check
cargo package --locked