The Keycloak Upgrade Ledger

Every upgrade we have rehearsed, with the environment stated and the clock running.

2026-08-31 · run 2026-08-31-26.7.1-to-26.7.3-3

26.7.1 → 26.7.3 (run 3, rollback exercised)

Upgrade
26.7.1 → 26.7.3
Scale
1 realm (lab), 1,000 users, 11 clients (5 seeded + 6 default), 1 group (corp + 3 children), 2 IdP brokers, 1 LDAP component, 1 organization, 1 fine-grained-authz client
Database
Postgres 16, single node
Topology
single container
Host
laptop (Arch Linux, docker 29.7.2 / compose 5.5.0)
Rehearsal
attempt 3 of 3 (rollback exercised) — this lab holds a path to three clean runs, one exercising rollback
Condition
routine — no adverse condition applied

Environment

Identical to run 2 (same baseline-26.7.1-kitchen-sink-1k).

Procedure

./bin/restore.sh baseline-26.7.1-kitchen-sink-1k   # reset to 26.7.1
./bin/upgrade.sh 26.7.3                            # -> 26.7.3, backup taken
./bin/restore.sh pre-upgrade-26.7.1-to-26.7.3-20260831T213925Z   # rollback

Timings

PhaseDuration
Upgrade to ready25s
Rollback to ready~30s (drop + pg_restore + recreate + boot)

Outcome

Breakage observed

restore.sh postgres rollback path was broken (model_version: command not found)

Rollback

← All runs