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.

Thirteen usable profiles ship with it, covering CISA 2026, NTIA, 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.1.0.tar.gz (65.4 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.1.0-py3-none-any.whl (81.5 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for ossbomer-2.1.0.tar.gz
Algorithm Hash digest
SHA256 71683ddf1881c8a8499778efd9b8a53286050f23cf36f3a112620ee9e2744342
MD5 8932dec0ae090bd7d6c6568bc5b4624c
BLAKE2b-256 84773675ca7f3ec9285a43912bb61ecf79ba49aea288b8f2c5e83ff1f483d804

See more details on using hashes here.

Provenance

The following attestation bundles were made for ossbomer-2.1.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.1.0-py3-none-any.whl.

File metadata

  • Download URL: ossbomer-2.1.0-py3-none-any.whl
  • Upload date:
  • Size: 81.5 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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e2751b6ccee10473505d969a0ea5c3eb5e4447f32e321a27bb409998366cbe16
MD5 0cedab9655b25d398656512ee0e8a125
BLAKE2b-256 41d4fcd72882199dfea6f309fbfce02a56d034dc197a48a7b99654a54f90933e

See more details on using hashes here.

Provenance

The following attestation bundles were made for ossbomer-2.1.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