Changelog
2026-06-02
Standard
Ingress TLS smart defaults:
tls:now accepts four forms.tls:(null) ortls: trueauto-derives hosts fromingress.hostsand setssecretNameto<fullname>-tls— the bare key is enough to get cert-manager to pick up the ingress. List mode and dict mode each merge entries with the same defaults, so omittedhostsandsecretNamefields are filled in automatically.tls: false,tls: [], andtls: {}explicitly suppress the TLS block (clear convention).Ingress service lookup nil guard: Rendering an ingress with no services defined no longer panics with "invalid value; expected string".
app.kubernetes.io/namenow reflects the application, not the chart: When using thestandardchart directly withoutnameOverride, thenamelabel now uses the Helm release name instead of the meaningless valuestandard. SetnameOverride: backend(or your app name) invalues.yamlto get a stable application identity across all environments.nameOverrideenables per-branch uniqueness in shared namespaces:nameOverrideaffects both theapp.kubernetes.io/namelabel and the resource name suffix. WithnameOverride: backendand releasefeat-xyz, resources are namedfeat-xyz-backend— unique per branch, stable app identity. In production where release equals the app name, deduplication produces justbackend.Ingress service fallback is now deterministic: When no service matches the ingress name, the fallback now always selects the alphabetically first service rather than relying on Go map iteration order.
2026-06-01
Standard
volumesdict mode:volumes:now supports the same dict/list duality asenv,envFrom, andvolumeMounts. Dict keys are injected as thenamefield; list-mode passes through unchanged. Previously, a dict value produced invalid Kubernetes YAML (a map instead of a sequence). Default changed from{}to[].test-connectionrespectsenabled: false: The Helm test pod was generated for every service regardless ofenabled: false. It now skips disabled services.extraManifests: Render arbitrary Kubernetes resources alongside the chart's own output. Dict mode (recommended) automatically injectsmetadata.name,metadata.namespace, and standard labels — using the same naming rules as other resources, with user-provided metadata winning over auto-injected values. List mode passes resources through raw withtplrendering for full control. Useful for NetworkPolicies, ExternalSecrets, ClusterRoles, BackendConfigs, or anything the chart does not natively support.
2026-05-31
Standard
initContainersandsidecarContainersconfigure is opt-in: Both container types now use an emptyconfigure: {}by default — no auto-mounting of variables, secrets, files, or PVCs unless explicitly enabled on the container. Regular containers continue to inherit the pod/global configure. Use Jobs withhelm.sh/hookfor tasks like DB migrations that need app config; they run once per Helm operation rather than on every pod restart.volumeMountsdict key as name: WhenvolumeMountsis specified as a dict, the key is now injected as thenamefield (matching the behaviour ofenvandenvFrom). List-stylevolumeMountscontinues to pass through unchanged.configure.env: Renamed from the undocumentedconfigure.environmentand now implemented. Setconfigure.env: falseon a container to suppress the globalenvlist from being applied. Container- and pod-levelenvare always respected regardless of this flag.Ingress port name: The backend port name in generated Ingress rules is now resolved directly from the service port map keys instead of relying on a side-effect mutation from
service.yaml. No change in rendered output.volumeMountsguard: ThevolumeMounts:section no longer renders when all auto-mount flags (configure.files,configure.secretFiles) are disabled and no explicit mounts are defined, preventing an emptyvolumeMounts: nullkey in the container spec.Nil pointer fix:
deployment,cronJob, andjobentries with a null value (e.g.deployments: { app: }) no longer crash. The null-guard merge now runs before theenabledcheck in all three templates.standard.fullname: The chart namestandardis now treated as a transparent wrapper. Resources no longer get a-standardsuffix when the chart is used directly; the release name is used as the full name instead. All dependent charts that setchartNameare unaffected.ingress:: Single-ingress shorthand. Setingress.hosts,ingress.className,ingress.annotations, andingress.tlsdirectly — injected intoingressesusing the release name as key.service:: Single-service shorthand. Setservice.portsdirectly — injected intoservicesusing the release name as key.deployment:: Single-deployment shorthand. Setdeployment.containers,deployment.replicaCount, etc. directly — injected intodeploymentsusing the release name as key.
2026-04-15
Standard
deployments[].autoscaling: Reworked HPA support to useautoscaling/v2. ThescaleTargetRefis automatically populated from the deployment context. Defaults:minReplicas: 1,maxReplicas: 10. Addedenabledflag to disable the HPA while keeping the config. Supports fullmetricslist (passed through), shorthandtargetCPUUtilizationPercentage/targetMemoryUtilizationPercentage, andbehavior(scaleUp/scaleDown policies).