Helm meets Kustomize, but without the YAML.
Komet is a thin wrapper around Helm that pre-evaluates chart values using more powerful configuration languages like CUE before passing them to Helm. This lets you build reusable configuration, enforce validation and constraints, and leverage the expressiveness that plain YAML can't provide. Since Komet passes all arguments directly to Helm, it works seamlessly as a drop-in replacement.
Komet also includes built-in support for Kustomize as a Helm post-renderer, allowing you to extend charts that don't expose the values or templates you need without needing to fork them. In Komet's context, "patches" refer to Kustomization files containing built-in generators or transformers manifests.
Helm charts work well as a packaging tool and still remain the industry standard for distributing Kubernetes applications, but managing chart values across many environments and services at scale comes with its own pain points:
- Plain YAML lacks type safety, validation, and the ability to reuse values across files
- If charts don't expose the right values or templates, consumers are stuck forking them
- Helm lacks support for merging list values, a limitation for managing any reasonably sized deployment
You can find various related issues on the Helm repository, but essentially Helm isn't currently equipped to address these challenges for managing configuration at scale.
Komet aims to address these by combining Helm with CUE and Kustomize. It doesn't seek to replace Helm, but enhance how charts are consumed. At its core, Komet is a thin orchestration layer that can be expressed as:
cue export values.cue --out yaml | helm template -f - --post-renderer kustomize
- Kustomize can inflate Helm charts natively, but lacks full Helm support such as private registries and plugins
- Timoni offers a CUE-native approach but requires rewriting charts as Timoni modules, a significant undertaking when you want to consume existing Helm charts as-is
- Disclaimer: Timoni has Helm interoperability but as far as I'm aware that currently only works with FluxCD
-
CUE evaluation — Pre-evaluate Helm values and Kustomize patches
- Type safety, validation, and constraint enforcement
- DRY configuration with expressions and defined relationships
- Reusable modules importable by both values and patches
-
Injected scopes — Inject external data into the CUE evaluation
- Pass environment-specific configuration or secrets
- Merge multiple scopes from files or inline JSON/YAML
-
Kustomize post-renderer — Extend charts beyond what values expose
- Leverage Kustomize built-in generators and transformers
- Patches also benefit from CUE evaluation and injected scopes
-
Helm compatibility — Drop-in replacement for the Helm CLI
- Shells out to Helm, supporting all commands and plugins
- Supports CUE and YAML files, with the latter taking precedence
- Compatible with other post-renderers and plugins like
helm-secrets
flowchart LR
subgraph Komet
subgraph Values
VC[values.cue] --> CE1[CUE Evaluator]
CE1 --> EV[evaluated.yaml]
VY[values.yaml] --> EV
end
subgraph Patches
PC[patches.cue] --> CE2[CUE Evaluator]
CE2 --> EP[evaluated.yaml]
PY[patches.yaml] --> EP
end
EV --> Helm
Helm -->|rendered manifests| Kustomize
EP --> Kustomize
end
Kustomize --> FM[Final Manifests]
# Homebrew
brew install jace-ys/tap/komet
# Helm plugin
helm plugin install https://github.com/jace-ys/komet
# Docker
docker pull ghcr.io/jace-ys/komet:latestSee the releases page for precompiled binaries.
See the complete documentation for how to use Komet.
