KiCI and Dagger both replace YAML with real, typed code that runs locally — kindred spirits. The difference: Dagger is a portable pipeline engine you run inside your existing CI, while KiCI is a complete CI/CD platform with a hosted control plane, trigger matching, job dispatch, and a built-in multi-backend autoscaler.
Pipelines are real, typed TypeScript — loops, conditionals, functions, autocomplete
Also real, typed code — native SDKs for Go, Python, TypeScript and more, generated from the API schema with full type safety
Platform vs pipeline engine
A complete CI/CD platform — the hosted control plane verifies and routes webhooks while the orchestrator matches triggers and dispatches jobs to your agents
A portable pipeline engine that integrates with your existing CI — it runs on your machines and CI platforms rather than triggering builds itself
Testing & local dev loop
kici run --local and kici run remote run a full workflow from your current codebase — locally or against the real remote pipeline — including unstaged changes, with no commit or push
A genuine strength too — the same pipeline runs locally and in CI on any machine with a container runtime
Typed values between steps & jobs
Step and job outputs are declared with Zod schemas, so values passed between jobs are typed and validated
Typed too — each SDK is generated from the API schema, so function inputs and outputs carry full type safety
Autoscaling ephemeral agents
A built-in auto-scaler provisions ephemeral agents on demand across Docker/Podman containers, bare-metal processes, and Firecracker microVMs — on your own infrastructure, with no extra controller
Dagger runs on whatever host or CI you run it in — its only dependency is a container runtime, so scaling that compute comes from the host or CI, not Dagger