SBOM Tools: Syft 1.55 vs Trivy 0.76 vs cdxgen 13.5 [2026]

A software bill of materials is only as trustworthy as the tool that writes it. Three open-source generators dominate the conversation, and all three shipped fresh releases in October 2026. Syft reached 1.55.0 on October 20 and Trivy reached 0.76.0 on October 14, according to a revisit.tech review of vulnerability scanners. cdxgen followed with 13.5.0 on October 23, based on its GitHub release page.

The tool question hides a format question. Syft, Trivy and cdxgen can all write CycloneDX, and all three can also reach SPDX, so the choice between SPDX vs CycloneDX decides what your downstream consumers can read. The same inventory feeds software composition analysis tools such as Snyk, Mend, Socket and Dependabot, which makes a clean SBOM the cheapest upstream fix in a supply-chain program.

We built this comparison from project pages and release records dated October 2026. Where only one source backed a claim, the text says reportedly or names the source. We found no independent head-to-head speed test of these three tools, so this article prints no speed numbers. Instead, it hands you a short harness to measure them on your own repositories, which is the only benchmark that predicts your own pipeline.

The sections below cover the formats behind a software bill of materials, a full specs table, the evidence we could verify, cost, the release notes that matter, seven real-world scenarios, use-case picks, a migration guide, pros and cons, and a verdict. If you only have two minutes, read the quick answer first.

Google · Preferred Sources

Don't miss new tech stories on Google

Add Tech Insider once in the Google app and our stories appear in your news suggestions.

Add Now

Quick Answer: Which SBOM Tool Fits Which Team

Pick Syft when you inventory container images and directories and want a generator that stays out of your way. Pick Trivy when one binary should both write the SBOM and match vulnerabilities, because you then run a single tool in CI instead of two. Pick cdxgen when your repositories span many languages, when you want CycloneDX 1.7 output, or when you need cryptographic bills of materials and a Dependency-Track pipeline.

On the format side, choose CycloneDX when security teams consume the software bill of materials and SPDX when a customer, auditor or standards body asks for it by name. SPDX carries the ISO/IEC 5962:2021 designation on its own site, which matters in procurement language. CycloneDX describes itself as a full-stack BOM standard and now covers cryptographic assets, which matters for post-quantum migration planning.

  • Container-first platform teams: Syft, with CycloneDX or SPDX JSON, plus Grype for matching.
  • One-tool CI pipelines: Trivy, writing CycloneDX and scanning in the same run.
  • Polyglot monorepos and Dependency-Track shops: cdxgen 13.x, with the version pinned.
  • Embedded and firmware teams: look at lynkctl from the SPDX tools list, which targets C and C++ projects.
  • Python and AI model provenance: look at Pitloom, announced October 12, 2026 for SPDX 3.

No single tool wins every column. The rest of the article shows where each one gives ground, so you can decide with your own constraints in mind.

SPDX vs CycloneDX: The Format Decision Comes First

Generators are interchangeable in ways formats are not. If you pick the wrong format, every consumer downstream pays for it, from vulnerability platforms to procurement reviewers. So settle the format before you benchmark a single tool.

SPDX in 2026: a standard with a long tail

SPDX describes itself as a freely available international open standard, designated ISO/IEC 5962:2021. The project built its reputation on license and provenance data, and the 3.x line widens the scope. When the project announced the first release candidate of SPDX 3.1 on January 26, 2026, it said the model now reaches beyond software to safety, service, hardware, supply chain and operations. The same announcement called the release candidate a testing and validation release whose features could still change.

Two version lines run in parallel today. Tools such as cdxgen already export SPDX 3.0.1 JSON-LD, while an SPDX 2.3.1 support branch exists in the specification repository. The project also keeps adding tooling, and we cover that wave in its own section below. Reportedly, the SPDX 3.1 second release candidate was still under development on October 20, 2026, with its milestone running past a September 27 target. Treat 3.1 as a spec to watch, not a spec to emit.

