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.
Pipelines are real, typed TypeScript — loops, conditionals, functions, autocomplete
Pipelines are written in a Jenkinsfile using Groovy (Declarative or Scripted)
Org-wide CI across repos
Push model: one workflow repo defines jobs that run on events from every matching repo in your org — selected by a repos: glob, with nothing added to the source repos themselves
Shared libraries hold reusable pipeline code in external repos, loaded into each Jenkinsfile that needs them
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