Releases: atmask/containix
Release list
containix/v0.1.0
containix v0.1.0
The first release of containix — a containerd shim that runs Nix flakes directly as Kubernetes pods, no container images required. Reference a flake in a pod annotation; the shim resolves it, fetches the closure from your binary cache, assembles a rootfs from Nix store paths, and hands off to runc.
⚠️ Experimental. The API will change before v1 — pin to this tag, not a branch. Not recommended for production yet.
How it works
A pod opts in via runtimeClassName: containix and carries the flake reference as an annotation. If the flake's default package declares meta.mainProgram, that's the only annotation you need:
metadata:
annotations:
containix.dev/flake: "github:org/app" # meta.mainProgram becomes the entrypoint
spec:
runtimeClassName: containixAnnotations
| Annotation | Default | Purpose |
|---|---|---|
containix.dev/flake |
— (required) | Flake reference to resolve (nixpkgs#hello, github:org/repo). |
containix.dev/entrypoint |
meta.mainProgram |
Override the executable; relative → flake store path, absolute → literal. |
containix.dev/timeout |
2m |
Max time for build + closure resolution (Go duration, capped at 30m). |
Artifacts
- Prebuilt
containerd-shim-containix-v1binaries for linux/amd64 and linux/arm64. - Also consumable as a Nix flake:
github:atmask/containix(package +nixosModules.default).
Requirements (per node)
containerd, a Nix daemon, a binary cache for cold starts, a pullable stub image (ghcr.io/atmask/containix-empty), plus a RuntimeClass and CRI annotation passthrough. Full setup in the Kubernetes guide.
Validated
End-to-end on NixOS (aarch64), containerd 2.x — system containerd via ctr and single-node k3s via kubectl.
Known limitations
- Self-contained binaries only (no
/bin/shshell-outs or FHS layout yet). - No interactive tooling in-container (
kubectl execlands withoutsh/ls). - NixOS-first; non-NixOS and managed clusters require manual node prep.
Docs: README · Kubernetes guide · Architecture
containix-empty/v0.1.0
containix-empty 0.1.0
A near-empty, multi-arch OCI stub image for use with the containix runtime.
Kubernetes' CRI requires every container to declare an image:, but containix builds the real rootfs from a Nix flake — so the image contents are never used. This stub exists purely to satisfy that requirement.
Image
ghcr.io/atmask/containix-empty:0.1.0
Multi-arch manifest (linux/amd64 + linux/arm64); also tagged :0 for major-version pinning.
Usage
spec:
runtimeClassName: containix
containers:
- name: app
image: ghcr.io/atmask/containix-empty:0.1.0 # required by CRI, contents ignoredThe actual filesystem and entrypoint come from the containix.dev/flake annotation. See the containix v0.1.0 release and the Kubernetes guide.