CycloneDX in 2026: security-first and moving fast

The OWASP-hosted standard at cyclonedx.org presents CycloneDX as a full-stack bill of materials format for reducing software supply-chain risk. October 2026 coverage centers on version 1.7. Trivy added CycloneDX 1.7 support during its 0.71 cycle, and cdxgen documents spec targets of 1.6, 1.7 and 2.0 through its --spec-version flag. By contrast, cdxgen no longer produces 1.4 or 1.5 documents directly, because those versions predate features that v13 needs. If a consumer insists on 1.5, you generate at 1.6 or later and convert down with cdx-convert.

CycloneDX also gives cryptographic assets a home. A Safeguard guide published October 23, 2026 walks through the cryptographic BOM, or CBOM, field by field. Both Trivy 0.76.0 and cdxgen 13.5.0 added CBOM-related work this month, which signals where tool vendors expect demand.

DimensionSPDXCycloneDX
StewardLinux Foundation projectOWASP project
Standard statusISO/IEC 5962:2021 (per spdx.dev)Described as a full-stack BOM standard
Versions in tool output, Oct 20263.0.1 in use, 2.3.1 support branch1.6 and 1.7, with 2.0 as a cdxgen target
Newest milestone3.1 RC1, announced Jan 26, 20261.7 supported by Trivy and cdxgen
Scope growthSafety, service, hardware, supply chain, operations (3.1 model)Software, cryptographic assets (CBOM)
Strongest audienceCompliance, licensing, procurementSecurity engineering, vulnerability tooling
Conversion between the twoLossy, per Safeguard’s field mapping guideLossy, per Safeguard’s field mapping guide
Newest tools announcedPitloom, SBOMlyze, sbomqs, lynkctl, DevKit Dossiercdxgen 13.5.0, Trivy 0.76.0 CBOM work

The pragmatic rule: write CycloneDX for internal security workflows, and keep an SPDX export path for customers who ask. Both Syft and cdxgen can emit both, so you do not need two generators to do that.

Full Specs Comparison: Syft vs Trivy vs cdxgen

The table below uses only details we could confirm from project pages and dated reviews. Where the sources did not confirm a field, the cell says so. A blank honest cell beats a confident wrong one, especially in a table people screenshot.

SpecSyftTrivycdxgen
Primary roleSBOM generatorScanner that also writes SBOMsCycloneDX BOM generator
MaintainerAnchoreAqua SecurityOWASP cdxgen project
Latest version verified1.55.0 (Oct 20, 2026)0.76.0 (Oct 14, 2026)13.5.0 (Oct 23, 2026)
Formats writtenSPDX and CycloneDXCycloneDX and SPDXCycloneDX, plus SPDX 3.0.1 JSON-LD
CycloneDX versionsNot confirmed in sources1.7 support added (0.71 cycle)1.6, 1.7 or 2.0 via –spec-version
LicenceNot confirmed in sourcesNot confirmed in sourcesApache-2.0
List priceNo official price list confirmedNo dated official price foundNo paid plans found
Cryptographic BOMNot confirmed in sourcesExperimental CBOM security levels (0.76.0)Certificate identification in CBOMs (13.5.0)
OS package coverageNot itemized in sourcesEcho-patched Java and Node.js packages (0.76.0)Expanded via osquery 5.24.0 (13.5.0)
Local container storesPodman and Buildah container-storage work (Oct 5 pull request)Not itemized in sourcesNot itemized in sources
Adoption signalSyft and Grype passed 50 million combined downloadsNot confirmed in sourcesNot confirmed in sources
Security issue on recordIssue filed Oct 21 on Go 1.26.8 in v1.55.0 binariesNone confirmed in the sources checkedSee the release notes section below
Best fitContainer and directory inventoriesOne-tool CI scanningPolyglot repos, CBOM, Dependency-Track

Read the table for gaps as well as strengths. Syft’s blank cells reflect thin source coverage, not missing features, and the same goes for Trivy. cdxgen stands out for how openly it documents spec targets and bundled components, which makes it the easiest of the three to audit from the outside. That openness cuts both ways, as the security notes below show.

