HELM VALUES SCHEMA CHECK · RUNS IN YOUR BROWSER

Does your values.yaml actually match its own schema?

Paste a Helm chart's values.yaml and its values.schema.json and get a deterministic report: every field values.yaml sets that the schema never declares -- the exact shape a typo like imgae: instead of image: takes, and helm lint misses unless the schema forbids extra fields outright -- plus every real schema violation (missing required field, wrong type, bad enum value, out-of-range number).

Nothing is uploaded. Files you load are read in this browser and never leave your device. No Helm binary, no cluster, no network call.

1. Load your files

Prefer a CLI, or want this as a CI gate?

Same checker, zero dependencies, two files — run it against a chart repo before every release, no Helm install required:

node cli.mjs check chart/values.yaml chart/values.schema.json               # exit 1 on any real schema violation
node cli.mjs check chart/values.yaml chart/values.schema.json --strict      # also fail on undeclared fields
node cli.mjs check chart/values.yaml chart/values.schema.json --json

Get cli.mjs and engine.mjs — Node 18+, nothing to install. It reads only the local files you name: no network call, ever.

What this checks — and what it cannot

It understands the JSON Schema subset that covers the overwhelming majority of real charts: type, properties, required, additionalProperties, enum, minimum/maximum, and items for arrays. See why this class of typo happens for how Helm's template engine actually behaves on an undefined key.

Already have Helm installed? See how this differs from helm lint — short version: same schema, but this also flags the undeclared-field case most schemas leave unguarded. A schema that matches values.yaml perfectly still says nothing about whether the chart's templates render correctly — this checks the data against its own contract, not the rendered manifests. Once you have rendered the chart, see Kubernetes Deprecated API Check for whether the output uses an apiVersion your target cluster will reject outright.

Prefer to just read the two files side by side? See what a manual read catches, and what gets hard as the schema grows nested fields.

Common questions

Doesn't helm lint already catch this?

Only partly. helm lint applies values.schema.json if the chart ships one, but most schemas leave additionalProperties unset (JSON Schema's permissive default), so an undeclared field — the exact shape a typo like imgae instead of image takes — passes lint silently. This tool flags that case too, as informational rather than a hard failure, because it is very often exactly the mistake it looks like.

Do I need Helm installed to use this?

No. It reads plain YAML and JSON text with its own parser — no Helm binary, no chart dependency resolution, no cluster, no network call, in the browser or the CLI.

Is my values.yaml uploaded anywhere?

No. The browser page parses a pasted or locally loaded file entirely in your own browser and never sends it anywhere. The CLI reads only local files — no network call, ever.

What JSON Schema features does it understand?

type, properties, required, additionalProperties, enum, minimum, maximum, and items for arrays — the subset that covers the overwhelming majority of real Helm values.schema.json files. It does not evaluate $ref, oneOf/anyOf/allOf, or regex patterns; a schema using those is read but those specific rules are not checked.