Helm 4 Migration Guide: What's New and How to Upgrade

Photo by frank mckenna on Unsplash
Helm v4.0.0 was released on Wednesday, November 12th, 2025, during the Helm 4 presentation at KubeCon plus CloudNativeCon North America. The official announcement went up on the Helm blog on November 17th, 2025. It is the first major Helm version since Helm 3 landed in 2019.
Yes. Helm 4 keeps charts backward compatible, so your existing templates and chart archives continue to work without changes. The breaking changes are concentrated in the CLI flags, the apply strategy, and how plugins and post-renderers are wired, not in the chart format itself.
Only for new installs. Helm 4 defaults to Kubernetes server-side apply when you install a brand-new release. When you upgrade or roll back an existing release, Helm keeps that release's previous apply method, so every release originally created by Helm 3 stays on client-side apply after moving to Helm 4.
The command now accepts the domain name only, with no scheme and no path. In Helm 3 you could pass a full URL, but Helm 4 rejects that so that logins can be scoped at different levels of a registry in the future. Update any CI script that passes a URL to registry login before upgrading.
Helm 3 receives bug fixes only up to its final feature release on September 9th, 2026. Security fixes end on February 10th, 2027, extended from an earlier November 2026 date. After February 2027, Helm 3 gets no further updates, including Kubernetes client library and security patches.

Photo by frank mckenna on Unsplash
Key Takeaway
Helm 4, released in November 2025, is the first major Helm version since 2019. It defaults to Kubernetes server-side apply for new installs, turns post-renderers into plugins, adds an optional WebAssembly plugin runtime, and requires the registry login domain only. Most Helm 3 charts still work, so migration is mostly about CLI flags and apply behavior.
Helm 3 landed in 2019 and then stayed remarkably stable for six years — long enough that a lot of teams stopped thinking about the Helm binary as something that could change under them. That era is over. On Wednesday November 12th, 2025, during the Helm 4 presentation at KubeCon plus CloudNativeCon North America, the maintainers cut Helm v4.0.0, and the official announcement went up on the Helm blog five days later.
I run Helm across a handful of clusters, so I read the release notes the same way I read a database major version bump: assume something I depend on moved. The good news is that charts are backward compatible, so your templates keep working. The changes that actually bite are in the CLI flags, the apply strategy, and how plugins and post-renderers are wired. This guide walks through what changed and the exact steps I follow to migrate.
Helm turned ten in October 2025, and Helm 4 is the milestone that came with the anniversary. Because it is a full major version, the maintainers were free to make backward-incompatible changes — the release notes say plainly that Helm v4 changes the flags and output of the CLI as well as the Go SDK. That is the mental model to hold: charts are safe, tooling is not automatically safe.
The upgrade is also happening on a clock. Helm 3 will keep getting bug fixes only up to its final feature release on September 9th, 2026, and security fixes end on February 10th, 2027 — extended from an earlier November 2026 date. After that, Helm 3 stops receiving any updates at all, including Kubernetes client library and security patches. There is a real window to plan the move rather than rush it.
The release notes group the headline changes into a short list. These are the features I care about as an operator, quoted from the official Helm 4 announcement:
Most migration pain concentrates in a few CLI details. The registry login command now takes the domain name only — no scheme and no path — so that logins can be scoped at different levels of a registry in the future. Two familiar upgrade flags were renamed: atomic became rollback-on-failure, and force became force-replace. The old names still work in v4 but print a deprecation warning, so scripts keep running while you fix them. And because post-renderers are plugins now, you pass a plugin name instead of an executable path.
# registry login now takes the domain only (no scheme, no path) in Helm 4
helm registry login registry.example.com
# renamed upgrade flags (old names still work in v4 but print a deprecation warning)
helm upgrade myapp ./chart --rollback-on-failure # replaces --atomic
helm upgrade myapp ./chart --force-replace # replaces --force
# post-renderers are plugins now: pass a plugin name, not an executable path
helm template myapp ./chart --post-renderer my-postrendererAudit your CI scripts before you upgrade the Helm binary in the pipeline. A registry login that passes a full URL with a scheme, or a post-renderer that points at a shell script path, will break on Helm 4 even though the renamed flags only warn. Grep your automation for registry login, --atomic, --force, and --post-renderer first.
This is the subtle one. Helm 4 defaults to Kubernetes server-side apply, but only when you install a brand-new release. When you upgrade or roll back an existing release, Helm keeps whatever apply method that release already used — which means every release originally created by Helm 3 stays on client-side apply after you move to Helm 4. You do not silently switch apply strategies on your production workloads just by upgrading the binary, and that is deliberate.
The split behavior is a feature, not a quirk: it lets you adopt Helm 4 with zero apply-strategy churn on existing releases, then opt individual releases into server-side apply on your own schedule. Test server-side apply on a non-critical release first — it changes how field ownership and conflicts are handled at the API server.
| Concern | Helm 3 | Helm 4 |
|---|---|---|
| Apply strategy | Client-side apply only | Server-side apply by default for new installs |
| Plugin system | Subprocess scripts only | Redesigned, adds optional WebAssembly runtime |
| Post-renderer | Any executable path via a flag | Must be a named plugin |
| Registry login argument | Full URL accepted | Domain name only |
| Upgrade flags | atomic and force | rollback-on-failure and force-replace |
| SDK logging | Bespoke logging interface | Standard-library slog |
I treat a Helm major upgrade like any other dependency bump: change it in a low-stakes place, watch the output, then roll it wider. Here is the order I follow.
# 1. Check what you are running today
helm version # client version
kubectl version # cluster version
# 2. Install Helm 4, then read your existing release history (unchanged from v3)
helm ls -A
# 3. New installs get server-side apply by default
helm install myapp ./chart
# 4. Existing Helm 3 releases keep client-side apply on the first v4 upgrade
helm upgrade myapp ./chartNone of this is dramatic if you do it before the deadline. Helm 4 keeps your charts working, the renamed flags degrade gracefully with warnings, and the apply-strategy split protects your existing releases from surprise behavior. The real risk is leaving it until Helm 3 security support ends in February 2027 and then discovering a broken login command in a pipeline you forgot about. Start with one cluster this quarter.