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
- Install the consuming application chart that declares this library in its dependencies, not the library itself
- If the chart is meant to be installable, set `type: application` (or remove the type field) in its Chart.yaml
- 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
- Guard automated pipelines with the isInstallableChart check and route library charts to their parent application chart
- Use the exact lowercase literal `type: application` in Chart.yaml
- Never point install automation at a charts/*/ dependency directory
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
- an error occurred while checking for chart dependencies. You
- failed reloading chart after repo update: %w
- plugin already exists
- ErrPluginNotADirectory
- must either provide a name or specify --generate-name
AI-assisted analysis of helm/helm@2a29f1770b (2026-08-15).
Data as JSON: /api/errors/2ce2ebc8c047f57a.
Report an issue: GitHub.