kapitan is a free, open source orchestration & scheduling project written in Python and released under Apache-2.0. It has 1,933 GitHub stars, 215 forks and 155 open issues, and was last pushed 8 days ago. On this registry it ranks #63 of 130 tracked projects in Orchestration & Scheduling, with 5 head-to-head comparisons available. It gained 5 stars over the last 30 tracked days.

What is kapitan?

Kapitan is an open source, inventory-driven configuration management tool that compiles reusable YAML classes and targets into rendered Kubernetes manifests, Terraform resources, and other infrastructure artifacts for platform engineering and GitOps teams.

What it is

Kapitan is a Python tool, listed in this registry under Infrastructure & Operations / Orchestration & Scheduling, that lives in the Kubernetes and Terraform infrastructure ecosystem. It models configuration as a hierarchical inventory of reusable classes and per-environment targets written in YAML, then compiles that inventory through a set of input templates into a tree of generated files under compiled/. Templates can be written in Jsonnet, Jinja2, or Kadet (Python), and the tool also accepts Helm, Kustomize, and CUE inputs. Secrets, remote dependencies, and validation are handled by the same compile step rather than by separate tooling.

The concrete problem it solves is value duplication. In a typical stack, the same endpoint, image tag, or replica count is copied across Helm values files, Kustomize overlays, and Terraform variables, and each copy drifts independently. Kapitan replaces that duplication with a single inventory definition, letting each input type generate the files it needs from the same source data. Teams define values once and let Jsonnet, Jinja2, Helm, or Kustomize render them per target.

Key capabilities

  • Single compile entrypoint: kapitan compile turns an inventory plus input templates into the compiled/ output tree.
  • Multiple input types: Jsonnet, Jinja2, Kadet (Python), Helm, Kustomize, CUE, external commands, and copy/remove operations.
  • Native secret management integrated with GPG, HashiCorp Vault, AWS KMS, GCP KMS, and Azure Key Vault.
  • Remote dependencies fetched over Git, HTTP, and ORAS (OCI registry).
  • Validation of generated output using JSON Schema, TOML, and YAML linting.
  • GitOps-friendly output: compilation produces fully rendered, plain-text files suitable for committing.
  • Inventory-driven reuse through YAML classes and per-environment targets.

Who uses it and how

  • Platform engineering teams that manage Kubernetes and Terraform from one configuration source instead of maintaining separate variable sets.
  • GitOps teams that commit the rendered compiled/ output and let a delivery controller apply it, since output is plain text with no runtime templating.
  • Multi-environment organisations that map each environment to a target in the inventory and reuse classes across them.
  • Teams already invested in Helm, Kustomize, Jsonnet, or CUE that want an inventory layer above those tools rather than a replacement for them.
  • Users who need the community channel #kapitan on Kubernetes Slack or the kapitan-reference repository as a working starting point.

Getting started

The README recommends Docker with docker run -t --rm -v $(pwd):/src:delegated kapicorp/kapitan -h, adding -u $(id -u) on Linux to preserve file permissions. Alternatively, install with pip3 install --user --upgrade kapitan on Python 3.10 or newer, or scaffold a project with cruft create https://github.com/kapicorp/kapitan-reference --checkout cookiecutter --no-input.

How it compares

No list of paid products is given in the facts, so the relevant comparison is with the tools Kapitan consumes rather than replaces. Helm, Kustomize, CUE, Jsonnet, and Jinja2 all appear as supported input types, which places Kapitan above them as an inventory and compilation layer rather than as a competing renderer. A team that only needs to render one Helm chart gains nothing from the extra layer.

When to use it — and when not to

A self-hoster must operate the secret backends the workflow depends on, whether that means GPG keys, HashiCorp Vault, or cloud KMS access, and must keep either Python 3.10 or newer or the kapicorp/kapitan Docker image available. The repository carries 155 open issues, and the licence metadata is inconsistent: the README badge points to MIT while this registry entry lists Apache-2.0, so anyone adopting it for compliance-sensitive work should confirm the licence in the repository itself. Teams that only template a single chart or a handful of Terraform files should not add an inventory layer they will not reuse.

