1. Load your files
2. What Helm would silently accept, and what it would reject
| Field | Severity | Finding |
|---|
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.