helm/helm · error
no chart version found
Error message
no chart version found
What it means
ErrNoChartVersion is returned by IndexFile.Get (pkg/repo/v1/index.go:202 and the constraint-match tail) when a chart name exists in the index but no listed version satisfies the requested semver constraint — including the case where the entries list for the name is empty.
Source
Thrown at pkg/repo/v1/index.go:50
"github.com/Masterminds/semver/v3"
"sigs.k8s.io/yaml"
"helm.sh/helm/v4/internal/fileutil"
"helm.sh/helm/v4/internal/urlutil"
chart "helm.sh/helm/v4/pkg/chart/v2"
"helm.sh/helm/v4/pkg/chart/v2/loader"
"helm.sh/helm/v4/pkg/provenance"
)
// APIVersionV1 is the v1 API version for index and repository files.
const APIVersionV1 = "v1"
var (
// ErrNoAPIVersion indicates that an API version was not specified.
ErrNoAPIVersion = errors.New("no API version specified")
// ErrNoChartVersion indicates that a chart with the given version is not found.
ErrNoChartVersion = errors.New("no chart version found")
// ErrNoChartName indicates that a chart with the given name is not found.
ErrNoChartName = errors.New("no chart name found")
// ErrEmptyIndexYaml indicates that the content of index.yaml is empty.
ErrEmptyIndexYaml = errors.New("empty index.yaml file")
)
// ChartVersions is a list of versioned chart references.
// Implements a sorter on Version.
type ChartVersions []*ChartVersion
// Len returns the length.
func (c ChartVersions) Len() int { return len(c) }
// Swap swaps the position of two items in the versions slice.
func (c ChartVersions) Swap(i, j int) { c[i], c[j] = c[j], c[i] }
// Less returns true if the version of entry a is less than the version of entry b.
func (c ChartVersions) Less(a, b int) bool {View on GitHub (pinned to 2a29f1770b)
Solutions
- Run `helm repo update` and retry — the most common cause is a stale local index
- List what actually exists: `helm search repo <chart> --versions`
- Loosen or correct the constraint (e.g. ^1.2.0 instead of 1.2.0), or reference the exact prerelease version like 2.0.0-rc.1
Example fix
# before helm pull acme/wordpress --version 3.9.9 # after helm repo update && helm search repo acme/wordpress --versions helm pull acme/wordpress --version ^3.7.0
Defensive patterns
Strategy: try-catch
Validate before calling
idx, err := repo.LoadIndexFile(path)
if err != nil { return err }
if _, ok := idx.Entries[name]; ok {
for _, cv := range idx.Entries[name] {
if ok, _ := semver.NewConstraint(want); ok != nil { /* pre-check match */ }
}
} Type guard
func hasVersion(idx *repo.IndexFile, name, ver string) bool {
vs, ok := idx.Entries[name]
if !ok { return false }
c, err := semver.NewConstraint(ver)
if err != nil { return false }
for _, v := range vs {
if s, err := semver.NewVersion(v.Version); err == nil && c.Check(s) { return true }
}
return false
} Try / catch
if _, err := idx.Get(name, version); err != nil {
if errors.Is(err, repo.ErrNoChartVersion) {
// helm repo update, or widen the constraint
}
} Prevention
- Run helm repo update before version-pinned pulls in CI
- Pre-check constraints against the loaded index and report available versions
- Pin exact published versions, not aspirations; include prereleases explicitly
When it happens
Trigger: IndexFile.Get(name, version) where version is a constraint matching no published version, e.g. --version=2.0.0 when only 1.x is indexed; requesting a stable version when only prereleases exist (prereleases are skipped by default resolution); an entry present in Entries but with an empty ChartVersions list.
Common situations: Stale local index after a chart was published (no helm repo update run); typos in the version flag; pinning to a version that was yanked from the repo; expecting a prerelease without specifying it exactly.
Related errors
- no chart version found for %s-%s
- entry not found
- no matching version
- no API version specified
- no chart name found
AI-assisted analysis of helm/helm@2a29f1770b (2026-08-15).
Data as JSON: /api/errors/5c286084523f2139.
Report an issue: GitHub.