Need-to-KnowNeed-to-Know
UpgradesHelmArchitectureOperations

What Gets Updated in a Splice Version Upgrade?

Understanding what changes (and what doesn't) when you upgrade your validator Helm charts.

5 min read

The Question

When we upgrade a validator node version, is it mainly just the validator app and participant, or do other elements (like the wallet UI) also change?

The Answer

In a standard Splice Helm upgrade, all images shipped by the Helm charts upgrade together — validator app, participant, and UIs.

PostgreSQL is usually the exception because it's deployed via a separate chart/release with its own lifecycle.

⚠️Important Exception
Some releases include major Canton upgrades that require a planned synchronizer upgrade with downtime — not a "regular helm upgrade."

Quick Mental Model

Think of your node as "bundled apps + one database backbone": most runtime components follow the Splice chart appVersion, while Postgres is typically managed separately.

For major network upgrades, the network may perform a synchronizer migration with downtime, during which your node exports a migration dump and then re-initializes the participant from that dump after upgrading.


What Upgrades Together (Helm AppVersion)

splice-validator chart includes

ComponentImage (example)Purpose
validator-appvalidator-app:0.5.xCore validator backend
wallet-web-uiwallet-web-ui:0.5.xWallet UI frontend
ans-web-uians-web-ui:0.5.xCanton Name Service UI

splice-participant chart includes

ComponentImage (example)Purpose
canton-participantcanton-participant:0.5.xLedger participant node

Why Everything Bumps Together

The chart templates typically reference the same {{ .Chart.AppVersion }} tag for each deployed image, so changing the Helm chart version changes the AppVersion and thus updates all those pods.

Typical Helm template pattern
# validator.yaml
image: "{{ .Values.imageRepo }}/validator-app:{{ .Chart.AppVersion }}"

# wallet-web-ui.yaml
image: "{{ .Values.imageRepo }}/wallet-web-ui:{{ .Chart.AppVersion }}"

# ans-web-ui.yaml
image: "{{ .Values.imageRepo }}/ans-web-ui:{{ .Chart.AppVersion }}"

# participant.yaml
image: "{{ .Values.imageRepo }}/canton-participant:{{ .Chart.AppVersion }}"

What Does NOT Automatically Follow (Postgres)

PostgreSQL is commonly deployed via a separate splice-postgres chart/release and therefore does not automatically track the same appVersion as the validator/participant bundle.

That's why you might see something like Postgres on 0.5.1 while validator components are on 0.5.8.

💡Postgres Upgrade Strategy
Upgrade Postgres deliberately and less frequently. Database upgrades carry more risk and often require different procedures (backup, test, upgrade).

Major Upgrades vs "Regular Upgrades"

Some Splice releases include an "Upgrade to Canton X.Y" that cannot be applied as a routine upgrade and instead requires a scheduled synchronizer migration with downtime.

During Downtime Upgrades, Validators Typically:

  1. Wait for SVs to pause traffic
  2. Ensure they are caught up with the network
  3. Verify the migration dump exists
  4. Take full backups
  5. Upgrade and let the validator backend import the dump to initialize a fresh participant database
⚠️Integration Implication
The participant's update history is not preserved across the migration. Active contracts are imported, but participant history restarts going forward.

Verify What's Running

List current images for each pod to confirm what actually upgraded:

Check running image versions
kubectl get pods -n validator \
  -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[*].image}{"\n"}{end}'

Key Takeaways

  1. One Splice chart version upgrade typically updates participant + validator app + wallet UI + ANS UI together
  2. Postgres is usually separate — upgrade it deliberately and less frequently
  3. Always read release notes — some upgrades require a synchronizer migration with downtime, not a normal helm upgrade
  4. Test on DevNet/TestNet first — UI/API behavior can change across versions