CRI-O
A lightweight container runtime that implements the Kubernetes Container Runtime Interface so the kubelet can run pods through OCI runtimes like runc or crun.
- Category: Runtime
- CNCF maturity: Graduated
- Language: Go
- License: Apache-2.0
- Repository: cri-o/cri-o
- Documented at commit:
68f2617(2026-06-22,main, version line 1.37.0)
What it is
CRI-O is a single-purpose implementation of the Kubernetes Container Runtime Interface (CRI). The kubelet speaks CRI over gRPC, and CRI-O translates those calls into actions on an OCI runtime, an image store, and a network plugin. It ships one binary, crio, which runs as a daemon. There is no general-purpose CLI for end users (README.md:102-107).
CRI-O delegates the parts other runtimes try to own. Container execution goes to an OCI runtime such as runc or crun, images go through containers/image, storage goes through containers/storage, and networking goes through CNI (README.md:113-119). CRI-O itself is the glue between the kubelet and those components.
It targets one consumer, the kubelet, and tracks Kubernetes version for version. A CRI-O 1.x release lines up with Kubernetes 1.x. The pinned commit reports version 1.37.0 (internal/version/version.go:6), on the development line above the released v1.36.1.
When to use it
- You run Kubernetes and want a runtime scoped to exactly that, with no extra surface to secure or operate.
- You want the runtime version pinned to your Kubernetes minor version.
- You need pluggable isolation per workload: runc or crun for normal pods, Kata Containers for VM-isolated pods, selected by runtime handler.
- Avoid it if you need a standalone container engine for local builds or non-Kubernetes hosts. CRI-O does not ship a user CLI or an image builder; that is out of scope by design (
README.md:102-107).
In this deep-dive
- History: origin as OCID, the path through CNCF incubation to graduation.
- Architecture: the daemon, the OCI abstraction, and how a pod gets created.
- Adoption & Ecosystem: who runs it and the alternatives.
- Internals: the core types and the RunPodSandbox path, read from source.
- Getting Started: install and a minimal working setup.
Sources
- cri-o/cri-o (GitHub)
- ADOPTERS.md
- install.md
- CNCF Announces Graduation of CRI-O (2023-07-19)
- CNCF to host CRI-O (2019-04-08)
- Red Hat contributes CRI-O to the CNCF
- InfoQ: CRI-O Graduates from CNCF (2023-09)
- CRI-O on CNCF projects
- OpenShift Container Platform 4 defaults to CRI-O
- Oracle Linux Cloud Native Environment: CRI-O
- containerd
- opencontainers/runc