What's Inside a Chart
When you create or download a Helm Chart, it follows a standard directory structure. Understanding this structure lets you read, modify, and create charts confidently.
my-app/
├── Chart.yaml # Chart metadata (name, version, dependencies)
├── values.yaml # Default configuration values
├── charts/ # Dependency charts (subcharts) stored here
├── templates/ # Kubernetes manifest templates
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── ingress.yaml
│ ├── _helpers.tpl # Reusable template snippets (not rendered directly)
│ └── NOTES.txt # Post-install instructions printed to the user
└── .helmignore # Files to exclude when packaging the chart
Key Files Explained
Chart.yaml — The identity card of the chart: its name, description, a version (the chart's own version) and an appVersion (the version of the software the chart deploys) — these are independent, so a chart can be at version 1.4.2 while packaging application version 2.1.0 — plus any chart dependencies it declares.
_helpers.tpl — This file contains named template snippets that can be reused across multiple template files. It's a Go template file that starts with an underscore, which tells Helm not to render it directly as a Kubernetes manifest. A common pattern is defining a helper that generates a consistent set of labels once, then including it in every template that needs them — so every resource in the chart gets identical labels without the label block being copy-pasted into every file.
NOTES.txt — After a successful install or upgrade, Helm renders this file and prints it to the terminal. It's used to give the user actionable next steps, like how to get the application's URL or retrieve a generated password. This is the text you see after running helm install.
Interviewers sometimes ask: "How do you scaffold a new Helm Chart?" The answer is helm create my-chart, which generates a complete, working chart directory with all the standard files pre-populated with a sample Nginx deployment. It's the fastest way to start a new chart and ensures you follow the standard structure. From there, you modify the templates and values to match your application.