01Overview
A Software Bill of Materials (SBOM) is a structured, machine-readable inventory of every component that makes up a piece of software — every open-source library, third-party package, and internal module, along with metadata such as version, supplier, license, and unique identifiers like a Package URL (PURL). It is the software-world equivalent of the ingredient list on packaged food, or the parts list a manufacturer keeps for a physical product.
The reason SBOMs exist is simple: most modern applications are assembled, not written from scratch. A typical service might contain a few thousand lines of code its own team wrote, sitting on top of hundreds of open-source and third-party components pulled in as dependencies. Industry research on open-source usage consistently finds that the large majority of a typical codebase, often cited in the range of 70–90%+, consists of third-party and open-source code rather than code written in-house. Without a structured inventory, most organizations simply don't know, with any precision, what's actually running in production.
An SBOM closes that gap. It gives security teams a way to answer "are we affected by this newly disclosed vulnerability?" in minutes instead of days, gives legal and procurement teams a way to verify license obligations, and gives regulators and customers a way to verify what they're being asked to trust. It is also the foundational artifact behind India's CERT-In software supply chain security guidelines, and the broader xBOM family — CBOM, HBOM, AIBOM and QBOM — extends the same idea to cryptography, hardware, AI systems and quantum-safe components.
02History
The SBOM concept didn't appear overnight — it grew out of two separate movements that eventually converged: open-source license compliance tooling, and software supply chain security in the wake of major breaches.
The Linux Foundation launches the SPDX project to standardize how organizations exchange data about open-source license compliance — SBOM's earliest direct ancestor.
OWASP creates CycloneDX, a lightweight BOM format designed from the outset for security use cases — software composition analysis and vulnerability correlation — rather than license compliance.
The SolarWinds compromise, a backdoored software update pushed to thousands of organizations including US federal agencies, becomes the catalyst that moves supply chain security onto national policy agendas. Read the SolarWinds retrospective.
US President Biden signs Executive Order 14028, "Improving the Nation's Cybersecurity," directing the Department of Commerce and NTIA to define the minimum elements of an SBOM.
The NTIA publishes "The Minimum Elements For a Software Bill of Materials (SBOM)" — data fields, operational considerations and automation support — becoming the de facto baseline definition referenced worldwide.
SPDX 2.2.1 is formalized as ISO/IEC 5962:2021, becoming the first SBOM-related format to reach full international standard status.
CERT-In publishes India's "Technical Guidelines on Software Bill of Materials (SBOM)" — a ~40-page document aimed at government bodies, public sector organizations, essential services and software producers/exporters.
CycloneDX v1.6 is ratified by Ecma International as ECMA-424, 1st Edition, giving CycloneDX its own formal international standardization track alongside SPDX.
CERT-In releases version 2.0 of its guidelines, broadening scope beyond SBOM to the full xBOM family — SBOM, QBOM, CBOM, AIBOM and HBOM.
NTIA opens a request for comment on "2025 Minimum Elements for a Software Bill of Materials," signaling the US baseline itself continues to evolve rather than being frozen at its 2021 definition.
CycloneDX v1.7 becomes ECMA-424, 2nd Edition.
See the full history of SBOM for a deeper treatment of each milestone.
03Architecture
Regardless of format, every SBOM shares the same conceptual architecture — four layers stacked on top of each other:
- Document metadata layer — who created this SBOM, with what tool, at what timestamp, and against which specification version. This is what lets a consumer trust the provenance of the SBOM itself.
- Component inventory layer — the flat list of every component: name, version, supplier, license, and identifiers (PURL, CPE, or a SWID tag).
- Relationship / dependency graph layer — which components depend on, contain, or are derived from which others. This is what separates a real SBOM from a flat parts list: it distinguishes direct dependencies (the ones your team explicitly chose) from transitive dependencies (the ones pulled in automatically by something else).
- External references layer — outbound links from a component to things like its source repository, download location, vulnerability advisories, or license text.
NTIA and CISA further classify SBOMs by when in the software development lifecycle they were generated — commonly grouped into six types: Design (from architecture/planning, before code exists), Source (from source code and manifests), Build (generated during compilation, most accurate to what's actually assembled), Analyzed (via binary/composition analysis of an existing artifact), Deployed (the configuration of a live system), and Runtime (what's actually executing, including dynamically loaded components). A Build or Deployed SBOM is generally more trustworthy than a Source SBOM alone, since source manifests can miss what's actually compiled or bundled in.
Fig. 1 — A minimal dependency graph. Most real applications have several layers of transitive dependencies beneath each direct one; a 2021 NTIA field study found the majority of known-vulnerable components in typical projects were transitive, not direct.
04Core concepts
Direct vs. transitive dependencies
A direct dependency is one your team deliberately added. A transitive dependency is one pulled in automatically because a direct dependency needs it. Most real-world vulnerability exposure lives in the transitive layer, precisely because it's invisible without tooling.
Component identity
"Name and version" is not a reliable unique identifier — the same name can exist across multiple package ecosystems (npm, PyPI, Maven), and version strings aren't standardized across them. This is why SBOMs rely on identifier schemes like PURL (Package URL) and CPE (Common Platform Enumeration) to unambiguously identify a component.
Composition vs. provenance
An SBOM answers what is in a piece of software. It does not, by itself, answer how it was built or whether the build process can be trusted — that's the job of build provenance and software attestation, which are complementary, not interchangeable, concepts.
SBOM vs. VEX
An SBOM tells you a component is present. It does not tell you whether a known vulnerability in that component is actually exploitable in your specific context — that's what a VEX (Vulnerability Exploitability eXchange) document is for. CERT-In's guidelines explicitly recommend pairing SBOMs with VEX documents for exactly this reason.
05Components of an SBOM
NTIA's 2021 minimum elements define a baseline set of data fields every SBOM should carry per component. CERT-In's October 2024 guidelines build on this baseline and recommend 21 data fields in total, adding fields like criticality and executable/archived status that are relevant to risk triage rather than just inventory record-keeping.
| Field | Description | Source |
|---|---|---|
| Supplier name | The entity that creates, defines and identifies the component | NTIA baseline |
| Component name | The designation assigned to a unit of software as named by the supplier | NTIA baseline |
| Component version | The version string used by the supplier to specify a change from a previous version | NTIA baseline |
| Other unique identifiers | PURL, CPE, or a SWID tag — used to cross-reference against vulnerability databases | NTIA baseline |
| Dependency relationship | Whether the component is included directly or via a transitive dependency | NTIA baseline |
| Author of SBOM data | The entity that created the SBOM document itself | NTIA baseline |
| Timestamp | When the SBOM was generated | NTIA baseline |
| License | Declared or concluded license, typically as an SPDX license identifier | Common practice |
| Cryptographic hash | A checksum of the component, used to verify integrity | Common practice |
| Criticality, executable & archived properties | Risk-relevant metadata used to triage which components need attention first | CERT-In guidelines (2024) |
See the full minimum viable SBOM field reference in the Documentation section for a field-by-field breakdown mapped to SPDX and CycloneDX schema properties.
06Standards & formats
Three formats dominate the SBOM landscape today, each with a different origin story that still shapes what it's best suited for.
SPDX
SPDX (Software Package Data Exchange) began in 2010 as a Linux Foundation project focused on standardizing open-source license compliance data. SPDX 2.2.1 was formalized as ISO/IEC 5962:2021, giving it the broadest formal international standing of any SBOM-adjacent format. Its scope has since expanded well beyond software to cover hardware, AI/ML datasets and more, under SPDX 3.0.
CycloneDX
CycloneDX was created in 2017 by OWASP with a security-first design point — vulnerability correlation, dependency analysis, and component integrity — rather than license compliance. It reached its own formal standardization track when v1.6 was ratified as ECMA-424, 1st Edition in June 2024 (v1.7 followed as the 2nd Edition in December 2025). CycloneDX natively supports VEX and VDR documents and has extended into HBOM, SaaSBOM, ML-BOM and CBOM profiles under one specification family.
SWID
SWID (Software Identification) tags, standardized as ISO/IEC 19770-2, predate the modern SBOM movement and focus narrowly on uniquely identifying installed software for asset-management purposes. SWID identifiers are still referenced by NIST's National Vulnerability Database, but SWID is rarely used as a primary SBOM generation format today.
| SPDX | CycloneDX | SWID | |
|---|---|---|---|
| Origin | Linux Foundation, 2010 | OWASP, 2017 | ISO/IEC, pre-2010 |
| Primary focus | License compliance, broad BOM scope | Security & vulnerability correlation | Software asset identification |
| Formal standard | ISO/IEC 5962:2021 | ECMA-424 | ISO/IEC 19770-2 |
| Native VEX support | Via linked documents | Yes, built into the spec family | No |
| Formats | Tag-value, JSON, RDF, spreadsheet | JSON, XML, Protocol Buffers | XML |
| CERT-In accepted? | Yes | Yes | Not specified as primary |
07Examples
A minimal, valid SBOM entry looks similar across formats — here's the same single component, expressed in both CycloneDX and SPDX JSON.
{
"bomFormat": "CycloneDX",
"specVersion": "1.6",
"version": 1,
"metadata": {
"timestamp": "2026-08-16T09:00:00Z",
"tools": [{ "name": "example-generator", "version": "2.3.0" }]
},
"components": [
{
"type": "library",
"name": "requests",
"version": "2.32.3",
"purl": "pkg:pypi/requests@2.32.3",
"licenses": [{ "license": { "id": "Apache-2.0" } }],
"hashes": [{ "alg": "SHA-256", "content": "70761cfe03c773ceb22aa2f671b4757c58d69f4c" }]
}
]
}
{
"spdxVersion": "SPDX-2.3",
"SPDXID": "SPDXRef-DOCUMENT",
"creationInfo": { "created": "2026-08-16T09:00:00Z", "creators": ["Tool: example-generator-2.3.0"] },
"packages": [
{
"name": "requests",
"SPDXID": "SPDXRef-Package-requests",
"versionInfo": "2.32.3",
"downloadLocation": "https://pypi.org/project/requests/2.32.3/",
"licenseConcluded": "Apache-2.0",
"externalRefs": [
{ "referenceCategory": "PACKAGE-MANAGER", "referenceType": "purl", "referenceLocator": "pkg:pypi/requests@2.32.3" }
]
}
]
}
Both examples encode the same underlying facts — component identity, version, license, and a PURL for cross-referencing against vulnerability databases — just structured differently. See the full SBOM JSON examples reference for complete, non-abridged documents.
08Diagrams
Two diagrams accompany this guide: the dependency graph in the Architecture section above, and the SBOM lifecycle diagram below, showing where each of the six SBOM types sits relative to the software development lifecycle.
Fig. 2 — The six SBOM types, ordered by when in the lifecycle they're generated. Build and Deployed SBOMs are generally the most accurate, since they reflect what's actually assembled or running rather than what a manifest declares.
Suggested illustration for future production: an annotated version of Fig. 1 showing a real vulnerability (e.g. a CVE in a transitive dependency) highlighted in red, to visually demonstrate why transitive visibility matters — planned for the transitive dependency risk article.
09Implementation guide
A practical, sequenced path from zero to a working SBOM program:
- Scope it. Don't try to cover every internal system on day one. If you're in scope for CERT-In's guidelines, start with software supplied to government, public sector or essential-services customers, per the CERT-In SBOM requirements.
- Choose a format. SPDX or CycloneDX — both are accepted by CERT-In and both have mature tooling. See choosing the right SBOM standard if your organization hasn't picked one yet.
- Choose a generation method. Source-composition tools (e.g. reading manifests), build-integrated plugins, or container-image scanning each produce different SBOM types. Our SBOM generation tutorials cover Syft, cdxgen and CycloneDX CLI across common ecosystems.
- Automate it in CI/CD. Manual, one-off SBOM generation goes stale immediately. See CI/CD integration tutorials for GitHub Actions, GitLab CI and Jenkins.
- Validate the output. Generators disagree on edge cases; validate against the schema before distributing. See validation and conversion tutorials.
- Store and distribute it. Attach the SBOM to each release artifact and retain it alongside your release history — not in a separate system nobody checks.
- Feed it into vulnerability monitoring. An SBOM sitting in a folder provides no ongoing value. Connect it to a scanner or SBOM management platform — see scanning tutorials and the vendor-neutral SBOM tools comparison.
- Set an update cadence. CERT-In's guidelines recommend a separate SBOM per software version, updated when component information changes or when errors in the SBOM are corrected — not on an arbitrary fixed schedule.
- Prepare for submission, if applicable. If your organization is in CERT-In's scope, see how to prepare an SBOM for CERT-In submission.
10Advantages
What SBOMs give you
- Faster vulnerability response. During Log4Shell, organizations with SBOMs could query "do we use log4j-core 2.x anywhere?" in minutes; everyone else spent days doing it by hand.
- License compliance visibility, reducing legal exposure from unreviewed copyleft dependencies.
- Procurement and customer transparency — the ability to answer "what's inside this product?" credibly.
- Regulatory readiness for CERT-In, US Executive Order 14028, and the EU Cyber Resilience Act.
- Better M&A due diligence — acquirers increasingly request SBOMs to assess inherited risk.
- Healthier dependency hygiene as a cultural side effect of visibility.
Where SBOMs fall short
- Tooling inconsistency. Different generators can produce different output for the same codebase, especially around transitive dependencies.
- No built-in exploitability context. An SBOM tells you a component is present, not whether a known CVE in it is actually reachable — that requires VEX.
- Doesn't cover configuration or runtime risk — an SBOM is about composition, not misconfiguration.
- Goes stale fast if generation isn't automated into the release process.
- Format fragmentation between SPDX and CycloneDX creates friction when consumers require a specific one.
- Risk of compliance theater — generating an SBOM once to check a box, without operationalizing it, provides little real security value.
11Best practices
- Generate SBOMs automatically in CI/CD, not as a manual pre-release task.
- Prefer Build or Deployed SBOMs over Source-only SBOMs where possible — they reflect what's actually shipped.
- Include transitive dependencies, not just direct ones declared in a manifest.
- Pair every SBOM with a VEX document once you have a vulnerability scanning process in place.
- Validate SBOM output against the format's schema before distribution.
- Version-control SBOMs alongside release artifacts, not in a separate, easily-forgotten system.
- Sign SBOMs where integrity matters — see how to sign an SBOM with Sigstore.
- Standardize on one primary format organization-wide, converting for specific downstream consumers as needed.
- Assign clear ownership — SBOM programs that live solely with security teams, without engineering buy-in, tend to stall.
12Common mistakes
- Generating once and never updating it — an SBOM from six releases ago is actively misleading.
- Relying only on manifest files (e.g.
package.json,pom.xml), which can miss what's actually compiled or bundled into the shipped artifact. - Ignoring transitive dependencies — the majority of real exposure typically sits here, not in direct dependencies.
- Treating SBOM generation as a compliance checkbox rather than an operational security input.
- Skipping validation, and distributing malformed SBOMs that downstream tooling can't reliably parse.
- Assuming an SBOM alone answers "are we vulnerable?" — it answers "what's present," not exploitability; that needs VEX and active scanning.
- Picking a format without checking what your consumers require — CERT-In accepts SPDX or CycloneDX, but a proprietary internal-only format satisfies neither.
13SBOM vs. traditional software inventory
Organizations have tracked software assets for decades through IT asset management (ITAM) systems. An SBOM is a fundamentally different artifact, not just a more detailed spreadsheet.
| Traditional software inventory | SBOM | |
|---|---|---|
| Granularity | Application / license-key level | Individual component level, including transitive dependencies |
| Format | Spreadsheets, ITAM databases — rarely standardized | Standardized, machine-readable (SPDX, CycloneDX) |
| Automation | Manual updates, periodic audits | Generated automatically at build time |
| Vulnerability correlation | Not directly supported | Native, via PURL/CPE cross-referencing |
| Typical owner | IT asset management / procurement | Engineering / security, generated in CI/CD |
Read the dedicated SBOM vs. traditional software inventory article for a deeper comparison, including how the two typically coexist during a transition period.
14Frequently asked questions
What is a Software Bill of Materials in simple terms?
It's a structured list of every component inside a piece of software — similar to an ingredients label — that a computer, not just a person, can read and act on.
Is an SBOM mandatory in India?
CERT-In's October 2024 guidelines state that software supplied to government, public sector and essential-services organizations should be accompanied by a complete SBOM, and the guidelines don't specify enforcement penalties. Applicability depends on your sector and role — see the Compliance Center and always verify against CERT-In's current official publications.
What's the difference between SPDX and CycloneDX?
SPDX originated in license compliance and has the broadest formal ISO standing (ISO/IEC 5962:2021); CycloneDX originated in application security and has native VEX/vulnerability-correlation support, standardized as ECMA-424. CERT-In accepts either. See the full standards comparison.
Do I need commercial software to generate an SBOM?
No — mature open-source tools including Syft, Trivy, cdxgen and CycloneDX CLI can generate SBOMs at no cost for most common ecosystems. See the vendor-neutral SBOM tools comparison.
How often should an SBOM be updated?
CERT-In's guidelines recommend a separate SBOM per software version, updated whenever component information changes or errors are corrected — in practice, this means regenerating automatically on every release rather than on a fixed calendar schedule.
What's the difference between SBOM and VEX?
An SBOM tells you what components are present. A VEX document tells you whether a known vulnerability in one of those components is actually exploitable in your specific context. They're designed to be used together.
Can an SBOM alone tell me if I'm vulnerable?
No. An SBOM tells you composition, not risk status. You need to correlate it against a vulnerability database (via a scanner or SBOM management platform) and, ideally, a VEX document to know actual exploitability.
15References
- CCERT-In — Technical Guidelines on Software Bill of Materials (SBOM)cert-in.org.in · refcode CISG-2024-02 (October 2024)↗
- NNTIA — The Minimum Elements For a Software Bill of Materials (SBOM)ntia.gov (July 2021)↗
- EExecutive Order 14028 — Improving the Nation's Cybersecurityfederalregister.gov (May 2021)↗
- NNTIA — Request for Comment on 2025 Minimum Elements for a Software Bill of Materialsfederalregister.gov (August 2025)↗
- OOWASP CycloneDX specificationcyclonedx.org↗
- SSPDX specificationspdx.dev↗
- EEcma International — CycloneDX (ECMA-424)ecma-international.org↗
Downloads
CycloneDX SBOM Template
A starting-point CycloneDX JSON file.
SPDX SBOM Template
A starting-point SPDX document.
CERT-In Compliance Checklist
Printable checklist for CERT-In readiness.
Ready to put this into practice?
Follow our step-by-step tutorials to generate your first SBOM with open-source tools, or compare tools to find the right fit for your stack.