One more caution on version numbers. Tools in this class ship patch releases every week or two, so a table like this ages fast. Check the release page of each project on the day you pin a version, and record the exact version string in your pipeline logs.

What the Evidence Says: Benchmarks and Sources

A fair question for any comparison is which tool finds the most components. The honest answer today is that the sources we checked publish no neutral, repeatable head-to-head count for Syft, Trivy and cdxgen on the same targets. What exists instead is a set of dated data points about currency, adoption, spec coverage and conversion risk. The table lists each one with its limits.

SourceDateData pointLimit
Anchore announcementOct 22, 2026Syft and Grype passed 50 million combined downloadsDownloads measure reach, not accuracy
revisit.tech scanner reviewOct 20, 2026Syft 1.55.0 and Trivy 0.76.0 named as currentThird-party review, versions only
cdxgen documentationOct 2026Spec targets 1.6, 1.7 and 2.0, no direct 1.4 or 1.5 outputWritten by the tool’s maintainers
SPDX project postsOct 5 and Oct 12, 2026Five named tools added to the ecosystem list across two postsA tools list does not rank quality
Safeguard guidesOct 23, 2026Field-by-field SPDX 3.0.1 to CycloneDX 1.7 mapping, with conversion loss documentedVendor blog, no loss percentage quoted here

Five publishers, five different kinds of evidence, and none of them is a speed test. That gap matters because SBOM generators disagree in practice. Lockfile-based resolution, installed-package inspection and image-layer cataloging produce different component lists for the same project. A Dev.to post published in October 2026 made the point in its title, arguing that an SBOM is a tool output and not a fact about your software. We agree with the framing.

So measure on your own code. The script below runs all three tools against one target, times each run, counts components and lists package URLs that appear in one output but not another. Run it on three repositories that look like your real workload: a container image build, a language-heavy monorepo and a legacy service with vendored dependencies.

#!/usr/bin/env bash
set -euo pipefail
TARGET="${1:-.}"
mkdir -p out

/usr/bin/time -f "syft   %e s" syft "dir:$TARGET" -q -o cyclonedx-json=out/syft.cdx.json
/usr/bin/time -f "trivy  %e s" trivy fs --quiet --format cyclonedx --output out/trivy.cdx.json "$TARGET"
/usr/bin/time -f "cdxgen %e s" cdxgen -r -o out/cdxgen.cdx.json --spec-version 1.7 "$TARGET"

for t in syft trivy cdxgen; do
  echo "$t components: $(jq '.components | length' out/$t.cdx.json)"
  jq -r '.components[].purl // empty' out/$t.cdx.json | sort -u | tee out/$t.purls | wc -l
done

echo "In syft but not cdxgen:"
comm -23 out/syft.purls out/cdxgen.purls | head -40
echo "In cdxgen but not syft:"
comm -13 out/syft.purls out/cdxgen.purls | head -40

Interpret the diff, not just the totals. A tool that reports more components may be double-counting, or it may be the only one that saw your vendored libraries. Open ten disagreements by hand per repository and decide which tool was right. After three repositories, you will know more than any published benchmark can tell you.

Pricing and Total Cost of Ownership

All three generators are open source, and none of the sources we checked lists a price for the core tool. That does not make them free to run. The real bill for a software bill of materials program sits in pipeline minutes, artifact storage, engineer time spent triaging noise, and any commercial platform you bolt on for policy, reporting or support.

ItemConfirmed list priceLicence confirmedWhere the real cost sits
SyftNo official price list confirmedNot confirmed in sourcesCI runtime on large images, SBOM storage
TrivyNo dated official pricing foundNot confirmed in sourcesVulnerability database updates, triage time
cdxgenNo paid plans foundApache-2.0Version pinning, sandboxing of scanned code
SBOMlyze (SPDX tools list)Open-source CLI and GitHub ActionApache-2.0Review time on SBOM diffs
SPDX and CycloneDX specificationsFreely available standardsOpen standardsMapping work between the two

