djust 0.9.6 was stabilized through 3 pre-releases, and most of its changes are recorded under them: 0.9.6rc1, 0.9.6rc2, 0.9.6rc3.
Stable promotion of 0.9.6rc3. No code changes since rc3. The rc1 → rc3 progression is summarized below.
Highlights vs `0.9.5`
fix(theming)—{{ theme_head }}context-string parity with{% theme_head %}template tag (#1452 / #1453, regression introduced in rc2 and fixed in rc3). Production saw unstyled theme panels because the hand-built rc2 string dropped six output elements; rc3 routes the context string through the existing simple_tag so future tag additions flow through automatically.fix(state-backends)—RedisStateBackendZstdCompressor/ZstdDecompressor moved tothreading.local(#1430 / #1431). The previous shared-instance shape producedZstdError, "Data corruption detected", and outright SIGSEGV insideZSTD_decompressSequencesLong_defaultunder concurrent load.fix(state-backends)—InMemoryStateBackend.get()discards corrupt entries instead of returning a shared in-memory ref (#1410 / #1438). Closes the cross-connection state-leak class introduced whenRustLiveView.deserialize_msgpackraised after a hot-swap struct change.feat(checks)—djust.D001system check for Postgres-configured-without-psycopg[binary]>=3.2misconfig (#1433 / #1440).perf(theming)—theme_contextnow caches its output byThemeStatetuple AND pre-renderstheme_panel/theme_mode_toggle/theme_preset_selectoras context strings (#1435 / #1437 / #1442 / #1443). Per-request cost ~1-3 ms → ~5-10 µs post-warmup on theme-rendering pages.perf(tenants)—TenantMiddlewareshort-circuits when no resolver is configured (#1436 / #1441). Saves ~2-5% per-request CPU fordjust[tenants]deploys without tenant opt-in.feat(deploy)—djust deployCLI is now a guided end-to-end onboarding (login → resolve slug → confirm project → deploy) with OAuth Auth Code + PKCE browser flow login (#1422). RFC 8252 loopback redirect; noclient_secret; refresh-token rotation.test(vdom)— wire-protocol JSON snapshot tests for everyPatchvariant +VNodestruct (#1419 / #1444). Pins the Rust↔JS contract against silent serde shape changes.- Plus the rc1–rc3 contents already shipped — see those entries below.