Nobody audits a lockfile. You pick a handful of libraries deliberately, and everything underneath them shows up because a resolver said so, gets refreshed by a bot, and is never looked at again. The question supply chain security answers is what is actually down there, and whether it arrived the way you think it did.
I put a number on the first half of that on September 19, 2026. A fresh project with exactly one dependency, express@5.1.0, produced a CycloneDX bill of materials containing 67 components. The same process against a production Next.js 15 app with 112 direct production dependencies returned 762 library components, so the tree is nearly seven times larger than the part anyone chose. The longer version of this writeup, with every version and price, is on DevToolLab.
Reproduce the 67 in Under a Minute
With Trivy 0.74.0 on your path, this is the whole thing:
mkdir sbom-demo && cd sbom-demo
npm init -y > /dev/null
npm install express@5.1.0 --package-lock-only --no-audit --no-fund
trivy fs --scanners vuln --format cyclonedx --output sbom.json package-lock.json
Count what it wrote:
import json
bom = json.load(open("sbom.json"))
print(f"CycloneDX spec : {bom['specVersion']}")
print(f"components : {len(bom['components'])}")
print(f"vulnerabilities: {len(bom.get('vulnerabilities', []))}")
What came back on the day I ran it:
CycloneDX spec : 1.7
components : 67
vulnerabilities: 0
Zero vulnerabilities is the part worth reading carefully. It describes today, not next month, because disclosure almost always lands long after installation. The reason to keep the inventory is so that "are we affected" takes minutes rather than a week of grepping.
Three Jobs, Not One
The phrase "supply chain security" bundles together three problems that need separate tools, and treating them as one is why these projects stall.
Inventory means producing an SBOM listing every component in a build. Provenance means signing artifacts and attesting how they were produced, so a consumer can check the binary really came from the source it names. Detection means finding known vulnerabilities in the inventory, and separately catching packages that are malicious rather than just stale.
A scanner says nothing about whether your pipeline was tampered with. A signature says nothing about whether the thing you signed is full of compromised code.
The Free Stack Covers All Three
For inventory, Syft and Trivy both emit SPDX and CycloneDX and both carry an Apache 2.0 license. Syft, from Anchore, hit v1.52.0 on September 17, 2026 with 9,581 GitHub stars and does only cataloging, which makes it the cleaner pipeline component. Trivy, from Aqua Security, hit v0.74.0 on August 14, 2026 with 37,980 stars and folds scanning, misconfiguration checks and secret detection into the same binary. One tool in CI or one tool per job, that is the whole decision.
For detection, Grype reached v0.119.0 on September 17, 2026 and reads a Syft SBOM directly. Google's OSV-Scanner reached v2.6.0 on September 14, 2026 and pulls from the OSV database, where records are keyed to exact affected version ranges per ecosystem instead of vendor CPE strings. That difference shows up as noticeably fewer false positives. Both are Apache 2.0, and running both is not unreasonable.
For provenance, Sigstore's Cosign reached v3.1.3 on August 6, 2026. Its useful trick is keyless signing: short-lived certificates bound to an OIDC identity such as a GitHub Actions workflow, with the signature written to a public transparency log, so there is no long-lived private key for anyone to lose.
One thing to check if you are reading older comparisons: SLSA v1.2 is the current approved specification as of September 2026, and v1.1 is marked Retired. It adds a Source Track alongside the Build Track, which most published roundups predate.
Finally, storage. OWASP's Dependency-Track reached 5.1.0 on August 27, 2026 and ingests a CycloneDX SBOM from every build, then re-evaluates what it already holds as new advisories land. A CI scan answers "is this build clean right now". Dependency-Track answers "which of the forty services we shipped last quarter ship this package", which is the question an incident actually starts with, and one a folder of SBOM files cannot answer.
What the Paid Tools Are Selling
Reachability analysis, malicious-package detection, hardened base images and a support contract. The original article breaks the pricing down properly, but the shape is this.
Snyk publishes per-seat pricing: Free at $0 per month, Team from $25 per month, and Ignite from $1,260 per year, all per contributing developer, with Enterprise quoted. Chainguard sells the opposite approach, shipping hardened images so you have fewer CVEs to triage rather than better triage. Up to five images are free, and its Catalog tier with 2,000-plus images starts at $19,000 for a team of 10, built in SLSA L3 infrastructure under a contractual CVE remediation SLA. Both checked on their own pricing pages on September 19, 2026.
Socket is the third approach, judging a package by what its code actually does rather than matching it to a CVE list, which is the only one of the three that flags a malicious release on day zero. I could not verify its current pricing: socket.dev returned HTTP 403 to every non-browser client I tried, so I have left the number out rather than guess at it.
Side by Side
| Tool | Job | License | Version (Sep 19, 2026) | Cost |
|---|---|---|---|---|
| Syft | SBOM generation | Apache 2.0 | v1.52.0 | Free |
| Trivy | SBOM plus scanning | Apache 2.0 | v0.74.0 | Free |
| Grype | Vulnerability scanning | Apache 2.0 | v0.119.0 | Free |
| OSV-Scanner | Vulnerability scanning | Apache 2.0 | v2.6.0 | Free |
| Cosign | Signing and attestation | Apache 2.0 | v3.1.3 | Free |
| Dependency-Track | SBOM management | Apache 2.0 | 5.1.0 | Free, self-hosted |
| Snyk | Scanning plus reachability | Commercial | n/a | $0 to $1,260/yr per developer |
| Chainguard | Hardened base images | Commercial | n/a | 5 images free; Catalog from $19,000 |
| Socket | Malicious package detection | Commercial | n/a | Not publicly verifiable |
Where to Start
Run Trivy in CI. One binary, an SBOM and a vulnerability report, no purchase order. That is the honest answer for most teams, and if a customer is only asking for an SBOM then Syft alone finishes the job.
Add Dependency-Track once you are running more than a handful of services, because per-build scanning stops answering the question you will actually be asked. Add Cosign and publish provenance if other people consume what you ship. Look at behavioral analysis if malicious packages rather than outdated ones are what worry you, since CVE matching structurally cannot catch those. Price Chainguard against the hours your team currently spends patching base images, not against zero.
Two things worth having open while you do any of this: a SHA256 file checksum for confirming a release artifact matches the digest its project published, and npm package info for looking at maintainers and release history before a package becomes one more node in the tree.
Conclusion
Everything load-bearing here is free and actively maintained. Syft, Trivy, Grype, OSV-Scanner, Cosign and Dependency-Track are all Apache 2.0 and all shipped a release within about five weeks of September 19, 2026. Between them you get an inventory, a scan, a signature and a history.
Paid tools buy less noise, day-zero malicious detection, hardened images and someone to call. None of that is the first step. Generate one SBOM, look at how many packages you did not know you were shipping, and decide from that number.
References
- 9 Supply Chain Security Tools in 2026 - the original article, with the full pricing breakdown and methodology
- SLSA specification v1.2 - current approved version, Build and Source tracks
- Syft and Grype - Anchore
- Trivy - Aqua Security
- Cosign - Sigstore
- OSV-Scanner - Google
- Dependency-Track - OWASP



Top comments (0)