Budget three line items. First, compute: scanning every image on every commit multiplies minutes quickly, so generate on build and cache on digest. Second, storage and retention: an SBOM per build per environment adds up, and you need to keep them as long as you support the release. Third, people: somebody must own the policy that says what happens when an SBOM shows a banned package or a missing license field. Expect that workload to grow, because AI coding tools add dependencies faster than reviewers read lockfiles.

Commercial platforms from the same vendors add policy engines, dashboards and support contracts. Their prices were not confirmed in the sources we used, so we do not quote any. If you evaluate one, ask for per-asset pricing in writing and test whether the paid layer reads standard CycloneDX or SPDX files from the open-source tool. Portability of your SBOM archive is the cheapest insurance against vendor lock-in.

Release Notes That Matter for Syft, Trivy and cdxgen

Syft. Anchore’s Syft architecture documentation still describes it as the Syft SBOM tool, and the project shows no rename, retirement or acquisition. Version 1.55.0 is the newest release we verified. On October 5, a pull request added Linux container-storage support for local images built with daemonless Podman or Buildah, which helps teams that have dropped the Docker daemon. On October 22, Anchore said it joined OpenChain as a vendor partner and that Syft and Grype passed 50 million combined downloads. The less comfortable item landed October 21, when an issue reported that the v1.55.0 release binaries were built with Go 1.26.8 and carried standard-library vulnerabilities. The issue asked for release builds on Go 1.26.10 or later.

Trivy. Version 0.76.0 landed October 14. It added vulnerability detection for Echo-patched Java and Node.js packages, wider RapidFort base-image coverage and experimental CBOM output with nominal cryptographic security levels. Reportedly, a 0.76.1 patch followed on October 21 with dependency updates and mitigations tied to the eMudhra intermediate-CA key compromise, though we could not confirm that date from a second source. A pull request updated October 25 also teaches Trivy’s SPDX serializer to handle the SHA-512 hash algorithm, which is a small change that matters to anyone who validates hashes strictly.

cdxgen. The cdxgen documentation calls it an OWASP tool for CycloneDX BOM generation, and the repository is public, JavaScript-based and Apache-2.0 licensed. The latest release is version 13.5.0, which adds PHP runtime detection, revised certificate identity handling in CBOMs, improved Go service and module evidence, wider operating-system package coverage through osquery 5.24.0 and extra safeguards against executing scanned-project code. Its PHP images were rebuilt on PHP 8.3.36, 8.4.27 and 8.5.12. Per a GitHub advisory, a server-mode flaw in versions before 13.5.0 let unauthenticated clients bypass the Git-host allowlist and override request options, and the advisory points to 12.8.7 as a patched 12.x release. A second advisory reportedly covers a bundled Node.js runtime flaw, tracked as CVE-2026-111497, in standalone binaries.

The common thread is that SBOM tools are themselves software with supply chains. Syft’s Go toolchain, cdxgen’s bundled Node.js and Trivy’s certificate trust store all showed up in October issue trackers. Pin versions, verify checksums and subscribe to each project’s security advisories. A scanner that nobody patches turns into a liability that wears a compliance badge.

The SPDX Tooling Wave Around the Big Three

While Syft, Trivy and cdxgen fight for the default slot, the SPDX project has been quietly expanding the edges of the ecosystem. On October 5, 2026, it announced four additions in a post titled around four new tools in five weeks, then added a fifth on October 12. They cover gaps the big three leave open.

  • SBOMlyze: an Apache-2.0 command-line tool and GitHub Action that reviews changes between SPDX, CycloneDX and Syft SBOMs. It turns two files into a readable diff, which is exactly what a pull request reviewer needs.
  • sbomqs: a quality and compliance checker for SBOMs. Run it after generation to score what your tool produced.
  • lynkctl: a command-line generator for C and C++ and embedded firmware projects that writes SPDX 3.0.1 and CycloneDX without executing the build.
  • DevKit Dossier: a hosted record keeper for manufacturers that sell software, firmware, mobile apps or SDKs in the EU.
  • Pitloom: announced October 12, it generates SPDX 3-compliant SBOMs for Python applications and AI models.

