# Helm Chart in Kubernetes
A **Helm chart** is Helm's packaging format for Kubernetes applications — it's a collection of files that describe a related set of Kubernetes resources, bundled into a single versioned, shareable unit.
## Definition
> "Helm uses a packaging format called charts. A chart is a collection of files that describe a related set of Kubernetes resources. A single chart might be used to deploy something simple, like a memcached pod, or something complex, like a full web app stack with HTTP servers, databases, caches, and so on." — [Helm docs](https://helm.sh/docs/topics/charts/)
Helm is the package manager for Kubernetes. Instead of writing and maintaining many manifests by hand (Deployments, Services, ConfigMaps, etc.), you package them into one chart that you can **version, share, install, and roll back as a single release** — the way Homebrew/apt/yum treat OS software. ([Introduction to Helm](https://helm.sh/docs/intro/introduction))
## Key concepts (three components)
- **Chart** – the Helm package containing all resource definitions needed to run an app/tool/service.
- **Repository** – where charts are stored and shared (found via Artifact Hub).
- **Release** – a running instance of a chart installed into a cluster. Each `helm install` creates a new release.
([Introduction to Helm](https://helm.sh/docs/intro/introduction))
## Chart file structure
A chart is a directory named after the chart (e.g. `wordpress/`) containing: ([Helm docs](https://helm.sh/docs/topics/charts/))
| Path | Purpose |
|------|---------|
| `Chart.yaml` | Metadata (required) — name, version, apiVersion, etc. |
| `values.yaml` | Default configuration values |
| `templates/` | Templates that render into valid Kubernetes manifests |
| `charts/` | Dependent (sub)charts |
| `crds/` | Custom Resource Definitions |
| `LICENSE`, `README.md`, `values.schema.json`, `templates/NOTES.txt` | Optional |
Helm reserves the `charts/`, `crds/`, and `templates/` directories and the listed filenames.
## Chart.yaml fields
Required fields: `apiVersion`, `name`, `version`. Optional: `kubeVersion`, `description`, `type`, `keywords`, `home`, `sources`, `dependencies`, `maintainers`, `icon`, `appVersion`, `deprecated`, `annotations`. (`apiVersion: v2` is for charts requiring Helm 3+.) ([Helm docs](https://helm.sh/docs/topics/charts/))
## Versioning
Every chart must have a version number, normally following **SemVer 2**. Version numbers act as release markers; packages are identified by name + version (e.g. an nginx chart with `version: 1.2.3` is named `nginx-1.2.3.tgz`). Non-SemVer names are disallowed. ([Helm docs](https://helm.sh/docs/topics/charts/))
## How you use it
- Find charts: `helm search hub` (searches Artifact Hub) or `helm search repo` (searches your added repos).
- Install: `helm install <release-name> <chart>` — e.g. `helm install happy-panda bitnami/wordpress`.
- Helm installs resources in a defined order (Namespace, ConfigMap, Secret, ... Deployment, StatefulSet, Ingress, etc.) and does not wait for all resources to be running before exiting.
([Using Helm](https://helm.sh/docs/intro/using_helm/))
**In short:** a Helm chart is a reusable, versioned package of templated Kubernetes manifests plus default values — the unit Helm uses to install, upgrade, and roll back applications on a cluster.
1navigatehttps://helm.sh/docs/topics/charts/
2navigatehttps://helm.sh/docs/intro/using_helm/
3navigatehttps://helm.sh/docs/intro/
4clickundefined