KiCI

KiCI vs Jenkins

Jenkins is the long-standing, fully self-hosted automation server — you run the controller and agents, and write pipelines in Groovy. KiCI brings typed-TypeScript pipelines, a managed control plane, and a built-in multi-backend autoscaler, while keeping execution on your own infrastructure.

Visit Jenkins homepage ↗

KiCI Jenkins
Workflow language
Pipelines are real, typed TypeScript — loops, conditionals, functions, autocomplete
Pipelines are written in a Jenkinsfile using Groovy (Declarative or Scripted)
Source code and secrets
Your source and secrets stay on your own sovereign infrastructure, and KiCI runs the control plane as a managed service
Credentials are configured in and stored encrypted on the Jenkins controller you operate
Self-hosting model
You self-host the execution (orchestrator and agents), while KiCI runs the control plane as a managed service — no CI server to operate
Fully self-hosted — you run the controller, which orchestrates and schedules jobs, plus the agents that execute them
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
Ephemeral agents can be created on demand via a plugin (for example the Kubernetes plugin), provisioned per build
Cost model
The hosted control plane is free with full functionality; paid tiers raise limits for scale and observability and never meter your executions — you provide the execution compute itself
Free and open source — you run it on your own infrastructure, so you provide the compute
Development experience
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
You can lint a Jenkinsfile from the command line before running it, but pipeline runs execute on the Jenkins server
Dynamic job generation
Generate jobs programmatically in-process — a dynamicJob generator emits typed job definitions in TypeScript, fanning out one job per item an upstream job discovers
Scripted Pipeline is general-purpose Groovy, so stages can be generated programmatically in code
Get started with KiCI See all comparisons