104% more reported CVEs per day in 2026 than last year.

Comparison

CRACI and Chainguard

Chainguard hardens what goes into your build: container images, language libraries and GitHub Actions. CRACI secures and records the build itself. One cleans the inputs, the other records what happened to them.

Updated

The short answer

Chainguard builds open-source software from source and ships it hardened: minimal container images with few or no known vulnerabilities, rebuilt language libraries, VM images and hardened GitHub Actions, each with a signed SBOM and provenance. If your problem is that the base images and packages you start from carry too many CVEs, Chainguard goes straight at it.

CRACI is a CI runner for GitHub Actions. Your jobs run on it, and while they run it records every external dependency they fetch, and enforces an egress policy. Chainguard secures the inputs. CRACI secures and records the build. There is very little overlap, and the two fit together naturally.

At a glance

Capability CRACI Chainguard
Runs your builds Jobs run on CRACI runners Supplies the images and libraries builds use
Records what your build fetched Observed fetches, including packages from CI caches Its SBOMs describe Chainguard's own artifacts
Build network egress policy Default deny or allow, fails closed Outside its scope: it does not run builds
SBOMs For your artifacts, per build, completeness stated Signed SPDX SBOM with every container image
Signed provenance No signed provenance SLSA provenance on its images and libraries
Vulnerability tracking Monitored SBOMs re-evaluated Advisories and rebuilds for Chainguard artifacts
Hardened, minimal container images Zero-CVE, built-from-source image catalog
Libraries rebuilt from source Java, Python and JavaScript
CVE remediation SLA 7 days critical, 14 days other severities
Hardened GitHub Actions Chainguard Actions, built from source
Pricing $0.002 per vCPU-minute ($0.004 for 2 vCPU), metered per second; no monthly fee and no per-SBOM charge Up to five container images free; catalog from $19K for a team of 10, per-image pricing by quote (as of September 2026).
  • Included
  • Not included

What Chainguard does well

The Chainguard homepage
chainguard.dev

Chainguard Containers is, in Chainguard's words, a zero-CVE, built-from-source container image catalog. Every image comes with a signed SBOM attestation in SPDX format and a SLSA 1.0 provenance attestation that describes the build environment, all verifiable with cosign. Customers can also get CycloneDX SBOMs on newer builds.

The CVE policy is concrete. For customers with an order, Chainguard commits to remediating critical CVEs within 7 calendar days and high, medium and low CVEs within 14 calendar days of a qualifying patch becoming publicly available, for the supported version streams of its images.

Chainguard Libraries takes the same approach to language packages. It is a catalog of Java, Python and JavaScript dependencies rebuilt from verified source instead of downloaded as prebuilt artifacts, delivered as an upstream to JFrog Artifactory, Sonatype Nexus Repository or Cloudsmith. Each package carries Sigstore signatures, a signed SBOM and SLSA Level 3 provenance. Chainguard Actions offers hardened versions of popular GitHub Actions, built from source and continuously scanned, and Chainguard VMs apply the model to virtual machine images.

CRACI does not produce hardened images or libraries and makes no promise about the CVE count of anything you pull. That is Chainguard's job.

Where CRACI is different

It watches your build, not Chainguard's

Chainguard's SBOMs and provenance describe Chainguard's artifacts, built in Chainguard's factory. Your build still runs somewhere, and it pulls in more than a base image: your own dependencies, toolchains, tools fetched by install scripts and whatever a workflow step downloads. CRACI records that. A package-aware proxy on the runner observes traffic to package sources across npm, PyPI, RubyGems, Cargo, Go, Nix, OCI, apt, apk and Git sources. Evidence travels with CI caches, and each SBOM states its completeness per job and per cache: Complete, Complete with connections, Incomplete, Unavailable or Not recorded.

It limits what the build can reach

Hardened inputs help only if the build actually uses them. CRACI's egress policy is default deny or default allow, with 24 built-in software-source presets and typed custom sources for registries, including OCI registries and Git. Policies are validated before the job starts and fail closed. A policy that allows your Chainguard registry and your artifact repository, and little else, turns "we use Chainguard" from a convention into something the runner enforces.

It keeps watching what you shipped

The API returns SBOMs, network traces and provenance. CRACI keeps re-evaluating monitored SBOMs for new vulnerabilities. SBOMs export as CycloneDX or SPDX, including vulnerabilities.

An inventory of what is deployed where

CRACI's inventory view shows exactly which software versions are deployed to which products, globally. When a new vulnerability lands, you can see which products run the affected version instead of piecing it together from release notes and spreadsheets.

Using them together

A typical setup:

  • Chainguard supplies base images and, through your artifact repository, rebuilt libraries.
  • CRACI runs the GitHub Actions jobs that build on them, with an egress policy that allows your approved sources, and records what each job fetched.

OCI is among the ecosystems CRACI detects, and CRACI works with JFrog Artifactory mirrors for npm and PyPI, so images and Python or JavaScript packages that arrive that way are part of the build record. Maven support, which covers Chainguard Libraries for Java, is on the roadmap.

Which one fits

  • Scanners keep flagging CVEs in your base images: Chainguard replaces those images with hardened ones.
  • You need evidence of what went into each release: CRACI records it from the build.
  • You want builds that can only reach approved sources: CRACI's egress policy enforces it at the runner.
  • You want both clean inputs and a recorded build: use them together, as above.

For the Cyber Resilience Act

Starting from components with few known vulnerabilities, a documented remediation SLA and signed SBOMs makes a manufacturer's vulnerability handling easier. Chainguard helps there. CRACI automates a significant part of the software supply chain visibility and evidence that companies need for their wider CRA compliance process: what went into each release and ongoing vulnerability tracking. Neither makes a product compliant by itself. See what the CRA is and CRA compliance.

Adding CRACI to a Chainguard setup

Install the CRACI GitHub App, then change runs-on to craci in the workflows you want recorded. Your Dockerfiles and package configuration stay as they are. CRACI supports GitHub Actions today; GitLab CI, Jenkins and other CI systems are on the roadmap. Learn more about build-time SBOM generation and CI/CD integration.

Build on clean inputs, and prove it

Run one GitHub Actions workflow that uses your Chainguard images on a CRACI runner and look at the record it leaves.

Book a demo