Skip to content

jace-ys/komet

Repository files navigation

Komet

Helm meets Kustomize, but without the YAML.


ci-badge release-badge godoc-badge

Komet

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.

Motivation

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

Alternatives

  • 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

Features

  • 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

Overview

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]
Loading

Installation

# 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:latest

See the releases page for precompiled binaries.

Usage

See the complete documentation for how to use Komet.

Roadmap

  • Helm 4 support — implement Komet as a Helm 4 plugin (HIP-0026)
  • Extra manifests — allow adding CUE manifests via Kustomize resources
  • Timoni support — support Timoni as an alternative engine instead of Helm
  • Other evaluators — add evaluator support for Jsonnet, Dhall, PKL, and others

About

Helm meets Kustomize, but without the YAML

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published