project readme (upstream, from github) — read inline

Kapitan: Configuration Management for Kubernetes, Terraform, and Infrastructure

Test, Build and Publish docker image Python Version Downloads Docker Pulls Releases Docker Image Size License

Kapitan is an open source configuration management tool for Kubernetes, Terraform, and complex infrastructure systems. It helps teams generate, organize, reuse, and validate configuration across environments using an inventory-driven model, templates (Jsonnet, Jinja2, Kadet), and integrations with Helm, Kustomize, CUE, and external references.

Kapitan provides native secrets management (GPG, AWS KMS, GCP KMS, Azure Key Vault, HashiCorp Vault) and is designed for Platform Engineering and GitOps workflows.


Quick start

The fastest way to try Kapitan is with the Kapitan Reference repository:

git clone https://github.com/kapicorp/kapitan-reference.git kapitan-templates
cd kapitan-templates
./kapitan compile

For a minimal project from a cookiecutter template:

pip3 install cruft
cruft create https://github.com/kapicorp/kapitan-reference --checkout cookiecutter --no-input

What is Kapitan?

Kapitan lets you model infrastructure configuration with reusable inventory classes and targets, then compile that data into manifests, scripts, documentation, and Terraform resources. Instead of copying values across Helm values files, Kustomize overlays, and Terraform variables, you define everything once in the Kapitan inventory and let each input type generate the files it needs.

Install Kapitan

Docker (recommended)

docker run -t --rm -v $(pwd):/src:delegated kapicorp/kapitan -h

On Linux, add -u $(id -u) to preserve file permissions.

Pip

Kapitan requires Python 3.10 or newer.

pip3 install --user --upgrade kapitan

See the full installation guide for platform-specific steps.

What Kapitan does

Kapitan turns a hierarchical inventory and a set of input templates into compiled configuration files ready for deployment.

  1. Define reusable classes and per-environment targets in YAML.
  2. Write templates with your preferred tools.
  3. Run kapitan compile.
  4. Deploy the generated output from the compiled/ directory.

Supported input types

Native integrations

  • Secret management: GPG, HashiCorp Vault, AWS KMS, GCP KMS, Azure Key Vault
  • Remote dependencies: Git, HTTP, ORAS (OCI registry)
  • Validation: JSON Schema, TOML, YAML linting
  • GitOps-friendly: compiles to fully rendered, plain-text output

When to use Kapitan

  • You manage the same application across many environments (dev, staging, prod, regions) and want a single source of truth.
  • You need to reuse configuration fragments across targets without copy-paste.
  • You want to combine multiple templating tools in one pipeline.
  • You need native secret management embedded in the same configuration workflow.
  • You prefer a compile step that generates fully rendered output before deployment.

When another tool may be enough

  • Helm alone is sufficient if you only need to template a single chart with values files and do not share complex configuration across many services.
  • Kustomize alone is sufficient if your environment differences are mostly patches and overlays on a small set of bases.
  • Plain YAML with a CD tool is sufficient if you have very few environments and simple configuration with little reuse.
  • Terraform alone is sufficient if you only manage infrastructure resources and do not need a broader multi-language configuration layer.

Project status

Kapitan is actively maintained by KapiCorp and the open source community. Releases are published regularly with release notes. The project uses an MIT license.

Contributing

We welcome contributions. Please open an issue or pull request to get started.

Security

If you discover a security issue, please open a private security advisory or contact the maintainers directly.

Support

Related projects

Frequently asked questions

Is kapitan free to use?

kapitan is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does kapitan do?

Generic templated configuration management for Kubernetes, Terraform and other things

What is kapitan written in?

kapitan is primarily written in Python. Its source is publicly available at https://github.com/kapicorp/kapitan, and it has 1,933 GitHub stars.