01Overview
SPDX and CycloneDX are the two dominant SBOM formats in active use today, and both are now formally standardized — SPDX as ISO/IEC 5962:2021, CycloneDX as ECMA-424. Neither is going away, and neither has "won." CERT-In accepts either, as do NTIA and CISA guidance in the US.
The difference between them is mostly a difference of origin. SPDX began in 2010 inside the Linux Foundation to solve open-source license compliance — tracking what licenses apply to what code, precisely. CycloneDX began in 2017 inside OWASP to solve a security problem — knowing exactly what's in your software so you can correlate it against vulnerabilities. Both have since broadened well past their starting point, but that origin still shows up in where each format is strongest.
02Feature comparison
| Capability | SPDX | CycloneDX |
|---|---|---|
| Native VEX support | Via linked/related documents | Built into the core spec family |
| License expression syntax | Yes — SPDX License Expressions, the industry-wide vocabulary | Yes, references the SPDX License List |
| Component relationships | Rich relationship graph (DEPENDS_ON, CONTAINS, GENERATED_FROM, etc.) | Dependency graph via a dedicated "dependencies" section |
| xBOM family coverage | SPDX 3.0 extends to AI, datasets, hardware via a profile model | Dedicated schemas: SaaSBOM, ML-BOM (AIBOM), HBOM, CBOM, OBOM |
| Serialization formats | Tag-value, JSON, YAML, RDF/XML, spreadsheet | JSON, XML, Protocol Buffers |
| Digital signatures | Supported via external mechanisms | Supported via external mechanisms (e.g. Sigstore) |
03Architecture
SPDX is document-centric: a top-level document contains Packages, Files, and Snippets as distinct element types, tied together by an explicit Relationships graph. SPDX 3.0 reorganized this into a modular "profile" system — a Core profile plus optional profiles (Software, Build, AI, Licensing, Security, and more) that let a document declare only the parts of the model it actually needs, which is how SPDX extended into non-software BOM types without bloating the base spec.
CycloneDX is BOM-centric: a single document with typed top-level sections — metadata, components, services, dependencies, compositions, vulnerabilities — inside one schema. Related BOM types (HBOM, ML-BOM/AIBOM, CBOM, SaaSBOM) are published as closely related but separate schemas that share the same core component model rather than being profiles of one document. In practice, this makes a single CycloneDX file easier to reason about end-to-end, while SPDX 3.0's profile model is more extensible for organizations that need to mix and match exactly which data they capture.
04Performance
Neither format has an inherent runtime "performance" in the way software does — but format choice does affect document size and generation/parsing overhead in practice:
- Document size: CycloneDX JSON tends to be somewhat more compact than SPDX tag-value or RDF/XML for equivalent data, though SPDX JSON closes most of that gap; for large monorepos, both formats can reach tens of megabytes regardless.
- Generation speed: dominated by the generator tool's own implementation (how it walks the dependency tree), not by which output format it writes — the difference between formats is negligible next to the difference between tools.
- Parsing/tooling maturity: both have fast, production-grade parsers in major languages; neither format is a meaningful bottleneck in a typical CI/CD pipeline.
In short: don't choose a format based on performance. Choose based on the capabilities in §2 and the use cases in §10.
05Ease of use
CycloneDX's single-schema, JSON-first design is often described as more approachable for developers coming from an application security or DevOps background — there's one canonical way to represent most things. SPDX's flexibility (five serialization formats, a profile-based 3.0 model) is powerful but does mean a steeper initial learning curve if you're evaluating the full spec rather than just generating a basic document.
In day-to-day practice this gap matters less than it sounds: almost nobody hand-writes either format. Tools like Syft, cdxgen, and language-specific plugins generate both formats from the same source data, so the "ease of use" that actually matters most is the tool's ease of use, not the format's.
06Enterprise features
- Procurement policies that require ISO standardization specifically may favor SPDX, given its ISO/IEC 5962:2021 status.
- Security-team-driven programs centered on vulnerability correlation and exploitability communication often favor CycloneDX, given native VEX/VDR support.
- GitHub-centric workflows matter here concretely: GitHub's native dependency graph "Export SBOM" feature produces SPDX 2.3 JSON specifically — if your organization already leans on that built-in export, SPDX requires zero extra tooling.
- Broad xBOM programs covering AI systems, hardware, or cryptographic inventory alongside software may find CycloneDX's dedicated ML-BOM/HBOM/CBOM schemas or SPDX 3.0's AI/hardware profiles more directly relevant, depending on which is further along for your specific need — see the xBOM family overview.
07Licensing
Both specifications are freely implementable with no royalty, but the exact terms differ and are worth knowing precisely:
| SPDX | CycloneDX | |
|---|---|---|
| Specification document license | CC-BY-3.0 (Creative Commons Attribution) | Apache License 2.0 |
| Data within generated documents | SPDX mandates a dataLicense field — required to be CC0-1.0 — so the metadata inside any SPDX file is explicitly public-domain-equivalent | No equivalent mandated field; licensing of the BOM data itself is left to the generating organization |
| Patent policy (via formal standard) | Governed by ISO/IEC JTC 1 policies | Royalty-free patent policy under Ecma International |
This is a genuinely useful, underexplained distinction: SPDX's mandatory dataLicense: CC0-1.0 field means every valid SPDX document explicitly waives rights over its own metadata — useful if your organization wants that stated unambiguously. CycloneDX doesn't build an equivalent statement into the schema, though nothing stops you from asserting one contractually.
08Advantages & disadvantages
SPDX — advantages
- Broadest formal international standard status (ISO/IEC 5962:2021)
- Richest license-expression and relationship modeling
- What GitHub's native SBOM export produces
- Extensible 3.0 profile model for non-software BOM types
CycloneDX — advantages
- Native, first-class VEX/VDR support
- Single, more compact JSON-first schema
- Purpose-built dedicated schemas for HBOM/ML-BOM/CBOM/SaaSBOM
- Strong OWASP-backed open-source tooling ecosystem
SPDX — disadvantages
- Five serialization formats can fragment tooling support
- Historically more license-compliance-oriented; security workflows sometimes feel bolted on
- 3.0's profile model is more powerful but newer and less universally adopted yet
CycloneDX — disadvantages
- Less formal international standing than ISO (though ECMA-424 closes much of that gap)
- No mandated data-license field equivalent to SPDX's
dataLicense - Younger project overall (2017 vs. 2010), though maturity has largely caught up
09Comparison matrix
| SPDX | CycloneDX | |
|---|---|---|
| Maintainer | Linux Foundation | OWASP + Ecma International |
| First released | 2010 | 2017 |
| Formal standard | ISO/IEC 5962:2021 | ECMA-424 (1st Ed. 2024, 2nd Ed. 2025) |
| Primary origin | License compliance | Application security |
| Native VEX | Via linked documents | Built in |
| CERT-In accepted | Yes | Yes |
| GitHub native export format | Yes (SPDX 2.3) | No |
| Spec license | CC-BY-3.0 | Apache License 2.0 |
10Recommendations by use case
- Primary driver is open-source license complianceSPDX
- Primary driver is vulnerability correlation and VEX workflowsCycloneDX
- Already relying on GitHub's native "Export SBOM" featureSPDX
- Procurement policy specifically requires ISO-standardized formatsSPDX
- Building a program spanning SBOM, HBOM, AIBOM under one tightly related schema familyCycloneDX
- Only regulatory driver is CERT-In, with no other constraintEither — pick based on existing tooling
- Team is new to SBOM and wants the simplest single format to learnCycloneDX (marginally)
See choosing the right SBOM standard for a broader decision framework that also covers SWID.
11Frequently asked questions
Which is better, SPDX or CycloneDX?
Neither, categorically. They solve overlapping but differently-weighted problems — license compliance and broad standardization for SPDX, security correlation and a unified xBOM schema family for CycloneDX. The right one depends on your primary use case; see §10 above.
Does CERT-In prefer one format over the other?
No. CERT-In's guidelines explicitly accept either SPDX or CycloneDX, while recommending SPDX license identifiers for the license field regardless of which BOM format you choose.
Can I convert between SPDX and CycloneDX?
Yes, for most common fields — see how to convert SPDX to CycloneDX. Some format-specific fields (like SPDX's richer relationship types or CycloneDX's native VEX) don't have a perfect one-to-one mapping.
Which format does GitHub use?
GitHub's native dependency graph "Export SBOM" feature produces SPDX 2.3 JSON specifically.
Can I use both formats?
Yes — many organizations generate CycloneDX for internal vulnerability workflows and SPDX for external compliance/procurement submissions, using conversion tooling to keep them in sync.
Which is easier for a beginner to learn?
CycloneDX's single JSON-first schema is marginally more approachable to read directly. In practice, most people generate both formats with a tool rather than hand-writing either, which narrows this gap considerably.
12Official references
- SSPDX specificationspdx.dev↗
- CCycloneDX specificationcyclonedx.org↗
- IISO/IEC 5962:2021iso.org↗
- EEcma International — ECMA-424 (CycloneDX)ecma-international.org↗
- GGitHub Docs — Exporting a software bill of materials for your repositorydocs.github.com↗
- CCERT-In — Technical Guidelines on Software Bill of Materialscert-in.org.in · refcode CISG-2024-02↗
Not sure which one fits your program?
Walk through our decision framework, or see which tools generate which formats out of the box.