Two patterns stand out. First, quality tooling has arrived. A generator without a checker invites confident but wrong files, so sbomqs and SBOMlyze belong in any serious pipeline. Second, SPDX 3 tooling targets niches the general scanners ignore, such as firmware and machine-learning models. If your product ships either one, the general-purpose trio will not cover you on its own.

SDKs deserve special attention here, since DevKit Dossier names them explicitly. Any SDK you embed counts as a component your SBOM should list, including the fraud-detection kits from Kount, Sift and Forter that many online businesses ship inside their apps. These tools are young, and the sources describe them mostly through the announcements that introduced them. Trial each one on a throwaway branch first. A tool announced two weeks ago has not yet met your weirdest build system, and your weirdest build system is where SBOM accuracy usually breaks.

Seven Real-World Scenarios from October 2026

Abstract feature lists do not decide purchases. The scenarios below come from events documented in October 2026 and show where each choice pays off or bites.

1. A scanner shipped with an old Go toolchain. The October 21 issue on Syft v1.55.0 binaries shows how a security tool can inherit the vulnerabilities of its own build chain. Teams that run the binary in locked-down CI should check which Go version their pinned release used and decide whether to build from source with a newer toolchain. The lesson applies to every generator, not only Syft.

2. Server mode exposed to the wrong network. cdxgen offers an HTTP server mode that accepts a path or a Git URL and returns an SBOM. According to the advisory published around October 20, unauthenticated clients could abuse it to run build scripts on versions before 13.5.0. If you ran server mode inside a shared cluster, upgrade, put it behind authentication and restrict which hosts it may clone from.

3. A version that was not the newest one. A project discussion between late September and mid October reported that cdxgen 13.1.0 and later sat on GitHub while npm still showed 12.8.4. Pipelines that install from a package registry and pipelines that pull a release binary can therefore disagree about what current means. Pin an exact version and verify it, then record it next to every SBOM you archive.

4. A platform team without a Docker daemon. The October 5 Syft pull request that adds container-storage support targets developers using Podman or Buildah on Linux. If your build agents run rootless and daemonless, check that your generator reads local storage directly instead of requiring a push to a registry first.

5. A firmware vendor selling into the EU. lynkctl and DevKit Dossier, both announced October 5, address products with C and C++ code, embedded firmware and SDKs. Teams in that position often cannot run a general scanner against a vendor toolchain. A generator that reads the project without executing the build, paired with a record keeper for EU obligations, fits better than a container-first tool.

6. A machine-learning team with model artifacts. Pitloom, announced October 12, writes SPDX 3 documents for Python applications and AI models. Because SPDX 3.x models more than software packages, it suits provenance records that touch model files. Pair it with your general SBOM so the application and the model share one audit trail.

7. A defense supplier facing procurement language. Anchore’s site points to DoW Instruction 8430.01 and says it makes software evidence a condition to operate. A supplier who reads that line should ask the buyer which format and which minimum fields they expect before choosing a generator. When the buyer names SPDX, the ISO/IEC 5962:2021 designation helps your case. When the buyer names nothing, CycloneDX output with an SPDX export path covers both bets.

Fitting an SBOM Generator Into Your CI Pipeline

Choosing a generator is the easy half. The harder half is deciding when it runs, where its output goes and who reads it. Teams that treat SBOM creation as a release-day chore end up with files that describe last month’s code. Teams that generate on every build and store the result next to the artifact get an audit trail almost for free.

A workable pattern has five stages. Generate the SBOM at build time, when lockfiles, base images and compiled outputs all exist. Validate it against the schema for the version you emit. Score it with a quality checker such as sbomqs. Diff it against the previous build with SBOMlyze so reviewers see what changed. Finally, publish it as a build artifact and feed a copy to your vulnerability matcher. Each stage costs seconds, and each one catches a different failure.

