evo-sbom
A CLI that automatically generates SBOMs (Software Bill of Materials) for Python projects, Node.js projects, and Docker images.
evo-sbom is a UX layer (click + rich) wrapped around syft. The syft binary is downloaded automatically into ~/.evo-sbom/bin on first run (the version is pinned in src/evo_sbom/config.py).
Installation
From PyPI:
pip install evo-sbom
# or
uv tool install evo-sbom
From source:
uv sync
Usage
# Auto-detect Python / Node.js and generate both CycloneDX + SPDX
uv run evo-sbom scan .
# Scan a GitHub repo directly (cloned to a temp dir, then removed)
uv run evo-sbom scan maycuatroi1/evo-cli
uv run evo-sbom scan https://github.com/owner/repo
uv run evo-sbom scan owner/repo --branch dev
# Force the project type
uv run evo-sbom python ./my-python-app
uv run evo-sbom node ./my-node-app
# Docker image (image ref, docker-archive:, or oci-archive:)
uv run evo-sbom docker alpine:latest
uv run evo-sbom docker docker-archive:./image.tar
# Check / install the syft engine
uv run evo-sbom doctor
Common flags
-b, --branchbranch to clone (GitHub repo input onscanonly).-f, --format [cyclonedx|spdx|both](defaultboth).-o, --output PREFIX(defaultsbom) producessbom.cdx.json,sbom.spdx.json.--quietprints only the written file paths (for CI).
Output
*.cdx.json- CycloneDX JSON*.spdx.json- SPDX 2.3 JSON
Notes on unpinned dependencies
If a Python project declares its dependencies without pinned versions (no ==),
leaves pyproject.toml dependencies empty, or has no lock file, a source-directory
scan yields no Python packages, because syft needs resolved versions to catalog them.
In that case scan a resolved environment instead:
- Build the project's Docker image (its Dockerfile usually runs
pip install -r requirements.txt) and runevo-sbom docker <image>. This also captures OS/apt and base-image packages. - Or create a fresh virtualenv, install the project into it, and run
evo-sbom python <venv>.
Development
uv run pytest
Releasing
Pushing to main triggers .github/workflows/release.yml, which bumps the
version, builds, and publishes to PyPI via Trusted Publishing (OIDC, no token).
The bump type is derived from the latest commit message:
BREAKING CHANGEin the message -> major- message starting with
feat-> minor - anything else -> patch
A matching vX.Y.Z tag and GitHub Release are created automatically.
One-time PyPI setup (Trusted Publishing): on pypi.org create a pending publisher
for project evo-sbom with owner maycuatroi1, repo evo-sbom, workflow
release.yml.
Metadata
Release files for evo-sbom 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| evo_sbom-0.1.1.tar.gz | 17.9 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| evo_sbom-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 27.5 kB
Release files / evo_sbom-0.1.1.tar.gz
| Download URL | evo_sbom-0.1.1.tar.gz |
|---|---|
| Size | 17.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
857f3f2fd9556486cd6ced4ce25535dd892ed95cee81be664fec97a512f4a299
|
|
BLAKE2b-256 checksum How to use checksums |
62bc788f5af5ad16865e47c27924c9e01065a5bd3d6eecbbcc90d4b5dc9fb578
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 31, 2026.
Transparency logRelease files / evo_sbom-0.1.1-py3-none-any.whl
| Download URL | evo_sbom-0.1.1-py3-none-any.whl |
|---|---|
| Size | 9.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
779b62e742145fbf75dbb2fc0a785619065f91e6fc05cc16a1773fed3cd601a8
|
|
BLAKE2b-256 checksum How to use checksums |
cf100aea2e1bb7f974e92438c01a7f8bd5d6128a8d899d8f4a21762b0e07f58f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 31, 2026.
Transparency logSecurity for evo-sbom 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for evo_sbom-0.1.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 31, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.