CycloneDX Python Library

11.7.0 · active · verified Mon Apr 06

The CycloneDX Python Library provides data models, validators, and serialization/deserialization capabilities for creating, rendering, and reading CycloneDX Software Bill of Materials (SBOM) documents. It is an OWASP Flagship Project and is intended as a programmatic library, not a standalone SBOM generation tool. The library maintains a frequent release cadence, often releasing new minor versions multiple times a quarter.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to programmatically create a simple CycloneDX SBOM with two components and a dependency relationship, then serialize it to JSON using Schema Version 1.5. It also includes commented-out code for deserialization as an example.

from cyclonedx.model.bom import Bom
from cyclonedx.model.component import Component
from cyclonedx.model.dependency import Dependency
from packageurl.contrib.url2purl import url2purl
from cyclonedx.output import JsonV15

# 1. Create a new BOM
bom = Bom()

# 2. Define components
component_a = Component(name='my-app', version='1.0.0')
component_a.bom_ref.value = 'pkg-a-1.0.0'

component_b_purl = url2purl('pkg:pypi/requests@2.28.1')
component_b = Component(name='requests', version='2.28.1', purl=component_b_purl)
component_b.bom_ref.value = 'pkg-b-2.28.1'

# 3. Add components to the BOM
bom.add_component(component_a)
bom.add_component(component_b)

# 4. Add a dependency relationship (optional)
dep_a_to_b = Dependency(ref=component_a.bom_ref)
dep_a_to_b.add_dependency(component_b.bom_ref)
bom.add_dependency(dep_a_to_b)

# 5. Serialize the BOM to JSON (using CycloneDX Schema Version 1.5)
outputter = JsonV15(bom)
json_output = outputter.output_as_string(indent=2)

print(json_output)

# Example of deserialization (requires `validation` extra)
# from cyclonedx.validation.schema import SchemaVersion
# from cyclonedx.parsers.json.parser import JsonParser
# parsed_bom = JsonParser(json_output).parse(SchemaVersion.V1_5)
# print(f"Parsed BOM version: {parsed_bom.get_spec_version().to_string()}")

view raw JSON →