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

  1. Run `helm repo update` and retry — the most common cause is a stale local index
  2. List what actually exists: `helm search repo <chart> --versions`
  3. 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

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


AI-assisted analysis of helm/helm@2a29f1770b (2026-08-15). Data as JSON: /api/errors/5c286084523f2139. Report an issue: GitHub.