Skip to main content

ossbomer

Profile-driven SBOM validation, conformance, and license policy for SPDX and CycloneDX.

Most SBOM tools answer one question. ossbomer answers three in a single pass:

  • Is the document structurally valid, judged against the spec version it declares?
  • Does it carry the fields a given regulation asks for, at that regulation's severity?
  • Given how you ship this software, does policy allow the licenses it declares?

You pick a profile, which is one YAML file binding all three. So "does this SBOM meet the EU CRA" is one argument instead of three tool runs and a spreadsheet.

Twelve profiles ship with it, covering NTIA, CISA 2025, EU CRA, BSI TR-03183, India CERT-In, OpenChain Telco, FedRAMP, AIBOM, and four license use cases.

Full documentation: https://semclone.github.io/ossbomer/

Install

Requires Python 3.9 or newer; tested through 3.13.

pip install "ossbomer[oslc]"

The oslc extra pulls in ospac, which evaluates license policy. Every license-* profile needs it. Plain pip install ossbomer works if you only need schema and conformance.

Upgrading from 0.1.4 is a breaking change: that release predates the profile engine, and the per-layer commands it shipped now behave differently. See the changelog.

Use

ossbomer validate --profile ntia-min-elements --file sbom.json
============================================================
Profile: NTIA Minimum Elements for an SBOM
Verdict: FAIL (4 MUST violations)
Quality score: 63 / 100
  Completeness: 63
  Accuracy:     41
  Consistency:  75
  Provenance:   68
  Freshness:    70
Top issues:
  1. Freshness: ntia-timestamp — rfc3339_utc: '2010-01-29T18:30:22' lacks a UTC/timezone designator [document]
  2. Completeness: ntia-unique-identifier — present: field is absent or empty [components[0]:glibc@2.11.1]
  3. Completeness: ntia-unique-identifier — present: field is absent or empty [components[2]:Saxon@8.8]
============================================================

--profile repeats, and each profile is evaluated on its own with its own verdict and score. Nothing is averaged between them, because a good NTIA score tells you nothing about CRA readiness.

Output can be console, json, or sarif. The exit code works as a CI gate: 0 if nothing failed, 1 if a profile failed, 2 if the file could not be read. Nothing calls the network.

Formats

Format Versions JSON XML Tag-value YAML
CycloneDX 1.3 - 1.6 yes yes not applicable no such serialization
SPDX 2.2, 2.3 yes yes yes yes
SPDX 3.0 structural only no official schema not applicable no

Validation follows the version the document declares, using cyclonedx-python-lib and spdx-tools rather than vendored schemas.

Documentation

Getting started Install it and read a result
Profiles The catalog, and writing your own
License policy Use cases, SPDX expressions, overrides
Using it in CI Gating a build, SARIF and code scanning
Verdicts and exit codes How findings become one answer
CLI reference Every command and flag

Contributing

See CONTRIBUTING.md. Adding a profile is the most approachable place to start, since profiles are YAML rather than code.

Every change lands through a pull request with green CI. Contributors sign a CLA once, in the pull request, by replying to the bot. Participation is governed by the Code of Conduct.

Please do not open a public issue for a security vulnerability. Report it as described in SECURITY.md.

License

Apache License 2.0. See LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ossbomer-2.0.0.tar.gz (46.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ossbomer-2.0.0-py3-none-any.whl (60.6 kB view details)

Uploaded Python 3

File details

Details for the file ossbomer-2.0.0.tar.gz.

File metadata

  • Download URL: ossbomer-2.0.0.tar.gz
  • Upload date:
  • Size: 46.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for ossbomer-2.0.0.tar.gz
Algorithm Hash digest
SHA256 c1f3e043daebcdb421b4e797951159422ea382e760490f359a20ebfe71338d31
MD5 f55a08d4db6b849ee261de060eaaac87
BLAKE2b-256 9eee8266b86152c372a87054850144967ba41fc15eb90f80c2af325b131cbb25

See more details on using hashes here.

Provenance

The following attestation bundles were made for ossbomer-2.0.0.tar.gz:

Publisher: release.yml on SemClone/ossbomer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ossbomer-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: ossbomer-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 60.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for ossbomer-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6a9968c622fe3306215e74b37e337523c15b002b7f3ad65f8f1e33bdfd8d956f
MD5 cac4bf7135a8fb05ebc3e06bdd3bd966
BLAKE2b-256 4c2d2864a1b90002e7cdb4b868324578c61aa7be212d5aa3d467eef7de18578e

See more details on using hashes here.

Provenance

The following attestation bundles were made for ossbomer-2.0.0-py3-none-any.whl:

Publisher: release.yml on SemClone/ossbomer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page