name: sbom
on: [push]
jobs:
  sbom:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Generate SBOM with a pinned tool version
        run: |
          syft --version
          syft dir:. -q -o cyclonedx-json=sbom.cdx.json
      - name: Count components
        run: jq '.components | length' sbom.cdx.json
      - name: Keep the file with the build
        uses: actions/upload-artifact@v4
        with:
          name: sbom
          path: sbom.cdx.json

Swap the generate step for Trivy or cdxgen without changing the rest of the job. That portability is the reason to standardize on CycloneDX or SPDX files as the contract between stages. If every later step reads a standard file, replacing the generator becomes a one-line change, and your migration risk drops accordingly.

Three habits keep the pipeline honest. Record the tool name and exact version inside your build logs, because an SBOM from Syft 1.55.0 and one from a later release can differ for the same commit. Generate for the artifact you ship, not only the source tree, since base images and runtime layers add components that no lockfile mentions. And keep one SBOM per deployable unit rather than one giant file per repository, so a vulnerability alert maps to a service your team actually owns.

Use-Case Recommendations

The picks below assume you value a defensible choice more than a clever one. Each includes the reason and the main risk.

  1. Kubernetes platform team with hundreds of images. Use Syft to generate and Grype to match, writing CycloneDX JSON for the security team and an SPDX JSON copy for customers. Risk: pin the release because of the toolchain issue above.
  2. Startup with one CI system and no security engineer. Use Trivy so a single binary produces the SBOM and the vulnerability report. Risk: you lean on one project for both jobs, so keep the SBOM files in a neutral location you can re-scan with another tool.
  3. Polyglot monorepo feeding Dependency-Track. Use cdxgen 13.x with --spec-version 1.7. Its output goes straight to Dependency-Track, and its CBOM work future-proofs the pipeline. Risk: never run server mode on an exposed network, and sandbox any scan of untrusted code.
  4. Embedded product with C and C++ firmware. Trial lynkctl for SPDX 3.0.1 and CycloneDX output without executing the build. Risk: the tool is new and the sources describe it only through its announcement.
  5. Machine-learning platform shipping models. Trial Pitloom alongside your general generator, and diff the results with SBOMlyze. Risk: SPDX 3 consumers are fewer than SPDX 2.x consumers, so check your buyer can read the file.
  6. Online business with third-party SDKs. List every embedded SDK with its version, using whichever generator your build already supports. Risk: SDKs delivered as closed binaries may not reveal their own dependencies, so ask the vendor for its SBOM as well.

Teams that sell into regulated markets should add one more step. Ask the customer which fields they expect, then run sbomqs on a sample file to see how it scores. Fixing a missing supplier field before the first audit costs minutes, and fixing it afterward costs a contract renewal conversation.

Migration Guide: Moving Formats and Tools Without Breaking Consumers

Most teams do not start from zero. They inherit a generator, a pile of archived files and a dashboard that expects one format. The steps below move you to a new tool or format while keeping the old pipeline alive until the new one proves itself.

Switching generators in eight steps

  1. List every consumer of your current SBOMs, including dashboards, auditors and customers, and note the format and version each one reads.
  2. Pin the new tool to an exact version and record its checksum in your repository.
  3. Run old and new tools on the same commit using the harness script from the evidence section.
  4. Diff the package URL lists and review ten disagreements by hand per repository.
  5. Validate the new files against the schema for the version you emit.
  6. Feed both outputs to your vulnerability matcher and compare findings, not only components.
  7. Run both pipelines in parallel for at least one release cycle.
  8. Cut over, archive the old files with their tool versions, and keep the old pipeline definition in version control for rollback.
# Match vulnerabilities from an existing SBOM instead of re-scanning the image
grype sbom:out/syft.cdx.json

