Helm 4 Full Changelog
Scope: 568 PRs from (v4.3.0) compared to v3.19.0
v4-only: 531 PRs (37 backported to v3 excluded)
See the Overview for an actionable summary of these changes.
New Features
New features in Helm 4 that were not backported to v3
| PR | Date | Author | Title |
|---|---|---|---|
| #31580 | 2026-08-07 | biagiopietro | feat(rollback): add --description flag to provide rollback reason |
| #32162 | 2026-07-15 | lohitkolluri | feat: honor SOURCE_DATE_EPOCH for chart archives |
| #31859 | 2026-06-18 | biagiopietro | feat(history): add rollback revision column to helm history output |
| #32205 | 2026-06-11 | ogulcanaydogan | feat(engine): add debug logging when lookup returns empty |
| #31695 | 2026-05-10 | aeroyorch | feat: Add duration functions |
| #31709 | 2026-02-13 | banjoh | feat(release): add internal/release/v2 package for chart v3 support |
| #31592 | 2026-02-06 | banjoh | feat(create): add --chart-api-version flag (when HELM_EXPERIMENTAL_CHART_V3 env var is set) |
| #31726 | 2026-01-14 | banjoh | chore: clarify --wait flag help text |
| #31706 | 2026-01-12 | matheuscscp | pkg/kube: introduce support for custom kstatus readers |
| #31296 | 2025-12-23 | gjenkins8 | build: set kube version via debug.BuildInfo |
| #31448 | 2025-12-17 | laervn | feat(repo): add --no-headers option to 'helm repo list' |
| #31491 | 2025-11-25 | benoittgt | feat: improve plugin name validation error messages and field name detection (v1) |
| #31530 | 2025-11-20 | shuv0id | feat: add missing context to debug logs |
| #31421 | 2025-11-15 | benoittgt | Unify --wait strategy inputs, clarify defaults and docs; avoid SDK timeout footgun |
| #30984 | 2025-11-13 | fm1ck3y | feat(concurrency): allow concurrent dependency build with atomic file write |
| #31435 | 2025-11-03 | matheuscscp | Introduce a context for canceling wait operations |
| #31389 | 2025-10-30 | TerryHowe | chore: fix pkg/registry warnings to reduce noise |
| #31338 | 2025-10-21 | yzewei | Add loongarch64 support |
| #31351 | 2025-10-21 | gjenkins8 | feat: helm version print Kubernetes (client-go) version |
| #31376 | 2025-10-21 | benoittgt | Do not ignore *.yml file on linting while accepting *.yaml |
| #31362 | 2025-10-21 | fabiocarneiro | Clarify the intent of the resource instructions |
| #31392 | 2025-10-16 | TerryHowe | feature: create copilot structured context |
| #31295 | 2025-10-13 | TerryHowe | Fix make helm list show all by default |
| #31372 | 2025-10-10 | mattfarina | Enable Releases To Have Multiple Versions |
| #31254 | 2025-09-23 | benoittgt | Warn when we fallback to a different version on helm pull |
| #31275 | 2025-09-10 | benoittgt | Extend --skip-schema-validation for lint command |
| #31116 | 2025-09-02 | banjoh | chore: check if go modules are tidy before build |
| #31217 | 2025-09-01 | scottrigby | BREAKING CHANGE: [HIP-0026] Move Postrenderer to a plugin type |
| #31196 | 2025-08-31 | scottrigby | BREAKING CHANGE: [HIP-0026] Remove unnecessary file i/o operations from signing and verifying |
| #31176 | 2025-08-30 | scottrigby | BREAKING CHANGE: [HIP-0026] Plugin packaging, signing, and verification |
| #31194 | 2025-08-28 | gjenkins8 | BREAKING CHANGE: [HIP-0026] Plugin extism/v1 runtime |
| #30812 | 2025-08-27 | gjenkins8 | BREAKING CHANGE: HIP-0023: Helm support server-side apply |
| #31174 | 2025-08-26 | scottrigby | BREAKING CHANGE: [HIP-0026] Plugin tarball support for HTTP and local installers |
| #31172 | 2025-08-26 | scottrigby | BREAKING CHANGE: [HIP-0026] Plugin OCI installer |
| #31146 | 2025-08-23 | scottrigby | BREAKING CHANGE: [HIP-0026] Plugin types and plugin apiVersion v1 |
| #31145 | 2025-08-22 | scottrigby | BREAKING CHANGE: [HIP-0026] Plugin runtime interface |
| #31142 | 2025-08-21 | gjenkins8 | BREAKING CHANGE: [HIP-0026] Move pkg/plugin -> internal/plugin |
| #31030 | 2025-08-14 | gjenkins8 | BREAKING CHANGE: HIP-0023: Kube client support server-side apply |
| #12624 | 2025-08-13 | papdaniel | show crds command output separated by document separator |
| #13111 | 2025-08-13 | rawtaz | style(pkg/chartutil): add missing dots and indentation to defaultValues |
| #31076 | 2025-08-11 | matheuscscp | pkg/registry: Login option for passing TLS config in memory |
| #31034 | 2025-08-05 | Mazafard | Feat: Add color output functionality and tests for release statuses |
| #31057 | 2025-07-18 | danilobuerger | Pass credentials when either chart repo or repo dont specify a port but it matches the default port of that scheme |
| #31019 | 2025-07-17 | zachburg | Return early when linting if the templates/ directory does not exist |
| #31011 | 2025-07-17 | yalosev | feature: add labels to metadata |
| #31015 | 2025-07-17 | zachburg | Add linter support for the crds/ directory |
| #13154 | 2025-07-10 | carloslima | Allow post-renderer to process hooks |
| #13586 | 2025-06-04 | jessesimpson36 | feat: add formatting for errors to make multiline stacktraces in helm templates |
| #30553 | 2025-05-07 | Zhanweelee | feat: Add mustToYaml and mustToJson template functions |
| #30734 | 2025-04-21 | ipaqsa | feat(pkg/engine): add support for custom template funcs |
| #13283 | 2025-04-14 | win-t | adding support for JSON Schema 2020 |
| #30751 | 2025-04-13 | benoittgt | Add detailed debug logging for resource readiness states |
| #30708 | 2025-04-11 | benoittgt | Migrate pkg to slog |
| #13604 | 2025-04-05 | AustinAbro321 | Introduce kstatus watcher |
| #13617 | 2025-02-27 | AustinAbro321 | BREAKING CHANGE: Refactor cmd/helm to allow library usage |
| #30571 | 2025-02-24 | yardenshoham | feat: error out when post-renderer produces no output |
| #13655 | 2025-02-20 | lubingtan | feat: support multi-document values files |
| #13471 | 2025-02-19 | wangjingcun | Use a more direct and less error-prone return value |
| #30294 | 2025-02-19 | Zhanweelee | Supports json arguments |
| #13538 | 2025-01-17 | godhanipayal | Add Contextual Error Messages to RunWithContext |
| #12588 | 2024-11-22 | rynowak | Make the authorizer and registry authorizer configurable |
Bug Fixes
Fixes in Helm 4 that were not backported to v3
| PR | Date | Author | Title |
|---|---|---|---|
| #32217 | 2026-08-31 | amarkdotdev | fix(template): regression - route registry messages to stderr in template and show |
| #31748 | 2026-08-31 | benoittgt | refactor: remove per-file decompression size limit |
| #32525 | 2026-08-18 | locker95 | fix(loader): do not drop values files ending at a 4096-byte boundary |
| #32400 | 2026-07-22 | SetagGnaw | fix: pass registry client to downloader.Manager in upgrade |
| #32290 | 2026-07-16 | mahesh-sadupalli | fix(engine): prevent Files.Lines panic on empty file |
| #32327 | 2026-07-15 | matheuscscp | Fix vanishing empty lines |
| #31884 | 2026-07-14 | ouillie | Properly format the extra field in gzipped packages |
| #32088 | 2026-07-14 | Kajot-dev | Fix missing conflict retry with server-side apply |
| #31211 | 2026-07-03 | kimsungmin1 | fix: set [pull,push] scope when helm push to a registry(use token auth) - v4 |
| #32184 | 2026-06-18 | atkrad | fix panic on repeated IsReachable calls |
| #32129 | 2026-06-18 | gregory-m | fix: skip non-Pods when fetching test logs |
| #32230 | 2026-06-17 | gjenkins8 | Revert "fix(kube): prevent spurious early exit in WaitForDelete during informer sync" |
| #32136 | 2026-06-17 | SebTardif | fix(provenance): check error return in Digest and encodeRelease |
| #31185 | 2026-06-14 | kyokuping | fix: Improve error reporting for helm template --debug with --show-only |
| #31925 | 2026-06-11 | TerryHowe | fix: protect FailingKubeClient.RecordedWaitOptions from data race |
| #32056 | 2026-06-11 | TerryHowe | fix: route registry client output to stdout instead of stderr |
| #31758 | 2026-06-09 | benoittgt | fix: prevent warning when using version range constraints |
| #32081 | 2026-05-30 | TerryHowe | fix(kube): prevent spurious early exit in WaitForDelete during informer sync |
| #32134 | 2026-05-21 | lexfrei | fix (internal/plugin): remove zero-width spaces from plugin name comment |
| #32128 | 2026-05-16 | matheuscscp | fix(upstream): upgrade to cli-utils 1.2.1, controller-runtime 0.24.1 and k8s 1.36.1 |
| #32099 | 2026-05-11 | SebTardif | fix: fetch logs from all containers in test pods |
| #31755 | 2026-04-26 | scottrigby | fix(template): deprecate unused --hide-notes and --render-subchart-notes flags |
| #31868 | 2026-03-09 | matheuscscp | fix: insert newline after doc separators glued to content by template trimming |
| #31897 | 2026-03-09 | TerryHowe | fix: bump fluxcd/cli-utils to v0.37.2-flux.1 |
| #31901 | 2026-03-04 | tleed5 | fix: restore (deprecated) --atomic flag on install command for backwards compatibility |
| #31852 | 2026-02-25 | rohansood10 | fix(sdk): correct import comment in statuswait.go from v3 to v4 |
| #31563 | 2026-02-24 | Mujib-Ahasan | fix: --dry-run=server now respect generateName |
| #31601 | 2026-02-20 | banjoh | fix: handle OCI digest algorithm prefix in chart downloader |
| #31566 | 2026-02-19 | TerryHowe | fix: test concurrency download index |
| #31578 | 2026-02-11 | manute | fix(action): crd resources can be empty |
| #31128 | 2026-02-11 | orgads | fix(downloader): prevent concurrent file access errors on Windows |
| #31772 | 2026-01-29 | matheuscscp | Revert "Consider GroupVersionKind when matching resources" |
| #31751 | 2026-01-28 | tamcore | fix(copystructure): handle nil elements in slice copying |
| #31717 | 2026-01-23 | AustinAbro321 | fix: use kube logger with status waiter |
| #31735 | 2026-01-21 | matheuscscp | fix(kstatus): fine-grained context options for waiting |
| #31730 | 2026-01-19 | matheuscscp | bugfix(kstatus): do not wait forever on failed resources |
| #31732 | 2026-01-17 | matheuscscp | fix(defaults): server-side apply SDK defaults should always match the CLI defaults |
| #31412 | 2026-01-13 | fmuyassarov | Fix rollback for missing resources |
| #31710 | 2026-01-09 | banjoh | fix(release): fix test compilation error |
| #31427 | 2026-01-09 | tisonkun | Check plugin name is not used |
| #31579 | 2026-01-09 | benoittgt | fix: Delay test hook deletion until after logs are retrieved with helm test release --logs |
| #31613 | 2026-01-07 | aslafy-z | fix(getter): pass settings environment variables |
| #31104 | 2025-12-25 | LinPr | fix: assign KUBECONFIG environment variable value to env.Kubeconfig |
| #31610 | 2025-12-22 | mohsenmottaghi | fix: use namespace-scoped watching to avoid cluster-wide LIST permiss… |
| #31635 | 2025-12-14 | banjoh | fix(upgrade): pass --server-side flag to install when using upgrade --install |
| #12564 | 2025-12-13 | hiddeco | fix(uninstall): supersede deployed releases |
| #31586 | 2025-12-13 | calvinbui | fix: use length check for MetaDependencies instead of nil comparison |
| #31636 | 2025-12-11 | mattfarina | Use latest patch release of Go in releases |
| #31560 | 2025-11-23 | mattfarina | Fix kube client logging |
| #31518 | 2025-11-21 | gjenkins8 | fix: Use server-side apply for object create during update |
| #31515 | 2025-11-21 | gjenkins8 | fix: Copy adopted resource info |
| #31514 | 2025-11-19 | yxxhero | Refactor environment variable expansion in PrepareCommands and update tests |
| #31512 | 2025-11-15 | benoittgt | fix: correct LDFLAGS path for default Kubernetes version |
| #11739 | 2025-11-14 | Fish-pro | docs: fix syntax errors in the document |
| #31418 | 2025-11-10 | tisonkun | chore: fix typo of public field |
| #31323 | 2025-10-29 | mattfarina | Reproducible chart archive builds |
| #31411 | 2025-10-29 | banjoh | fix: reinstate logger parameter to actions package |
| #31204 | 2025-10-22 | benoittgt | Avoid panic in helm.sh/helm/v3/pkg/chartutil.ValidateAgainstSchema |
| #31337 | 2025-10-22 | rachelvweber | Fixing rollback and uninstall client WaitStrategy |
| #31393 | 2025-10-21 | benoittgt | Return errors during upgrade when the deletion of resources fails |
| #31406 | 2025-10-21 | jessesimpson36 | fix: kube client should return empty results objects instead of nil |
| #31375 | 2025-10-13 | TerryHowe | fix: release info time parsing |
| #31349 | 2025-10-07 | TerryHowe | fix: flakey lint test on shuffle |
| #31327 | 2025-10-07 | TerryHowe | fix: broken --html flag to coverage script |
| #31354 | 2025-10-07 | TerryHowe | fix: flake upgrade test |
| #31227 | 2025-10-03 | evankanderson | Use filepath.Path when handling directory names |
| #31307 | 2025-10-02 | TerryHowe | fix: Ignore absolute path when RepoUrl is provided |
| #31334 | 2025-09-30 | fleaz | Fix typo in bug-report issue template |
| #31330 | 2025-09-25 | mattfarina | Restore lint rule for excluding meaningless name |
| #31320 | 2025-09-25 | kosiew | provenance: allow RSA signing when ed25519 keys are present (switch to ProtonMail/go-crypto) |
| #31285 | 2025-09-12 | bennsimon | fix: remove leftover debugging line that outputs invalid YAML for helm template command |
| #31277 | 2025-09-11 | benoittgt | Fix deprecation warning for spf13/pflag from 1.0.7 to 1.0.10 |
| #31272 | 2025-09-09 | TerryHowe | fix: idea gitignore entry |
| #31252 | 2025-09-05 | kamilswiec | fix:chartfile tests - semver2 error message |
| #31199 | 2025-09-05 | TerryHowe | fix: flaky registry data race on mockdns close |
| #31200 | 2025-09-05 | TerryHowe | fix: installer action goroutine count |
| #31222 | 2025-09-03 | benoittgt | Prevent failing helm push on ghcr.io using standard GET auth token flow |
| #31191 | 2025-08-26 | TerryHowe | fix: send logging to stderr |
| #31138 | 2025-08-19 | islewis | fix(helm-lint): Add HTTP/HTTPS URL support for json schema references |
| #31152 | 2025-08-18 | TerryHowe | fix: enable shuffle in Makefile for unit tests |
| #12968 | 2025-08-13 | sjeandeaux | helm uninstall dry run support --ignore-not-found |
| #31126 | 2025-08-12 | paologallinaharbur | fix(transport): leverage same tls config |
| #31109 | 2025-08-06 | carlossg | fix: prevent panic when ChartDownloader.getOciURI |
| #31074 | 2025-07-18 | joejulian |