kpt is a free, open source api development & testing project written in Go and released under Apache-2.0. It has 1,894 GitHub stars, 265 forks and 324 open issues, and was last pushed 25 hours ago. On this registry it ranks #115 of 178 tracked projects in API Development & Testing, with 5 head-to-head comparisons available.

What is kpt?

kpt is an Apache-2.0, Go-based, package-centric toolchain that automates the authoring, transformation, validation, and delivery of Kubernetes configuration as data, aimed at platform engineers and infrastructure teams that manage Kubernetes platforms and KRM-driven infrastructure at scale.

What it is

kpt is a command-line toolchain for Kubernetes configuration editing built around the idea of Configuration as Data. In that model, configuration data is the source of truth and is stored separately from live cluster state; configuration is represented with a uniform, serializable data model; the code that acts on configuration is separated from the data and from packages or bundles of that data; and configuration file structure and storage are abstracted away from the operations that act on the data, so clients do not need to interact directly with git or container images. The toolchain ships as several parts: the kpt CLI for package, function, and deployment operations; the kpt API, a separately versioned Go module at github.com/kptdev/kpt/api with type definitions for Kptfile, ResourceGroup, and function result types; the Function SDK at kptdev/krm-functions-sdk; and a function catalog at catalog.kpt.dev.

The concrete problem it addresses is that Kubernetes configuration is normally treated as files to be edited by hand or as something only reachable through imperative commands against a live cluster. kpt replaces that hand-edited, file-centric workflow with a package-centric one: configuration becomes a reusable package, transformations and validation become reusable functions, and the client no longer needs to know whether the underlying storage is git or a container image. The README places kpt in the Kubernetes and KRM ecosystem, naming Config Connector and Crossplane as examples of the KRM-driven infrastructure it is meant to manage.

Key capabilities

  • The kpt CLI performs package and function operations and also handles deployment, either through direct apply or through GitOps.
  • It keeps an inventory of deployed resources, which enables resource pruning, aggregated status and observability, and an improved preview experience.
  • The kpt API module github.com/kptdev/kpt/api exposes schemas including Kptfile, ResourceGroup, and function result types, for building tools that read or write kpt package metadata without depending on the full CLI.
  • KRM functions in any general-purpose or domain-specific language transform and validate YAML KRM input and output, are used for in-place transformation, and must therefore be idempotent.
  • A Go SDK in the krm-functions-sdk repository simplifies authoring functions.
  • The function catalog at catalog.kpt.dev supplies off-the-shelf, tested functions rather than requiring every function to be written locally.
  • Configuration as Data abstracts file structure and storage from the operations acting on configuration, so clients do not interact directly with git or container images.

Who uses it and how

  • Platform teams managing Kubernetes platforms and KRM-driven infrastructure such as Config Connector and Crossplane at scale, where configuration is packaged and reused rather than edited per cluster.
  • GitOps-oriented teams, since the CLI supports delivery via GitOps and the resource inventory drives pruning and aggregated status.
  • Tool authors who need to read or write kpt package metadata and therefore depend on the kpt API module instead of the full CLI, which is released independently of it.
  • Function authors writing domain-specific transformation, validation, or policy logic in Go through the Function SDK, matching the shift-left validation and policy-as-code topics.
  • Teams that consume existing tested functions from catalog.kpt.dev rather than authoring their own.

Getting started

Installation instructions for the kpt CLI are published at kpt.dev/installation/kpt-cli, and the kpt website at kpt.dev is the starting point for specific features, the FAQ, and the rationale guide.

How it compares

The topic list places kpt alongside kubectl and kustomize, so it sits in the same Kubernetes configuration tooling space as imperative apply and file-level customization. It differs in being package-centric and in separating the code that acts on configuration from the data and from bundles of that data, with a resource inventory driving pruning and aggregated status. No paid products are named as replaced.

When to use it — and when not to

The self-hoster operates a CLI and its surrounding packaging and delivery workflow, with no database or mail service implied by the README. Teams that do not work in KRM-shaped configuration, or that cannot guarantee idempotent in-place transformations, should look elsewhere. Honest weaknesses: the README is thin and defers most detail to the external site, the CLI and API module are versioned and released independently so release surfaces must be tracked in release/README.md, and the repository carries 324 open issues against 1,894 stars.

project readme (upstream, from github) — read inline
kpt logo

OpenSSF Best Practices FOSSA Status

kpt: Automate Kubernetes Configuration Editing

kpt is a package-centric toolchain that enables a WYSIWYG configuration authoring, automation, and delivery experience, which simplifies managing Kubernetes platforms and KRM-driven infrastructure (e.g., Config Connector, Crossplane) at scale by manipulating declarative Configuration as Data.

Configuration as Data is an approach to management of configuration which:

  • makes configuration data the source of truth, stored separately from the live state
  • uses a uniform, serializable data model to represent configuration
  • separates code that acts on the configuration from the data and from packages / bundles of the data
  • abstracts configuration file structure and storage from operations that act upon the configuration data; clients manipulating configuration data don’t need to directly interact with storage (git, container images).

See the FAQ for more details about how kpt is different from alternatives.

Use our public Dosu space to ask anything about kpt.

Why kpt?

kpt enables WYSIWYG editing and interoperable automation applied to declarative configuration data, similar to how the live state can be modified with imperative tools.

See the rationale for more background.

The best place to get started and learn about specific features of kpt is to visit the kpt website.

Install kpt

kpt installation instructions can be found on kpt.dev/installation/kpt-cli

kpt components

The kpt toolchain includes the following components:

  • kpt API (github.com/kptdev/kpt/api): A separately versioned Go module with type definitions and utilities for kpt schemas, including Kptfile, ResourceGroup, and function result types. Use it when building tools that read or write kpt package metadata without depending on the full CLI.

  • kpt CLI: The kpt CLI supports package and function operations, and also deployment, via either direct apply or GitOps. By keeping an inventory of deployed resources, kpt enables resource pruning, aggregated status and observability, and an improved preview experience.

  • Function SDK: Any general-purpose or domain-specific language can be used to create functions to transform and/or validate the YAML KRM input/output format, but we provide SDKs to simplify the function authoring process in Go.

  • Function catalog: A catalog of off-the-shelf, tested functions. kpt makes configuration easy to create and transform, via reusable functions. Because they are expected to be used for in-place transformation, the functions need to be idempotent.

Versioning

kpt follows the kpt project versioning guidelines. The CLI and API module are released independently; see release/README.md for release surfaces and tagging details.

Roadmap

You can follow the kpt roadmap in the related GitHub Project.

Contributing

If you are interested in contributing please start with contribution guidelines.

Contact

We would love to keep in touch:

  1. Join our Slack channel. You'll need to join Kubernetes on Slack first.
  2. Join our Discussions
  3. Join our community meetings

License

Code is under the Apache License 2.0, documentation is CC BY 4.0.

License scanning status

FOSSA Status

Governance

The governance of the kpt project and KRM Functiona Catalog are described in the governance repo.

Code of Conduct

The kpt project and the KRM Functions Catalog are following the CNCF Code of Conduct. More information and links about the CNCF Code of Conduct are here.

CNCF

The kpt project including the KRM Functions Catalog is a CNCF Sandbox project.

Frequently asked questions

Is kpt free to use?

kpt 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 kpt do?

Automate Kubernetes Configuration Editing

What is kpt written in?

kpt is primarily written in Go. Its source is publicly available at https://github.com/kptdev/kpt, and it has 1,894 GitHub stars.