{"record":{"id":"2ce2ebc8c047f57a","repo":"helm/helm","slug":"s-charts-are-not-installable","errorCode":null,"errorMessage":"%s charts are not installable","messagePattern":"(.+?) charts are not installable","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/cmd/install.go","lineNumber":370,"sourceCode":"\tri, err := client.RunWithContext(ctx, chartRequested, vals)\n\trel, rerr := releaserToV1Release(ri)\n\tif rerr != nil {\n\t\treturn nil, rerr\n\t}\n\treturn rel, err\n}\n\n// checkIfInstallable validates if a chart can be installed\n//\n// Application chart type is only installable\nfunc checkIfInstallable(ch chart.Accessor) error {\n\tmeta := ch.MetadataAsMap()\n\n\tswitch meta[\"Type\"] {\n\tcase \"\", \"application\":\n\t\treturn nil\n\t}\n\treturn fmt.Errorf(\"%s charts are not installable\", meta[\"Type\"])\n}\n\n// Provide dynamic auto-completion for the install and template commands\nfunc compInstall(args []string, toComplete string, client *action.Install) ([]string, cobra.ShellCompDirective) {\n\trequiredArgs := 1\n\tif client.GenerateName {\n\t\trequiredArgs = 0\n\t}\n\tif len(args) == requiredArgs {\n\t\treturn compListCharts(toComplete, true)\n\t}\n\treturn nil, cobra.ShellCompDirectiveNoFileComp\n}\n","sourceCodeStart":352,"sourceCodeEnd":384,"githubUrl":"https://github.com/helm/helm/blob/2a29f1770b62844b27197d2507377361d45ad7c0/pkg/cmd/install.go#L352-L384","documentation":"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.","triggerScenarios":"`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\".","commonSituations":"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.","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'"],"exampleFix":"# before (library chart)\nhelm install myrel ./chart\n# error: \"library\" charts are not installable\n\n# after (Chart.yaml of an installable chart)\n# before: type: library\n# after:  type: application","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"func isInstallableChart(ch chart.Accessor) bool {\n    t := ch.MetadataAsMap()[\"Type\"]\n    switch t {\n    case \"\", \"application\":\n        return true\n    }\n    return false // e.g. \"library\" or unknown types\n}","tryCatchPattern":null,"preventionTips":["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"],"tags":["charts","library-chart","install","chart-metadata"],"backgroundTag":null,"analyzedSha":"2a29f1770b62844b27197d2507377361d45ad7c0","analyzedAt":"2026-08-15T22:02:47.490Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}