# Push a CycloneDX file to Dependency-Track
curl -X POST "$DT_URL/api/v1/bom" \
  -H "X-Api-Key: $DT_KEY" \
  -F "autoCreate=true" \
  -F "projectName=my-app" \
  -F "projectVersion=1.0.0" \
  -F "bom=@out/cdxgen.cdx.json"

# Produce a CycloneDX 1.5 file for a consumer that cannot read newer versions
cdxgen -r -o bom.json --spec-version 1.6
cdx-convert -i bom.json -o bom-1.5.json --to 1.5

The last pair of commands follows the cdxgen documentation, which says to generate at 1.6 or later and convert down for older readers. Treat any downgrade as a compatibility shim, not a target.

Moving between SPDX and CycloneDX

Generate natively in the target format whenever you can. Converting a finished file is the riskiest path, because the two models do not map one to one. Safeguard’s October 23 guide to mapping SPDX 3.0.1 fields onto CycloneDX 1.7 documents conversion loss, which tells you the problem is real enough to deserve its own article. If you must convert, keep the original file next to the converted one, and record which direction you went.

Moving from SPDX 2.x to 3.0.1 deserves a pilot first. The 3.x model is structured differently, with a graph of elements instead of a flat package list, so scripts that count packages in 2.x JSON will not work unchanged. Update your jq queries, test with one service and confirm every consumer parses the new file before you switch the whole estate. Leave SPDX 3.1 for later, since it is still at the release candidate stage and its first release candidate was described as a testing and validation release.

Teams that track their program through our cybersecurity coverage will find the same pattern elsewhere: change one variable at a time, keep a rollback, and measure before you trust.

Six Mistakes That Make an SBOM Useless

Most failed SBOM programs do not fail on tool choice. They fail on habits. These six show up again and again, and every one is cheap to avoid.

  1. Trusting one tool’s output as ground truth. Different generators read different evidence, so two correct tools can disagree. Cross-check with the harness before you promise a customer a complete inventory.
  2. Generating only from source. A source-tree scan misses operating-system packages and base-image layers. If you ship containers, scan the image you ship.
  3. Dropping the tool version. An archived file without the generator name and version cannot be reproduced or debugged. Store both in the file metadata or the build log.
  4. Converting formats as an afterthought. Safeguard’s mapping guide documents conversion loss, so a file converted in a hurry before an audit may omit fields the auditor wants. Emit the required format natively.
  5. Running scanners with too much trust. The October advisories on cdxgen server mode and the Syft toolchain issue show that SBOM tools are attack surface. Run them with least privilege, and keep secrets out of the scan environment.
  6. Treating the SBOM as a one-time deliverable. Components change with every dependency bump. A file that nobody refreshes becomes a historical document, and historical documents do not help during an incident.

Fix the first two and you remove most of the false confidence. Fix the third and you make every future investigation faster. The remaining three protect you from audits and from the tools themselves.

Pros and Cons of Each Tool

ToolProsCons
SyftFocused generator, pairs with Grype, active releases through October, wide reach with 50 million combined downloads for Syft and GrypeRelease binaries drew a Go toolchain issue on Oct 21, licence and CycloneDX version coverage not confirmed in our sources
TrivyOne tool for SBOM and scanning, CycloneDX 1.7 support, new CBOM and Echo-patched package detection in 0.76.0SBOM output is a side feature of a scanner, so generator-specific depth may trail a dedicated tool
cdxgenClear spec targets (1.6, 1.7, 2.0), SPDX 3.0.1 export, Apache-2.0, Dependency-Track fit, broad OS and language evidenceFast version churn, direct 1.4 and 1.5 output dropped, broad scope means more surface to audit
SPDX formatISO/IEC 5962:2021, wide scope in 3.x, growing tool listTwo active lines (2.x and 3.x), 3.1 still at release-candidate stage
CycloneDX formatSecurity-first design, CBOM support, fast tool adoption of 1.7Conversion to SPDX loses information, older consumers may stop at 1.5

