Skip to main content

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, --branch branch to clone (GitHub repo input on scan only).
  • -f, --format [cyclonedx|spdx|both] (default both).
  • -o, --output PREFIX (default sbom) produces sbom.cdx.json, sbom.spdx.json.
  • --quiet prints 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 run evo-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 CHANGE in 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)

Source distribution for evo-sbom 0.1.1
File Size Uploaded Provenance
evo_sbom-0.1.1.tar.gz 17.9 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for evo-sbom 0.1.1
File Interpreter ABI Platform
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 log

Release 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 log

Security 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.

Select from 2 files

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 log

A 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.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page