Helm and Kustomize renderer
Render a Helm chart or a Kustomize overlay to plain YAML in the browser — with Helm's and Kustomize's own code compiled to WebAssembly — and see which values file or --set won each key, errors pointing at the template line, NOTES.txt, and what differs between two overlays.
Added
Works with
- Compose, Kubernetes, and cron checker Formatting and referencesends the rendered YAML here for linting (Secret values removed)
- Kubernetes scheduling explainer Containers and Kubernetessends a rendered Deployment, StatefulSet or Pod there to see which nodes it can run on
How to use it
Paste or drop a chart, add your values files and --set flags, and get exactly what helm template
prints. Or drop a Kustomize tree and build any overlay, then compare it with another. Nothing is
sent anywhere: the renderer is Helm’s and Kustomize’s own Go code compiled to WebAssembly and run in
the page.
How to use it
Helm
-
Load a chart. Example chart loads a small web-service chart with a Redis subchart, a migration hook, a test, a values schema and a NOTES.txt. Open .tgz or files takes a packaged chart (
helm package/helm pulloutput) or loose files; Open chart folder or dropping a folder on the page takes a chart directory as it is on disk. Edit any file in place; the.helmignoreis honoured. -
Values and flags. Add values files on the right, then write the command as you would run it —
helm template shop ./webapp -n prod -f values-prod.yaml --set replicaCount=4— or just the flags.-fnames one of the values files (or a file inside the chart).--set,--set-string,--set-json,--set-literaland--set-fileparse exactly as Helm parses them (escaped commas,a[0].b=…, JSON values); so do-n,--kube-version,--api-versions,--is-upgrade,--include-crds,--skip-tests,--no-hooksand--skip-schema-validation. The chips under the command show the order Helm merges them in: every-ffile first, then--set-json,--set,--set-string,--set-file,--set-literal— the command-line order only matters within each kind. -
Render (or ⌘/Ctrl+Enter; after the first render it re-renders as you type).
-
Output is byte for byte what
helm templateprints: manifests sorted in Helm’s install order,# Source:lines, then hooks. -
By template lists each document with its template, kind, name and hook.
-
Values is the final
.Valueswith, for each key, the file or flag that won and what it overrode. Keys that novalues.yamldeclares are flagged, with the closest declared key when it looks like a typo (replicaCuont→replicaCount). -
NOTES.txt is what
helm installwould print.
-
-
Errors show Helm’s message and a link to each template location it names (
templates/job-migrate.yaml:20:45); the link opens the file at that line. For YAML errors Helm’s line number counts lines of the rendered template, not the source.
Functions work as in Helm 4: Sprig, include, tpl, required, toYaml, fromYaml,
toToml, .Files.Get, .Files.Glob, AsConfig, AsSecrets, .Capabilities (Kubernetes v1.36 by
default — change it with --kube-version and add APIs with --api-versions), values.schema.json
validation, dependency conditions, tags, aliases and import-values, library charts. lookup
returns an empty map, as it does in helm template. Dependencies must already be in charts/
(as after helm dependency build); nothing is downloaded from a chart repository.
Kustomize
-
Load files. Example overlays loads a base, a
metricscomponent anddevandprodoverlays. Open folder (or drop one) takes your repository’s kustomize tree; paths are kept relative to the folder you pick. -
Build any directory with a
kustomization.yaml. The output matcheskubectl kustomize(v5.8.1): resources,patches(strategic merge and JSON 6902, by path or inline, withtargetselectors),namePrefix/nameSuffix,namespace,labels/commonLabels,commonAnnotations,images(tags and digests),replicas,configMapGeneratorandsecretGeneratorwith their hash suffixes (and the references to them rewritten),replacements,componentsandsortOptions. Output order can force legacy or no reordering, like--reorder. -
Layers shows the chain the overlay builds — overlay, bases, components — and what each one sets, with notes on deprecated fields.
-
Compare builds a second directory (say
overlays/devagainstoverlays/prod) and lists the resources that differ, with a line diff for each. Resources are paired by kind and name, and then by the closest name, sodev-shopandprod-shop-euline up even though prefixes, suffixes and generator hashes differ.
Remote bases (URLs and git), helmCharts and KRM function plugins are not supported — they need
the network or other programs.
Hand-offs
Lint in devops-yaml opens the output in the Kubernetes
checker (Secret values are replaced with REDACTED first). Check scheduling sends the first
Deployment, StatefulSet, DaemonSet, Job or Pod to the scheduling
explainer. To write manifests from scratch use the manifest builder;
for the commands that apply them, the kubectl helper.
How it was checked
The tests render a set of charts and overlays (this page’s examples, a chart with a library chart,
aliased and conditional subcharts, import-values, .Files globs, CRDs, hooks and tests, a packaged
.tgz, and Kustomize trees with file and env generators, replacements, label-selector patches and
FIFO ordering) and compare the result with what Helm v4.2.3 and kubectl kustomize v5.8.1 print for
the same input — byte for byte — and Helm’s error messages word for word for missing required values,
schema violations, nil pointers, template and YAML parse errors and an incompatible kubeVersion.
Browser support
Any current browser with WebAssembly (Chrome, Edge, Firefox, Safari). The renderer is about 8 MB compressed (36 MB once unpacked), downloaded the first time you render and cached by the browser after that. Rendering takes milliseconds.
Privacy
Charts, values and overlays stay in your browser: they are saved in this browser’s local storage so
the page reopens where you left it, and nothing is uploaded. The only download is the renderer
itself, from this site (/wasm/k8s-render/). A share link carries the chart or overlay files in the
link itself, so don’t share one that contains secrets.
Licences
Helm and Kustomize are © The Helm Authors and The Kubernetes Authors, under the Apache License 2.0.
The WebAssembly build uses Helm v4.2.3 and Kustomize API v0.21.1 with three small changes so that
it does not link the Kubernetes client: the default API version list is compiled in, the
client-go version is a constant, and the cluster-backed lookup is removed (it returns an empty
result, as in helm template). The build script, the patch and the wrapper are published at
/wasm/k8s-render/.
Feedback is a gift. Something to improve, a feature to add, or a bug? Tell me.
Runs entirely in your browser; nothing you type leaves this page.