Helm v4.1.0 is a feature release. Users are encouraged to upgrade for the best experience.
The community keeps growing, and we'd love to see you there!
- Join the discussion in Kubernetes Slack:
- for questions and just to hang out
- for discussing PRs, code, and bugs
- Hang out at the Public Developer Call: Thursday, 9:30 Pacific via Zoom
- Test, debug, and contribute charts: ArtifactHub/packages
Notable Changes
- Feature: added chart name to dependency logs, namespace to resource waiting logs, and confirmation message when all resources are ready [#31530]
- Feature: improved plugin name validation error messages and field name detection [#31491]
- Feature: improved the --wait flag by allowing explicit strategy selection (including explicit --wait=hookOnly) and preventing SDK timeout errors when timeout is not specified [#31421]
- Feature: allow concurrent dependency build with atomic file write [#30984]
- Feature: added a --no-headers flag to the 'helm repo list' command, allowing users to suppress table headers in the output. Useful for scripting and automation [#31448]
- SDK feature: added a LoadArchive to common loader [#31462]
- SDK feature: introduced support for custom kstatus readers [#31706]
- Fixed bug where a plugin name could already be used by another command [#31427]
- Fixed bug where --server-side flag was not passed to install when using upgrade --install [#31635]
- Fixed bug where HELM_ environment variables were not passed to plugins. this fixes a regression which was blocking some getter plugins [#31613]
- Fixed bug where Helm test --logs failed with hook-delete-policy "hook-failed" or "hook-succeed" [#31579]
- Fixed kube client logging issue [#31560]
- Fixed regression where vendor-specific suffixes were stripped from .Capabilities.KubeVersion.GitVersion, breaking charts that detect managed Kubernetes platforms [#31528]
- Fixed a bug where helm uninstall with --keep-history did not suspend previous deployed releases [#12564]
- SDK: bump k8s API versions to v0.35.0
- docs: updated
helm templatehelp text to document --api-versions [#31683] - docs: fixed documentation about default wait strategy
Installation and Upgrading
Download Helm v4.1.0. The common platform binaries are here:
- MacOS amd64 (checksum / a326073ae392bed8b73c415d1d9d6880b0f5accb18aa9456975562b44a87c650)
- MacOS arm64 (checksum / f12e2723c5e8eaff3e4b3670536867289fb6ab7f797fa2efedd1c53cfaca62fb)
- Linux amd64 (checksum / 8e7ae5cb890c56f53713bffec38e41cd8e7e4619ebe56f8b31cd383bfb3dbb83)
- Linux arm (checksum / e3aa65aded232adb56fc5b5bdd034f5ad5fa501ab0f68099d15abd93133e6006)
- Linux arm64 (checksum / 81315e404b6d09b65bee577a679ab269d6d44652ef2e1f66a8f922b51ca93f6b)
- Linux i386 (checksum / 1a7ca55d28f11cb15c5c482a29db6781a6cc75ac62e5d38447377a4987c5b9b9)
- Linux loong64 (checksum / <Error>
BlobNotFound<Message>The specified blob does not exist. RequestId:4a82a5e5-801e-006f-411a-8bffc7000000 Time:2026-01-21T21:10:33.0504029Z</Message></Error>) - Linux ppc64le (checksum / 6cb5ad5fb790e63056b71210f0a50566f4faf85709a49f17407c331f6923db56)
- Linux s390x (checksum / 109a32040f7325ef44234c594a1b7883b94ce37ba1f0ca7c5fa8452254bd71b8)
- Linux riscv64 (checksum / 944cfc9aea67db27eb46e52126ca4acee0cd416f0314369bf3364c77a13a7803)
- Windows amd64 (checksum / 48b527c52c0ea4b33436536b4accefc2cfe1665f6f0520c5b72e478338551833)
- Windows arm64 (checksum / 257f3ff25187d66208d08cabf063df7245ed72430436d7ca971ff9bd3fe0bc64)
This release was signed with 208D D36E D5BB 3745 A167 43A4 C7C6 FBB5 B91C 1155 and can be found at @scottrigby keybase account. Please use the attached signatures for verifying this release using gpg.
The Quickstart Guide will get you going from there. For upgrade instructions or detailed installation notes, check the install guide. You can also use a script to install on any system with bash.
What's Next
- 4.1.1 and 3.20.1 are the next patch releases, scheduled for March 11, 2026
- 4.2.0 and 3.21.0 are the next minor releases, scheduled for May 13, 2026
Changelog
- Update pkg/kube/statuswait.go [f46f1c] (Evans Mungai)
- pkg/kube: introduce support for custom kstatus readers [59ece9] (Matheus Pimenta)
- chore(deps): bump golang.org/x/term from 0.38.0 to 0.39.0 [de0bec] (dependabot[bot])
- chore(deps): bump golang.org/x/text from 0.32.0 to 0.33.0 [46e526] (dependabot[bot])
- fix(release): fix test compilation error [e751a7] (Evans Mungai)
- Suppress SC2154 without changing behavior [9125b8] (Sarfraj Khan)
- chore(deps): bump github.com/foxcpp/go-mockdns from 1.1.0 to 1.2.0 [0e0c02] (dependabot[bot])
- Lint sync-repo.sh with ShellCheck [d4a278] (sarfraj89)
- chore: move Evans Mungai from triage to maintainers [fd090c] (Evans Mungai)
- Replace reflect.Ptr with reflect.Pointer [2d6d9c] (Mads Jensen)
- fix: typo in the function names [138f73] (Gergely Brautigam)
- Add documentation for --api-versions flag in template command [c7cc77] (majiayu000)
- Fixing failing tests for cli-tools update [fe1c74] (Matt Farina)
- chore(deps): bump github.com/fluxcd/cli-utils [5e8269] (dependabot[bot])
- Replace deprecated
NewSimpleClientset[a15db7] (George Jenkins) - docs(README): add mise alternate installation documentation [04198d] (jylenhof)
- enable exhaustive linter [9a898a] (Brenden Ehlers)
- fix: add default casess to switch statements [1c119b] (Brenden Ehlers)
- build: set kube version via
debug.BuildInfo[c6d9a5] (Branch Vincent) - chore(deps): bump github.com/tetratelabs/wazero from 1.10.1 to 1.11.0 [97cde7] (dependabot[bot])
- chore(deps): bump github.com/BurntSushi/toml from 1.5.0 to 1.6.0 [912314] (dependabot[bot])
- doc: update based on review suggestion [55a4ae] (Deepak Chethan)
- test(statuswait): fix Copilot code review suggestion for goroutine in tests [d6b35c] (Mohsen Mottaghi)
- test(statuswait): add more tests suggested by Copilot code review [a1543d] (Mohsen Mottaghi)
- test(statuswait): add some tests for statuswait [dd44f4] (Mohsen Mottaghi)
- fix: use namespace-scoped watching to avoid cluster-wide LIST permissions [3dd54e] (Mohsen Mottaghi)
- fix(doc): Update default wait strategy [f92ae1] (Deepak)
- Update to use slog [977203] (tison)
- Fix TestCliPluginExitCode [3c6557] (tison)
- Check plugin name is not used [5196b8] (tison)
- chore(deps): bump github.com/fluxcd/cli-utils [364a7a] (dependabot[bot])
- Fix
TestConcurrencyDownloadIndextypo [592815] (George Jenkins) - Use errors.Is to check for io.EOF and gzip.ErrHeader [a490bb] (Mads Jensen)
- chore(deps): bump actions/upload-artifact from 4.6.2 to 6.0.0 [09ae0d] (dependabot[bot])
- chore(deps): bump the k8s-io group with 7 updates [1f8e84] (dependabot[bot])
- chore(deps): bump golang.org/x/crypto from 0.45.0 to 0.46.0 [e9a051] (dependabot[bot])
- chore: fix some comments to improve readability [858cf3] (wangjingcun)
- chore(deps): bump golang.org/x/text from 0.31.0 to 0.32.0 [7fb172] (dependabot[bot])
- feat: move TerryHowe triage to maintainers [e900a2] (Terry Howe)
- Use latest patch release of Go in releases [8f636b] (Matt Farina)
- chore(deps): bump github.com/rubenv/sql-migrate from 1.8.0 to 1.8.1 [ea52f8] (dependabot[bot])
- fix(upgrade): pass --server-side flag to install when using upgrade --install [2dc581] (Evans Mungai)
- chore(deps): bump github.com/spf13/cobra from 1.10.1 to 1.10.2 [a9bbff] (dependabot[bot])
- chore(deps): bump golang.org/x/term from 0.37.0 to 0.38.0 [d195cf] (dependabot[bot])
- Run the vulnerability check on PR that change the file [24a825] (Matt Farina)
- Fix govulncheck in CI [bc9462] (Matt Farina)
- Update the govulncheck.yml to run on change [b825a1] (Matt Farina)
- Enable the sloglint linter [a18e59] (Mads Jensen)
- fix(cli): handle nil config in EnvSettings.Namespace() [853466] (Zadkiel AHARONIAN)
- fix(getter): pass settings environment variables [119341] (Zadkiel AHARONIAN)
- fixes comment in install.go [a109ac] (Stephanie Hohenberg)
- chore(deps): bump actions/stale from 10.1.0 to 10.1.1 [581ab1] (dependabot[bot])
- chore(deps): bump golangci/golangci-lint-action from 9.1.0 to 9.2.0 [e62bf7] (dependabot[bot])
- fixes tests after merge [2f598f] (Stephanie Hohenberg)
- fixes lint issue [bb9356] (Stephanie Hohenberg)
- updates tests after rebase from master [8cf4ad] (Stephanie Hohenberg)
- Add tests to action package to improve coverage [31131c] (Stephanie Hohenberg)
- chore(deps): bump actions/checkout from 6.0.0 to 6.0.1 [e6b206] (dependabot[bot])
- Inform we use a different golangci-lint version than the CI [faa891] (Benoit Tigeot)
- Deal with golint warning with private executeShutdownFunc [45c5f3] (Benoit Tigeot)
- Use length check for MetaDependencies instead of nil comparison [b33d4a] (Calvin Bui)
- Code review [70fc5f] (Benoit Tigeot)
- Fix linting issue [9f1c8a] (Benoit Tigeot)
- Update pkg/action/hooks.go [6bb5bc] (Michelle Fernandez Bieber)
- added check for nil shutdown [d93014] (Michelle Fernandez Bieber)
- cleaned up empty line [7a61eb] (Michelle Fernandez Bieber)
- updated comment and made defer of shutdown function return errors as before and not the possible shutdown error [107147] (Michelle Fernandez Bieber)
- added shutdown hook that is executed after the logs have been retrieved [7a5575] (Michelle Fernandez Bieber)
- chore: fix typo in pkg/downloader/chart_downloader.go [e71a29] (megha1906)
- Bump required go version (
go.modversion) [b85916] (George Jenkins) - Use modernize to use newer Golang features. [6cceea] (Mads Jensen)
- Remove two redundant if-checks. [380abe] (Mads Jensen)
- Fix kube client logging [936cd3] (Matt Farina)
- chore(deps): bump golangci/golangci-lint-action from 9.0.0 to 9.1.0 [cb3594] (dependabot[bot])
- chore(deps): bump actions/checkout from 5.0.1 to 6.0.0 [4fddc6] (dependabot[bot])
- chore(deps): bump actions/setup-go from 5.5.0 to 6.1.0 [b87f2d] (dependabot[bot])
- fix: prevent segmentation violation on empty yaml in multidoc [81d244] (Benoit Tigeot)
- fix: prevent reporting fallback on version when none specified [40e22d] (Benoit Tigeot)
- chore(deps): bump golang.org/x/crypto from 0.44.0 to 0.45.0 [c2405c] (dependabot[bot])
- chore(deps): bump github.com/cyphar/filepath-securejoin [28baa9] (dependabot[bot])
- bump version to 4.1 [63e060] (Matt Farina)
- fix: add missing context to debug logs [2dc586] (shuv0id)
- fix: preserve vendor suffixes in KubeVersion.GitVersion [ce273e] (Benoit Tigeot)
- chore(deps): bump actions/checkout from 5.0.0 to 5.0.1 [f6ceae] (dependabot[bot])
- fixup test [f8a49f] (George Jenkins)
- logs [a9cdc7] (George Jenkins)
- fix [b1a976] (George Jenkins)
- chore: add warning for registry login with namespace [5f3c61] (Terry Howe)
- style: linting [71591e] (Benoit Tigeot)
- test: split tests between valid and invalid [b296cb] (Benoit Tigeot)
- test: convert tests to table drive tests [9b242d] (Benoit Tigeot)
- test: refactor TestMetadataLegacyValidate to be more generic [c81a09] (Benoit Tigeot)
- update tests [8c8702] (yxxhero)
- fix: Use server-side apply for object create during update [18616e] (George Jenkins)
- Copy adopted resource info [855ebb] (George Jenkins)
- Refactor environment variable expansion in PrepareCommands and update tests [2d49f0] (yxxhero)
- fix: correct LDFLAGS path for default Kubernetes version [b6a8c6] (Benoit Tigeot)
- fix: improve plugin name validation err messages early via unmarshalling [acf331] (Benoit Tigeot)
- fix: Make invalid name error message more similar and move tests [9e1e3d] (Benoit Tigeot)
- fix: focus only on plugin name but give more info about what we get [cf077c] (Benoit Tigeot)
- Make validation error similar and explicit for both metadatas [f4b139] (Benoit Tigeot)
- fix: improve plugin name validation error messages [c04e18] (Benoit Tigeot)
- Fix syntax errors in the document [faa0ad] (Fish-pro)
- chore(deps): bump the k8s-io group with 7 updates [c81e26] (dependabot[bot])
- docs: Fix LFX Health Score badge URL in README.md [40856b] (Michael Crenshaw)
- chore(deps): bump golang.org/x/crypto from 0.43.0 to 0.44.0 [fb82e0] (dependabot[bot])
- chore(deps): bump github.com/tetratelabs/wazero from 1.9.0 to 1.10.1 [72a84f] (dependabot[bot])
- Publish Helm v4 ->
helm-latest-version[e4353d] (George Jenkins) - Adding script to download Helm v4 [5ae858] (Matt Farina)
- chore(deps): bump golang.org/x/term from 0.36.0 to 0.37.0 [6cd0bf] (dependabot[bot])
- refactor: use strings.Builder to improve performance [d8c404] (promalert)
- chore(deps): bump sigs.k8s.io/kustomize/kyaml from 0.20.1 to 0.21.0 [0089a0] (dependabot[bot])
- chore(deps): bump golangci/golangci-lint-action from 8.0.0 to 9.0.0 [7a8535] (dependabot[bot])
- Update pkg/cmd/flags.go [02312a] (Benoit Tigeot)
- Error strategy list match help [277c14] (Benoit Tigeot)
- Prevent surprising failure with SDK when timeout is not set [5f6fa4] (Benoit Tigeot)
- Do not change the default waiting strategy when --wait is not set [52a282] (Benoit Tigeot)
- Provide more help for SDK user when setting up WaitStrategy [111286] (Benoit Tigeot)
- Avoid confusion between
--wait(watcher) and no --wait (hookOnly) [8535e9] (Benoit Tigeot) - The default is not HookOnlyStrategy but WaitStrategy [1836f3] (Benoit Tigeot)
- Make wait strategy selection more obvious [a5e110] (Benoit Tigeot)
- Update pkg/cmd/flags.go [e8b0cf] (Benoit Tigeot)
- Increase documentation of --wait flag [95e1ee] (Benoit Tigeot)
- While testing SDK features for v4. I was surprised with the error: [5cbd9b] (Benoit Tigeot)
- fix: do not run release workflow on forks [d93ef0] (Terry Howe)
- Convert pkg/cmd/load_plugins.go to slog [6de83c] (saimanojk1)
- Rename copilot-instructions.md to AGENTS.md [caff03] (Yarden Shoham)
- fix(rollback):
errors.Isinstead of string comp [d15870] (Hidde Beydals) - fix(uninstall): supersede deployed releases [2f1ecc] (Hidde Beydals)
- for remaining local variable case inconsistency [4576a8] (tison)
- Properly test error messages on pull command's test [ed6cf0] (Benoit Tigeot)
- Adding a LoadArchive to common loader [0f5eda] (Matt Farina)
- for all other similar cases [90d019] (tison)
- chore(deps): bump github.com/cyphar/filepath-securejoin [21af58] (dependabot[bot])
- chore(deps): bump sigs.k8s.io/controller-runtime from 0.22.3 to 0.22.4 [60aaa8] (dependabot[bot])
- chore: increase logging package test coverage [558cea] (Evans Mungai)
- feat(repo): add --no-headers option to 'helm repo list' [6ef79b] (Paul Van Laer)
- chore: fix typo of public field [0d6de2] (tison)
- rename interface{} to any [ffb394] (Terry Howe)
- test: protect unknown hook delete policies [269a32] (Marcin Owsiany)
- chore: replace github.com/mitchellh/copystructure [bee9c1] (Terry Howe)
- fix: Fix Helm v4 release distribtion/get-helm-3 script [d5d1ea] (George Jenkins)
- fix test [ae4af6] (Artem Vdovin)
- Make test scripts run without /bin/bash [6181e0] (Tom Wieczorek)
- Ignore duplicated URN in logs [8025a3] (Benoit Tigeot)
- jsonschema: warn and ignore unresolved URN $ref to match v3.18.4 [03bb62] (Benoit Tigeot)
- chore: delete unused var in installer.go [806857] (zyfy29)
- fix: assign KUBECONFIG environment variable value to env.Kubeconfig [b25fa8] (LinPr)
- add concurrency test on write & load index file [118d0e] (Artem Vdovin)
- update writing index files to writeAtomicFile [314bd1] (Artem Vdovin)
- fix index concurrency [351bb7] (Artem Vdovin)