# Helm Chart Structure Standards
## Rule
Every Helm chart MUST include Chart.yaml, values.yaml, templates/_helpers.tpl, templates/NOTES.txt, and README.md. All resources MUST use template helpers for names and labels.
## Required File Structure
```
mychart/
├── Chart.yaml # REQUIRED: Chart metadata
├── values.yaml # REQUIRED: Default values
├── values.schema.json # RECOMMENDED: JSON schema
├── README.md # REQUIRED: Documentation
├── templates/
│ ├── _helpers.tpl # REQUIRED: Template helpers
│ ├── NOTES.txt # REQUIRED: Post-install notes
│ ├── deployment.yaml # Application resources
│ ├── service.yaml
│ ├── ingress.yaml
│ └── tests/
│ └── test-connection.yaml
└── charts/ # Dependencies (if any)
```
## Chart.yaml Requirements
```yaml
apiVersion: v2
name: myapp
description: A Helm chart for MyApp
type: application
version: 1.0.0 # Chart version (semver)
appVersion: "2.1.0" # Application version
maintainers:
- name: platform-team
email: platform@mycompany.com
```
## Good Examples
```yaml
# All resources use helpers
metadata:
name: {{ include "myapp.fullname" . }}
labels:
{{- include "myapp.labels" . | nindent 4 }}
```
## Bad Examples
```yaml
# BAD: Hardcoded names and labels
metadata:
name: myapp-deployment
labels:
app: myapp
version: "1.0"
# BAD: Missing NOTES.txt, _helpers.tpl, or README
```
## Enforcement
- helm lint (validates chart structure)
- ct (chart-testing) in CI pipeline
- kubeconform for rendered manifest validation
- Code review checklist for chart structure compliance