CRI-O
GraduatedRuntimeCRI-O is a lightweight implementation of the Kubernetes Container Runtime Interface (CRI). It exists to run OCI-compliant containers directly under kubelet without pulling in a general-purpose container engine like Docker.
What it is
CRI-O is a lightweight implementation of the Kubernetes Container Runtime Interface (CRI). It exists to run OCI-compliant containers directly under kubelet without pulling in a general-purpose container engine like Docker. It handles image pulling, container lifecycle, and delegates actual container execution to an OCI-compatible runtime (runc, crun, or others via runtime handlers). No CLI for humans, no build tooling — it's purely the plumbing between kubelet and the container runtime layer.
Who builds it and why
CRI-O is a CNCF graduated project, originally driven by Red Hat as the default runtime for OpenShift. That lineage still shows: Red Hat/IBM engineers make up a large share of the commit history, though the contributor base (369 contributors) has broadened over time to include SUSE, Intel, and independent Kubernetes SIG-Node contributors. The motivation was straightforward — Kubernetes didn't need a full container engine (image building, networking CLI, daemon socket management), it needed a minimal CRI shim. CRI-O fills that gap and tracks Kubernetes minor releases version-for-version, which is a deliberate design choice to avoid compatibility drift.
Production readiness signal
Strong. Graduated CNCF status, 369 contributors, active commit history, and a release cadence (v1.36.1) that mirrors upstream Kubernetes versioning — each CRI-O minor version corresponds to a Kubernetes minor version, which removes a lot of guesswork around compatibility. It's the default runtime in OpenShift and has been running in production clusters at scale for years. 5,636 GitHub stars is modest compared to more visible projects, but star count is a poor proxy here — this is infrastructure plumbing, not a project people star for visibility. Apache-2.0 licensing, Go codebase, no red flags on governance since it sits under Kubernetes SIG-Node oversight.
Who should use this
- Teams running OpenShift, where CRI-O is already the default and swapping it out adds risk for no benefit.
- Platform teams that want a minimal, security-focused runtime surface — CRI-O's smaller attack surface (no daemon socket exposed like dockerd, no build subsystem) matters for hardened or regulated environments.
- Anyone standardizing on strict Kubernetes version alignment, since CRI-O's release train matches Kubernetes exactly.
- Teams already using crun or runc directly and wanting a CRI layer that doesn't add its own opinionated abstractions on top.
Who should NOT use this
- Teams needing a general-purpose container engine for local dev — CRI-O is not a Docker replacement for building images, running ad hoc containers, or
docker execworkflows. Use Podman or Docker for that. - Shops already standardized on containerd with no OpenShift dependency — migrating off a working containerd setup to CRI-O for marginal security gains is not worth the operational churn.
- Anyone wanting broad ecosystem tooling support — containerd has wider adoption across managed Kubernetes offerings (EKS, GKE, AKS all default to containerd), meaning more community troubleshooting content and third-party tool compatibility.
- Edge or IoT deployments where containerd's broader hardware/OS support and lighter operational tooling ecosystem (k3s, etc.) is a better fit.
Alternatives
- containerd — the de facto default across major managed Kubernetes services; broader adoption, larger ecosystem, CNCF graduated as well.
- Docker Engine (via cri-dockerd shim) — legacy option for teams that need Docker-specific tooling alongside Kubernetes; requires an extra shim since Docker dropped native CRI support.
- gVisor / Kata Containers — not CRI-O alternatives directly, but relevant if the real requirement is stronger workload isolation (sandboxed runtimes) rather than just a CRI implementation.
Pricing
Fully open source, Apache-2.0. No commercial tier, no paid support contract from the project itself. If you're on OpenShift, support comes bundled through your Red Hat subscription; otherwise you're on community support (GitHub issues, Kubernetes Slack, SIG-Node meetings).