In Helm 4, what does --server-side default to on helm install versus helm upgrade?
answer
- The default write path changed in Helm 4
- The flag is not the same type everywhere
- Install decides; upgrade inherits
- auto reads the previous revision's method
- A Helm 3 release stays client-side
basics
~20 sHelm 4 installs with server-side apply: on helm install --server-side is a boolean defaulting to true. On helm upgrade and helm rollback it is a string defaulting to auto, which reuses whatever apply method the previous revision used.
solid answer
~40 sThe flag does not have the same type on both commands. On `helm install`, `--server-side` is a **boolean** and defaults to **true**, so a fresh Helm 4 install writes through server-side apply unless you pass `--server-side=false`. On `helm upgrade` and `helm rollback` it is a **string** defaulting to **`"auto"`**, and `auto` means *inherit the apply method the previous revision used*. The practical consequence is that upgrading your CLI to Helm 4 does not move existing releases onto server-side apply: a release first installed by Helm 3 keeps being written with the old client-side three-way merge on every subsequent upgrade until somebody explicitly passes `--server-side=true`. So in a mixed estate the write path is decided per release at install time, not per CLI version.
code
bash · 9 lines# install: --server-side is a bool and is already true
helm install fraud-scoring ./vendor-scoring-chart -n risk
# upgrade: --server-side is a string defaulting to "auto" = reuse the last revision's method
helm upgrade fraud-scoring ./vendor-scoring-chart -n risk
# rehearse, then deliberately move an old release onto server-side apply
helm upgrade fraud-scoring ./vendor-scoring-chart -n risk --server-side=true --dry-run=server
helm upgrade fraud-scoring ./vendor-scoring-chart -n risk --server-side=truego deeper
Remember the headline: Helm 4 installs with server-side apply by default, and you normally pass no flag at all. Know that --server-side exists and that false is the opt-out.
Be ready to state both defaults precisely — boolean true on install, string "auto" on upgrade and rollback — and explain that auto means inherit the previous revision's method rather than pick the best one.
Show that you know what this means for a real estate: releases installed under Helm 3 stay on the old client-side path indefinitely, so the write path varies per release, and moving one is a deliberate upgrade you rehearse with a server dry run.
Own the policy question: whether the fleet standardises on one apply mode, who is allowed to flip a release, and how you keep an estate from carrying two write paths for years without anyone tracking which release is on which.
Server-side apply is the write path in which the client sends the whole object it wants to exist and the API server performs the merge, recording which manager set which field. Helm 4 made that its default way of writing rendered manifests, in place of the client-side patch that Helm 3 constructed itself. The flag that controls it is `--server-side`, and its most surprising property is that it is not the same *kind* of flag on every command. ## install: a boolean that is already true On `helm install`, `--server-side` is a plain boolean whose default is `true`. Nothing needs to be passed: a Helm 4 install applies server-side out of the box, and the opt-out is the explicit `--server-side=false`. That is the whole story for a brand-new release, and it is why teams that adopted Helm 4 on a greenfield cluster often never think about the flag at all. ## upgrade and rollback: a string whose default is "auto" On `helm upgrade` and `helm rollback` the same flag name takes a **string**, and its default is `"auto"`. `auto` is not a synonym for `true`. It means *use whatever apply method the previous revision of this release used*. Helm records the method a revision was written with, and `auto` reads it back and reuses it. The values `true` and `false` are also accepted on those commands and force the choice regardless of history. ## Why inheritance instead of a flat default A release is long-lived; the CLI that drives it is not. If the first Helm 4 upgrade of an existing release silently switched the write path, a routine chart bump would become an ownership renegotiation across every object in the release. Under server-side apply the API server begins tracking which manager owns each field, and every field some other actor already owns is a candidate for a conflict that stops the upgrade. Inheriting keeps the version bump boring: your first Helm 4 upgrade of a Helm 3 release writes exactly the way the previous one did, and you choose a separate, deliberate moment to change the write path. ## The consequence people trip on Because `auto` is sticky, a release installed under Helm 3 stays on the client-side three-way merge indefinitely, even after every operator in the team has been on Helm 4 for months. Two releases sitting side by side in the same namespace can be written by two different mechanisms, and they will behave differently the first time somebody hand-edits a field on a live object or another controller writes to one. "We are on Helm 4, so we are on server-side apply" is therefore false for exactly the releases that have been around longest, which are usually the ones that matter. The same stickiness applies in reverse: once a revision has been applied server-side, `auto` keeps later upgrades — and rollbacks — server-side. ## Flipping a release over To move an existing release, pass `--server-side=true` on an upgrade. That is the moment every accumulated hand-edit and every field owned by another controller can surface as a conflict, so rehearse it: `--dry-run=server` sends the request to the API server for validation without persisting a revision, which is the closest you get to a preview of the switch. Keep the chart identical across that upgrade so the apply mode is the only variable; if it fails, you know why. After it succeeds, the recorded method carries forward on its own. ## Do not confuse it with the force flags Three Helm 4 flags live near each other and are routinely muddled. `--server-side` chooses the write path. `--force-conflicts` overrides field-manager conflicts *within* server-side apply — it does not enable server-side apply and it is meaningless without it. `--force-replace` (whose deprecated alias is the bare `--force`) is an entirely different idea, and Helm rejects `--force-replace` and `--force-conflicts` together because they are mutually exclusive. A candidate who says "`--force` makes Helm win the server-side conflict" has merged three mechanisms into one. ## What it does not change The apply mode changes how the object reaches the cluster; it does not change Helm's own bookkeeping. Each revision is still stored as a release record with the rendered manifest inside it, history and rollback still read that record, and the release's identity, namespace and revision numbering are untouched. Reading `--server-side=auto` as "Helm decides intelligently what is best for this object" is the other common misreading: `auto` is a lookup of one recorded fact about the previous revision, nothing more.
- How do you move a release that has always been applied client-side onto server-side apply?Pass `--server-side=true` on the next `helm upgrade`, with the chart otherwise unchanged so the apply mode is the only variable. Rehearse it first with `--dry-run=server`, because that upgrade is where fields owned by other managers turn into conflicts. Once the revision is recorded as server-side applied, the default `auto` keeps later upgrades on that path without the flag.
- Does helm rollback follow the same rule?Yes. On `helm rollback`, `--server-side` is the same string flag defaulting to `auto`, so a rollback reuses the apply method the previous revision used rather than switching paths. That also means a rollback is not a way back to the client-side merge after you have moved a release to server-side apply — you would have to ask for `--server-side=false` explicitly.
- Does --server-side=false on an upgrade break anything about history or rollback?No. The apply mode only decides how the object is written to the API server. Helm still stores a release record per revision with the rendered manifest in it, `helm history` still lists every revision, and `helm rollback` still restores from the stored manifest. What changes is who computes the merge and whether field ownership is tracked.
Install is where you pick the lane; upgrade with auto just stays in the lane the last driver was in, however new your car is.
saying these in an interview costs you the question
- Says Helm 4 needs --server-side passed explicitly to use it
- Assumes upgrading the CLI moves existing releases to server-side apply
- Treats --server-side as a boolean on upgrade too
- Reads auto as Helm choosing the best mode per object
- Claims --force turns on server-side conflict resolution
- Thinks the apply mode changes how revisions are stored