helm/helm · error

%s charts are not installable

Error message

%s charts are not installable

What it means

checkIfInstallable (pkg/cmd/install.go:364-374) rejects charts whose Chart.yaml `type` is neither empty nor 'application'. Library charts (type: library) provide templates for consumption via the dependencies mechanism and cannot be installed on their own; any other unknown type string is likewise rejected. The comparison is exact and case-sensitive.

Source

Thrown at pkg/cmd/install.go:370

	ri, err := client.RunWithContext(ctx, chartRequested, vals)
	rel, rerr := releaserToV1Release(ri)
	if rerr != nil {
		return nil, rerr
	}
	return rel, err
}

// checkIfInstallable validates if a chart can be installed
//
// Application chart type is only installable
func checkIfInstallable(ch chart.Accessor) error {
	meta := ch.MetadataAsMap()

	switch meta["Type"] {
	case "", "application":
		return nil
	}
	return fmt.Errorf("%s charts are not installable", meta["Type"])
}

// Provide dynamic auto-completion for the install and template commands
func compInstall(args []string, toComplete string, client *action.Install) ([]string, cobra.ShellCompDirective) {
	requiredArgs := 1
	if client.GenerateName {
		requiredArgs = 0
	}
	if len(args) == requiredArgs {
		return compListCharts(toComplete, true)
	}
	return nil, cobra.ShellCompDirectiveNoFileComp
}

View on GitHub (pinned to 2a29f1770b)

Solutions

  1. Install the consuming application chart that declares this library in its dependencies, not the library itself
  2. If the chart is meant to be installable, set `type: application` (or remove the type field) in its Chart.yaml
  3. Check for case typos: the accepted literal is lowercase 'application'

Example fix

# before (library chart)
helm install myrel ./chart
# error: "library" charts are not installable

# after (Chart.yaml of an installable chart)
# before: type: library
# after:  type: application
Defensive patterns

Strategy: type-guard

Type guard

func isInstallableChart(ch chart.Accessor) bool {
    t := ch.MetadataAsMap()["Type"]
    switch t {
    case "", "application":
        return true
    }
    return false // e.g. "library" or unknown types
}

Prevention

When it happens

Trigger: `helm install myrel ./chart` where the chart's Chart.yaml has `type: library`; a typo'd type such as `Application` (capital A) or `app` — the switch only matches "" and "application".

Common situations: Trying to install a shared helper/library chart directly instead of the application chart that depends on it; hand-edited Chart.yaml with an incorrect type value; upstream charts that change their type between versions.

Related errors


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