Juju 4.0.14ยถ
๐๏ธ 18 Aug 2026
This is a cumulative bug fix release for Juju 4.0, covering changes from
4.0.12 to 4.0.14.
๐ฏ Highlightsยถ
Model migration and CMR are more reliable: Juju now validates imported models before activation, implements source-side cleanup and login redirection, and handles leadership, log transfer, synthetic remote units, offers, and relation teardown more consistently.
Secret handling is more consistent under hooks: secret creation and relation grants are committed atomically with other hook changes, including when Kubernetes secret backend RBAC is enabled.
Deployment and operator workflows are more predictable: fixes cover charm and model type mismatches, action metadata, zone placement, machine constraints, model defaults, status filtering, and machine removal.
Bootstrap and provider reliability improves: fixes apply proxy settings earlier, retry transient Kubernetes failures, improve S3 signing, and make MAAS, OpenStack Cinder, and controller address cleanup safer.
Full cumulative list of changes: https://github.com/juju/juju/compare/v4.0.12โฆv4.0.14
๐ ๏ธ Fixesยถ
๐ Security and dependency maintenanceยถ
Go and cryptography dependencies were updated to address GO-2026-4550 and
GO-2026-5856, including replacement of the deprecated OpenPGP package.
๐ Migration and CMR correctnessยถ
This release implements target-side validation and source-side cleanup, and fixes several migration and cross-model relation (CMR) correctness issues. Validation covers secret backends and references, relation-unit consistency, cloud credential reachability, and agent binary availability. A failure leaves the imported model gated and abortable.
These changes harden specific migration phases and prechecks. They do not
establish complete end-to-end validation of every migration scenario.
Migration from a 4.0 controller to another 4.0 controller remains
unsupported.
feat: implement source-side REAP with durable login redirection for 4.x model migration
fix(migration): correct swapped lease key fields in leadership import
fix(migration): ignore synthetic CMR units in version prechecks
fix(migration): exclude synthetic CMR units from agent-version and status queries
fix(cmr): make offer creation idempotent for identical offers
Redeploying a bundle with an unchanged offer now succeeds, but changing an existing offer remains unsupported.
๐ Secrets and transaction consistencyยถ
Secret creation and grants made by charms are now coordinated with the rest of a hookโs committed changes. Server-side secret ID reservations also allow Kubernetes backend RBAC to authorize new charm secrets without allowing units to claim arbitrary IDs.
๐งญ Deployment, actions, constraints, and statusยถ
Deployment and lifecycle operations now report invalid charm and model
combinations earlier, make action metadata available during deployment, and
retain the settings required for subsequent provisioning and automation.
Kubernetes charms deployed to machine models are rejected unless --force is
used, while machine charms deployed to Kubernetes models produce a warning.
Bundle deployments are not covered by this mismatch check.
๐๏ธ Providers, Kubernetes, networking, and object storageยถ
Controller proxy settings are now applied before bootstrap makes outbound requests. Kubernetes deployment retries transient proxy failures and pod loss, while provider fixes improve MAAS VM ownership, OpenStack Cinder cleanup, and controller API address selection.
S3 signing regions are derived from common AWS endpoint forms. The optional
object-store-s3-region controller setting takes precedence. If no region can
be derived for an object store using static credentials, Juju uses a
placeholder signing region and logs a warning; S3-compatible stores that
validate the region should set it explicitly.
๐งฑ Agent, API, and workload behaviorยถ
Pebble polling now includes notices created by non-root workload users, so
charms receive the corresponding pebble-custom-notice hooks. The Juju client
also reports its version on the main API WebSocket connection, giving JIMM the
metadata needed to apply compatibility rules in mixed controller fleets. Juju
controllers themselves currently ignore this header.
๐ Documentationยถ
Documentation updates add user-secret lifecycle guidance and improve command examples, limits, cloud references, controller configuration details, and tutorial links.
docs: extend secret lifecycle section to cover user-secret lifecycle
docs: mention add-k8s โstorage flag for setting default storage class
docs: add 5 MiB size limit note for config values read from file
docs: document 10,000 line maximum for debug-log โlines/โlimit
docs(tutorial): fix cloud-init URL to use juju/juju not canonical/juju
๐ Summaryยถ
4.0.14 is a cumulative reliability patch release. It hardens specific model
migration and CMR phases, makes hook-driven secret changes more atomic,
improves deployment and status workflows, and strengthens bootstrap,
Kubernetes, S3, MAAS, OpenStack, networking, and workload behavior since
4.0.12.