The pattern is consistent. Tools with the fastest release cadence bring the newest features and the most advisories to read. Tools with the broadest adoption bring the largest pool of examples and answers when something breaks. Weigh which risk your team handles better.

Verdict: A Default Stack and Three Exceptions

For most teams in late October 2026, the best default for a software bill of materials program is a single generator writing CycloneDX 1.7 with an SPDX export path, a quality checker such as sbomqs after generation, and a pinned tool version recorded with every file. Which generator you choose depends on what you build. Container-heavy shops should start with Syft because of its focus and its reach, with 50 million combined Syft and Grype downloads reported by Anchore. Teams that already run Trivy for vulnerabilities should let it write the SBOM too, since one fewer binary means one fewer thing to patch.

Pick cdxgen when your repositories mix many languages, when you feed Dependency-Track, or when cryptographic inventory is on your roadmap. Its 13.5.0 release is the most ambitious of the three, and its documentation is the most explicit about what it emits. Pay for that ambition with discipline: pin versions, skip server mode on shared networks and sandbox untrusted scans.

Three exceptions break the default. Firmware teams should trial lynkctl before forcing a container-first tool onto C and C++ builds. Model-shipping teams should trial Pitloom for SPDX 3 provenance. EU manufacturers should look at DevKit Dossier for record keeping. In every case, run the harness on your own repositories before you commit. The data we could verify says all three major generators are active, maintained and capable. It does not say which one counts your components best, and nobody can say that for you.

Frequently Asked Questions

What is a software bill of materials?

It is a machine-readable inventory of the components inside a piece of software, including libraries, packages and their versions. Security teams use it to find affected products when a vulnerability appears, and buyers use it to check what they are installing.

Should I choose SPDX or CycloneDX?

Choose CycloneDX for security workflows and SPDX when a customer or standard asks for it. SPDX carries the ISO/IEC 5962:2021 designation, while CycloneDX presents itself as a full-stack BOM standard with cryptographic asset support. Syft and cdxgen can write both, so you can serve both audiences.

Which tool is the most accurate, Syft, Trivy or cdxgen?

We found no neutral, repeatable accuracy test comparing the three on identical targets. Run the harness in the evidence section on your own repositories, then review disagreements by hand.

Are these SBOM tools free?

The sources show no list price for Syft, Trivy or cdxgen, and cdxgen lists no paid plans. cdxgen uses the Apache-2.0 licence. Your costs come from CI time, storage and staff time, plus any commercial platform you add.

Can I convert an SPDX file into CycloneDX?

You can, but conversion loses information. Safeguard published a field-by-field mapping from SPDX 3.0.1 to CycloneDX 1.7 that documents the loss. Generate natively in the format you need whenever possible, and keep the original file.

Which CycloneDX version should I emit?

Version 1.7 is the safest forward choice, since Trivy supports it and cdxgen lists it among its targets. If a consumer cannot read 1.7, generate at 1.6 or later and convert down, as the cdxgen documentation advises.

Does cdxgen run the code it scans?

Some package managers run build tooling during dependency resolution. The 13.5.0 release notes list additional safeguards against executing scanned-project code. Even so, scan untrusted repositories inside a sandbox with no secrets and limited network access.

Is SPDX 3.1 final?

Not as of the sources we checked. The project announced the first release candidate on January 26, 2026 and described it as a testing and validation release. For production files today, SPDX 3.0.1 and the 2.x line are the safer targets.

Elias Virtanen

Elias Virtanen

Cybersecurity Analyst

Elias Virtanen is the Cybersecurity Analyst at Tech Insider, bringing hands-on expertise from his background in penetration testing and security consulting. He previously worked as a security researcher at F-Secure in Helsinki, where he focused on threat intelligence and vulnerability disclosure. Elias covers ransomware trends, zero-trust architecture, and the evolving regulatory landscape including NIS2 and the EU Cyber Resilience Act. He holds a CISSP certification and an MSc in Information Security from Aalto University.

View all articles