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 2021, EU CRA, BSI TR-03183, India CERT-In, OpenChain Telco, FedRAMP, AIBOM, and four license use cases. Every rule cites the clause it comes from, and the documents those citations point at are in the repository with checksums, so a finding can be traced rather than taken on trust.

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 cisa-2026-min --file sbom.json
============================================================
Profile: CISA 2026 SBOM Minimum Elements
Verdict: FAIL (191 MUST violations)
Quality score: 64 / 100
  Completeness: 74
  Accuracy:     60
  Consistency:  100
  Provenance:   42
  Freshness:    60
Top issues:
  1. Freshness: schema-min-version: cyclonedx 1.4 is below required minimum 1.5 [document.specVersion]
  2. Provenance: cisa26-sbom-author-signature: signed_with_x509: SBOM is not signed [document]
  3. Freshness: cisa26-sbom-data-format-version: format_version_at_least: cyclonedx 1.4 is below required minimum 1.5 [document]
============================================================

Most real SBOMs fail a minimum-elements profile today. The verdict answers whether the document meets the standard; the score tells you how far off it is.

--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 or the profile named is withdrawn. Nothing calls the network.

Declared licenses are normalized to SPDX first, so policy is never asked about a string it cannot identify. GPL-2.0+, MIT or Apache-2.0, npm's MIT || Apache-2.0 and Apache 2 all resolve. Family names like BSD and GPL do not, because they name no single license, and they are reported as unresolved rather than guessed at.

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.2.1.tar.gz (66.7 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.2.1-py3-none-any.whl (81.9 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for ossbomer-2.2.1.tar.gz
Algorithm Hash digest
SHA256 ecd7db43c3e62b938f8b488e404b3aaf1229ec749998fd922dba259948469e03
MD5 aa0e51311ccb50d82b2a385b84834a6d
BLAKE2b-256 05fa215356fa61d367b051ca1131b5a0482c75886adf3ced6d96c5b00dd56914

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ossbomer-2.2.1-py3-none-any.whl
  • Upload date:
  • Size: 81.9 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.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f9ba15cd62cf22e39199d090ee7bf808a39bc66c42e0f2bd6b7052b0ae6616d6
MD5 7f549de22a57e40816f034846b84f839
BLAKE2b-256 04bef05de84d06015eb2e1a9aeb34cf6e73dfc2502c0256afcf052b911055a6e

See more details on using hashes here.

Provenance

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