Kure
Type-safe Kubernetes manifest generation in Go.
Kure helps platform teams generate plain Kubernetes YAML for GitOps workflows — without Helm templates, runtime controllers, or fragile string-based YAML manipulation.
Get Started View on GitHub
Info
Development docs: Kure has not reached a stable release yet. These docs track the current development version, so APIs and examples may change.
Why Kure?
Building Kubernetes manifests for GitOps can be challenging:
- YAML templating is error-prone and hard to maintain at scale
- Helm charts add complexity with their templating language and release lifecycle
- Raw manifests lead to duplication and inconsistency across clusters
Kure provides typed Go builders that catch errors at compile time and compose cleanly into larger GitOps layouts.
Quick Example
Go code generates plain Kubernetes YAML — no templates, no runtime.
```go import ( "os" "github.com/go-kure/kure/pkg/io" "github.com/go-kure/kure/pkg/kubernetes" ) cm := kubernetes.CreateConfigMap("app-config", "default") kubernetes.AddConfigMapData(cm, "DATABASE_HOST", "postgres.db.svc") kubernetes.AddConfigMapData(cm, "DATABASE_PORT", "5432") io.Marshal(os.Stdout, cm) ```
```yaml apiVersion: v1 kind: ConfigMap metadata: name: app-config namespace: default data: DATABASE_HOST: postgres.db.svc DATABASE_PORT: "5432" ```
How It Fits GitOps
Go program → Kure builders → YAML files → Git repository → FluxCD reconcilesKure is a code-time tool. It runs during your build step, outputs plain YAML, and exits. It has no runtime presence in your cluster.
Core Model
Kure organises cluster configuration into a four-level hierarchy:
Cluster → Node → Bundle → Application| Level | Purpose |
|---|---|
| Cluster | Root; holds GitOps engine config (Flux or ArgoCD) |
| Node | Subdirectory tree; logical grouping of bundles |
| Bundle | Deployment unit; maps to a Flux Kustomization or ArgoCD Application |
| Application | Individual workload; generates Kubernetes manifests |
See Domain Model for the full reference.
What Kure Is and Is Not
Kure is:
- A Go library for generating Kubernetes and GitOps manifests
- A compile-time tool — it runs in your build step, not in your cluster
- FluxCD-first for GitOps workflow integration
- Designed to output plain, readable YAML
Kure is not:
- A runtime controller or operator
- A package manager by itself
- A replacement for every Helm chart use case
- Required to run inside your target cluster
Related Projects
Kure is the manifest-generation library. Related tooling:
- go-kure/launcher : Package manager and customization workflows (patching, overlays). Optional — only needed if you use those workflows. References to “kurel” in older docs refer to this project’s predecessor.
Current Status
- FluxCD workflow is the primary supported path — fully implemented
- ArgoCD support is present but bootstrap is not yet production-ready
- No stable release yet; APIs may change between versions
Start Here
Recommended reading order:
- Quickstart — generate your first Kubernetes manifest
- Domain Model — understand the Cluster → Node → Bundle → Application hierarchy
- Using Kure as a Library — import paths, creating resources, generating YAML
- Generating Flux Manifests — end-to-end GitOps layout generation
- Examples — practical, runnable examples
- API Reference — package documentation
Get Involved
Kure is open source.