containerd-shim-edgelet-wasm-v2 is a containerd shim v2 runtime for generic WASM/WASI workloads.
Stable integration identifiers:
- runtime type:
io.containerd.edgelet.wasm.v2 - CRI handlers:
wasm,wasm-local - shim binary:
containerd-shim-edgelet-wasm-v2
Use containerd 2.x with plugin path io.containerd.cri.v1.runtime.
version = 3
[plugins.'io.containerd.cri.v1.runtime'.containerd]
default_runtime_name = "wasm"
[plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.wasm]
runtime_type = "io.containerd.edgelet.wasm.v2"
runtime_path = "/usr/local/bin/containerd-shim-edgelet-wasm-v2"
[plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.wasm-local]
runtime_type = "io.containerd.edgelet.wasm.v2"
runtime_path = "/usr/local/bin/containerd-shim-edgelet-wasm-v2"After updating config:
- Ensure
containerd-shim-edgelet-wasm-v2is onPATHfor containerd. Forctr --runtime=io.containerd.edgelet.wasm.v2, also ensurecontainerd-shim-wasm-v2resolves to the same binary (symlink is acceptable). - Restart containerd.
- Confirm runtime config load via
containerd config dump.
Script:
scripts/smoke-ctr-containerd-v2.sh
Default smoke image:
ghcr.io/containerd/runwasi/wasi-demo-app:latest
make smoke-ctr-drybash scripts/smoke-ctr-containerd-v2.shExpected outcome:
ctrsuccessfully pulls the image.ctr run --runtime io.containerd.edgelet.wasm.v2completes with exit code0.- Demo workload emits its expected stdout (depends on image).
missing required command: containerd-shim-edgelet-wasm-v2- Install/copy the shim binary and ensure it is in
PATH.
- Install/copy the shim binary and ensure it is in
containerd daemon is not running- Start containerd and retry.
ctr runfails with runtime not found- Check
runtime_type = "io.containerd.edgelet.wasm.v2"andruntime_path = "/usr/local/bin/containerd-shim-edgelet-wasm-v2"in config, then restart containerd. - Ensure
containerd-shim-wasm-v2points tocontainerd-shim-edgelet-wasm-v2.
- Check
- handler mismatch in CRI flows
- Ensure both handlers
wasmandwasm-localare configured underio.containerd.cri.v1.runtime.
- Ensure both handlers
Tagged releases publish six Linux archives (GNU + MUSL), each containing only
containerd-shim-edgelet-wasm-v2 and a matching SHA256 checksum file:
containerd-shim-edgelet-wasm-v2-x86_64-linux-musl.tar.gzcontainerd-shim-edgelet-wasm-v2-aarch64-linux-musl.tar.gzcontainerd-shim-edgelet-wasm-v2-riscv64gc-linux-musl.tar.gzcontainerd-shim-edgelet-wasm-v2-x86_64-linux-gnu.tar.gzcontainerd-shim-edgelet-wasm-v2-aarch64-linux-gnu.tar.gzcontainerd-shim-edgelet-wasm-v2-riscv64gc-linux-gnu.tar.gz
Make targets added for release and runtime operations:
- Build:
make buildmake build-cross-x86_64-unknown-linux-musl(or other target triple)make build-all-targets
- Test:
make testmake test-unitmake test-feature-matrixmake test-integration-containerd
- Smoke:
make smoke-drymake smoke-local
- Dist/release checks:
make distmake release-checkmake clean-dist
- Lima helpers:
make setup-limamake lima-smokemake lima-clean
Linux host bootstrap:
bash scripts/setup-linux.shLima workflow for macOS/Linux (dedicated instance edgelet-shim by default):
bash scripts/lima-up.sh
bash scripts/lima-smoke.sh
bash scripts/lima-down.shlima-smoke.sh enforces the required runwasi demo gate.
Runtime integration must pass this canonical case:
sudo ctr images pull ghcr.io/containerd/runwasi/wasi-demo-app:latest
sudo ctr run --rm --runtime=io.containerd.edgelet.wasm.v2 ghcr.io/containerd/runwasi/wasi-demo-app:latest testwasmThis same gate is used in:
- local integration script:
scripts/test-containerd-integration.sh - CI runtime integration job in
.github/workflows/ci.yml
Current v1 behavior is a deterministic stub only:
- No ONNX/OpenVINO/CUDA/cuDNN/GGML runtime backends are linked.
wasi-nnis not available for real model inference yet.- Probe path is explicit and deterministic for operator visibility.
Probe behavior:
EDGELET_WASI_NN_PROBE=1 containerd-shim-edgelet-wasm-v2 ...Expected result:
- If
wasi-nn-stubis enabled (default): error reports thatwasi-nnis stubbed and no backend is configured. - If
wasi-nn-stubis disabled at compile time: error reports feature is disabled.