CycloneDX
Identity
A format created within OWASP and standardised as ECMA-424. Serialisations: JSON (recommended), XML and Protobuf.
Designed by a security community, to be produced and consumed by machines in automated chains.
Document structure
| Section | Content |
|---|---|
metadata |
Timestamp, tool that produced the document, author, component described (the product itself), supplier, product licences |
components |
The component list: type, name, version, publisher, identifiers (purl, cpe), hashes, licences, description |
dependencies |
The graph: which component depends on which. This is the section that separates direct from transitive |
services |
External services called — useful for distributed architectures |
compositions |
Completeness declaration: is this inventory complete, incomplete, or of unknown completeness |
vulnerabilities |
Known vulnerabilities affecting the components, with source, score, state |
annotations |
Signed assertions about all or part of the document |
formulation |
How the artefact was produced: build chain, steps, environment |
The compositions section is under-used and yet decisive for compliance: it lets you
explicitly declare that an inventory covers only top-level dependencies, rather than
implying a completeness that does not exist.
The extensions
CycloneDX is not limited to software:
| Extension | Purpose |
|---|---|
| SaaSBOM | Services and interfaces of a distributed architecture |
| HBOM | Hardware bill of materials |
| ML-BOM | Machine learning models, datasets, model cards |
| CBOM | Cryptographic inventory — algorithms, key sizes, protocols |
| OBOM | Runtime configuration |
| VDR / VEX | Vulnerability disclosure report and exploitability assertions |
CBOM deserves particular attention: it is the natural tool for preparing post-quantum migration, a topic that will meet the CRA through the state-of-the-art expectation in Annex I.
Annotated example
{
"bomFormat": "CycloneDX",
"specVersion": "1.6",
"serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
"version": 1,
"metadata": {
"timestamp": "2026-08-19T09:12:04Z",
"tools": { "components": [ { "type": "application", "name": "syft", "version": "1.x" } ] },
"component": {
"type": "application",
"bom-ref": "pkg:generic/[email protected]",
"name": "acme-gateway",
"version": "4.2.1",
"licenses": [ { "license": { "id": "Apache-2.0" } } ]
}
},
"components": [
{
"type": "library",
"bom-ref": "pkg:maven/org.example/[email protected]",
"name": "http-client",
"group": "org.example",
"version": "5.3.1",
"purl": "pkg:maven/org.example/[email protected]",
"licenses": [ { "license": { "id": "MIT" } } ],
"hashes": [ { "alg": "SHA-256", "content": "9f2c…" } ]
}
],
"dependencies": [
{
"ref": "pkg:generic/[email protected]",
"dependsOn": [ "pkg:maven/org.example/[email protected]" ]
}
],
"compositions": [
{ "aggregate": "complete", "assemblies": [ "pkg:generic/[email protected]" ] }
]
}
Points to note in this example:
bom-refis the internal key linking components and dependencies; it must be stable across builds for comparisons to be meaningful;purlis the identifier that makes correlation reliable — see Identifiers;hashesties the inventory to the actual artefact: without a hash, nothing proves this SBOM describes the shipped binary;compositions.aggregatedeclares completeness and commits the producer.
Why it works as the pivot format
Three reasons: native support for VEX, and therefore the ability to document decisions not to fix within the same ecosystem; the richness of build metadata, useful for the traceability Annex VII expects; and the breadth of available CI/CD tooling.