# Helm, Kustomize and Plain Manifests — Helm

Source: https://www.skillbyai.com/en/helm/p-compare

> Choose the right tool for packaging and customising Kubernetes manifests.

## Templates versus overlays

**Plain manifests** with `kubectl apply` are fine for one small app in one environment. **Kustomize**, built into `kubectl apply -k`, takes plain YAML **bases** and applies **overlays** and patches per environment, with no templating language; it is simple and transparent, but has no packaging, versioning, dependency management or release history. **Helm** adds parameterised templates, packaging and distribution, dependencies, lifecycle hooks and release history with rollback; the cost is Go templating, which can become hard to read. The tools combine well: Helm's **`--post-renderer`** option passes rendered output through a program such as Kustomize to patch third-party charts without forking them, and Argo CD and Flux can both use Kustomize on top of Helm output. A sensible default: install third-party software with its Helm chart, and choose either Helm or Kustomize for your own apps based on whether you need distribution and parameters or just per-environment patches.

## Comparing the approaches

A quick decision aid.

```text
need                                          tool
--------------------------------------------  ----------------------------
install third-party software with options     Helm chart from the vendor
small in-house app, per-env patches only      Kustomize overlays
share an app across many teams / customers    Helm chart in an OCI registry
patch a vendor chart without forking it       Helm --post-renderer + Kustomize
releases with history and one-step rollback   Helm (or a GitOps controller on top)
```

## A form letter versus sticky notes

Helm is a form letter with blanks to fill in for each recipient. Kustomize is a finished letter with sticky notes saying "for Mumbai office, change line 3". Both work; choose by how many variations you send out.

**Quiz:** Which feature does Kustomize lack compared with Helm?

- [ ] Per-environment patches
- [x] Release history with rollback and chart packaging
- [ ] Plain YAML bases
- [ ] Integration with kubectl

*Answer:* Release history with rollback and chart packaging. Kustomize patches YAML but does not package charts or keep a release history.
