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

Comparison

CRACI vs GitLab CI

GitLab scans your project and reports what its lockfiles declare. CRACI is the runner, so it records what each build actually fetched. The difference is where your SBOM and provenance come from.

The short answer

GitLab is a complete DevSecOps platform: source control, merge requests, planning and CI/CD in one product, with a broad set of security scanners and vulnerability management in its Ultimate tier. If you want one vendor for the whole software lifecycle, GitLab is built for that.

CRACI is narrower. It is a GitHub Actions-compatible runner that records every external dependency a build fetches, controls what the build can reach, and turns that record into SBOMs, signed provenance and CRA evidence. The core difference is traditional CI with scanners attached versus CI where the runner itself is the security record.

One practical point comes first. CRACI supports GitHub Actions only today, and GitLab CI is not yet supported. If your pipelines live in GitLab CI, you would need to move them to GitHub Actions to use CRACI runners, or wait for GitLab CI support, which is on the roadmap.

Capability CRACI GitLab
Dependencies recorded from the build Observed fetches, including packages from CI caches Scanners read lockfiles and dependency graph exports
SBOM export CycloneDX or SPDX per build, with completeness state CycloneDX reports; dependency list export in Ultimate
Build network egress policy Default deny or allow, fails closed Your own network controls on self-managed runners
Build provenance Signed, Ed25519 over SHA-512; no SLSA level claimed SLSA 1.0 provenance statement from the runner
Continuous vulnerability monitoring Monitored SBOMs re-evaluated continuously Continuous vulnerability scanning in Ultimate
Compliance reporting Export in PDF, HTML, CSV, Excel, JSON Compliance and governance features in Ultimate
SAST, secret detection, DAST Basic SAST and secrets in all tiers; DAST in Ultimate
Source control and planning Works with your GitHub repositories Repositories, merge requests and planning in one platform
CI systems supported GitHub Actions only today GitLab CI/CD, hosted or self-managed
Hosted runner platforms Linux on x86-64 and ARM64, 1 to 32 vCPU. Linux on x86-64 and arm64; Windows and macOS hosted runners in beta.
Pricing Pro is €30 per month until end of 2026, with 10,000 build minutes and one monitored SBOM. Free with 400 compute minutes; Premium $29 per user per month billed annually; Ultimate on custom pricing (as of September 2026).
  • Included
  • Partly
  • Not included
  • On the roadmap

What GitLab does well

One platform. Code, reviews, pipelines, security findings and planning live in the same place, with one permission model. For many organizations that alone decides the question.

Security scanning, by tier. Be precise about what each tier includes. According to GitLab, basic SAST, secret detection and container scanning run in all tiers, including Free. In Free and Premium, those scans produce JSON report artifacts. Ultimate adds the workflow around them: findings in merge requests, the vulnerability report, the dependency list, security approvals, and GitLab Advanced SAST. Dependency scanning, continuous vulnerability scanning and DAST are Ultimate features. Container scanning can also produce a CycloneDX SBOM report in every tier.

Provenance. GitLab Runner can generate an artifact provenance statement in the SLSA 1.0 format in all tiers. Signed SLSA Level 3 attestations exist too, but GitLab lists them as an experiment on GitLab.com for Ultimate, behind a feature flag that is disabled by default.

Runner choice. GitLab-hosted runners cover Linux on x86-64 (2 to 32 vCPUs) and arm64, with Windows and macOS in beta. You can also run your own runners anywhere, and GitLab states that jobs on your own runners do not use compute minutes. GitLab Dedicated adds data residency in a region of your choice.

Where CRACI is different

The SBOM comes from the build, not the lockfile

GitLab's SBOM-based dependency scanning detects dependencies from supported lockfiles or dependency graph exports. That is a solid approach when the lockfile tells the whole story. Builds often do more: they run install scripts, download toolchains, restore caches and pull base images.

CRACI sees that activity because it is the runner. A package-aware proxy observes traffic to package sources while the job runs, across npm, PyPI, RubyGems, Cargo, Go, Nix and OCI, plus OS packages and source or download presets. Dependency evidence travels with CI caches, so a package restored from a cache is still accounted for. Every job produces an SBOM in CycloneDX or SPDX.

Completeness is stated, not assumed

Each SBOM carries a completeness state per job and per cache: Complete, Complete with connections, Incomplete, Unavailable or Not recorded. When the record has a gap, you can see it.

The build network is a policy

CRACI egress policies are default deny or default allow, with 24 built-in software-source presets and typed custom sources for npm, PyPI, apt, apk, the Go proxy, Nix, Cargo, OCI registries and Git. Policies are validated before the job starts, fail closed, and send an email alert on a violation. On GitLab, network control for builds is whatever you configure around your own runners.

Provenance signed by the runner that built it

CRACI signs provenance that links each artifact, including OCI artifacts, to the build that produced it, using Ed25519 over SHA-512. Through the API you can trace an artifact to its build, its CycloneDX SBOM and the job network trace. CRACI does not claim a SLSA level.

Monitoring what shipped

CRACI aggregates vulnerabilities across builds and repositories and keeps re-evaluating monitored SBOMs as new advisories appear.

Which one fits

  • Stay with GitLab if your code and pipelines are on GitLab and you want one platform, or if you need SAST, DAST and secret detection in the same product.
  • Choose CRACI if your code is on GitHub and you run GitHub Actions, and you need evidence of what went into each release, control over what builds can reach, and SBOMs you can defend in an audit.
  • Use both if your organization runs both platforms. GitLab keeps covering its projects and scanners; CRACI runs the GitHub Actions side and records those builds.

For the Cyber Resilience Act

Under the EU Cyber Resilience Act, manufacturers need to know what is in each product release and handle vulnerabilities in it. Vulnerability reporting obligations apply from September 2026, and the regulation applies in full from December 2027. GitLab Ultimate helps with finding and managing vulnerabilities across your projects. CRACI records what each release was built from, keeps monitoring it, and exports reports in PDF, HTML, CSV, Excel and JSON. It automates a significant part of the software supply chain visibility and evidence that companies need for their wider CRA compliance process. Neither tool makes you compliant on its own.

Adding CRACI

For a repository on GitHub, install the CRACI GitHub App on your organization, for all repositories or a selected set, and change the runner label:

runs-on: craci

Workflows, actions and the GitHub UI stay the same. CRACI replaces the runner, not GitHub Actions. Read more about build-time SBOM generation and compliance reports, or see pricing.

See what one build really pulls in

Run one GitHub Actions workflow on CRACI and compare its SBOM with the one your scanners produce today.

Book a demo