# Crossplane v2.4.0-rc.1 - Product: Crossplane (https://whatsnew.fyi/product/crossplane) - Vendor: CNCF - Date: 2026-08-14 - Version: v2.4.0-rc.1 - Original notes: https://github.com/crossplane/crossplane/releases/tag/v2.4.0-rc.1 - Permalink: https://whatsnew.fyi/product/crossplane/releases/v2.4.0-rc.1 - Labels: Pre-release What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **changed** — Crossplane CLI is no longer published to releases.crossplane.io and is now published only to cli.crossplane.io under the binary name crossplane instead of crank - **changed** — Package revision names are now derived from both the package digest and the package's metadata.generation, so any change to a package's spec produces a new PackageRevision - **fixed** — Changing a package's runtimeConfigRef now produces a new revision instead of reusing the existing revision with stale runtime settings - **changed** — Package runtime objects are now applied with server-side apply under the pkg.crossplane.io/runtime field manager instead of merge patch - **changed** — Fields removed from a DeploymentRuntimeConfig are now removed from the live runtime object instead of lingering - **changed** — Crossplane no longer replaces array additions that it doesn't declare, such as injected sidecar containers or extra volumes added out of band - **changed** — The RUNTIME printer column on ProviderRevision and FunctionRevision was renamed to RUNTIME-HEALTHY - **added** — A new RUNTIME-ACTIVE printer column was added to ProviderRevision and FunctionRevision - **changed** — The type label on engine_watches_started_total and engine_watches_stopped_total metrics changed from ComposedResource to Dependency - **added** — Crossplane now watches required resources that composition functions depend on, so changes to required resources reconcile XRs that require them in real-time - **added** — Providers with safe-start capability now scale their runtime Deployment to zero replicas until activated, reducing resource consumption for inactive providers - **added** — A new RuntimeActive condition on ProviderRevision and FunctionRevision indicates whether the runtime is intentionally scaled to zero or has been scaled up - **changed** — The spec.replicas field in DeploymentRuntimeConfig is now read as how many replicas to run while running rather than a demand to always be running - **changed** — Crossplane container images are now built with nixpkgs' buildGoModule to include the full Go dependency list in the binary, making them scannable by vulnerability scanners #### ❗ Important Crossplane version `v2.4.0-rc.1` is a release candidate intended to collect input from the community and offer users an opportunity to experiment with Crossplane in non-production environments before the official release of version `v2.4.0`. > [!WARNING] > This is a pre-release; do not use it in production environments! To install Crossplane with this release: ```shell helm repo add crossplane-stable https://charts.crossplane.io/stable --force-update helm install crossplane --namespace crossplane-system --create-namespace crossplane-stable/crossplane --devel ``` #### 🚨 Notable and Breaking Changes * ⚠️ The Crossplane CLI is no longer published to `releases.crossplane.io`. New CLI releases go only to `cli.crossplane.io`, under the binary name `crossplane` rather than `crank`. This completes the CLI's move to https://github.com/crossplane/cli, which was announced in the `v2.3.0` release notes and dual published to both locations for `v2.3.0` to ease the transition. * f you are using custom installation scripts or CI steps that download the CLI directly from `releases.crossplane.io`, update them to use `cli.crossplane.io`, and update any firewall or proxy rule that allows `releases.crossplane.io` to now allow `cli.crossplane.io` instead. * Users of the [`install.sh`](https://github.com/crossplane/crossplane/blob/main/install.sh) script as their installation procedure are unaffected. * The CLI now follows its own release schedule, so a CLI release will not accompany every core Crossplane release and the two version numbers have diverged. * Documentation and installation instructions for the Crossplane CLI can be found on https://docs.crossplane.io/cli/latest/. * Package revision names are now derived from both the package digest and the package's `metadata.generation`, so any change to a package's spec produces a new `PackageRevision`. #7473 * This fixes the long standing issue where changing a package's `runtimeConfigRef` reused the existing revision, along with its stale runtime settings. #5068 * When upgrading to `v2.4`, every installed package gets a new revision, with a new name, on its first reconcile. * ⚠️ The `Pods` for `Providers` and `Functions` will be restarted for this new revision. * Package runtime objects (`Deployment`, `ServiceAccount`, `Service`, and TLS `Secrets`) are now applied with server-side apply under the `pkg.crossplane.io/runtime` field manager, replacing the previous merge patch applicator. #7563 * A field you remove from a `DeploymentRuntimeConfig` is now removed from the live runtime object, rather than lingering until that object is replaced. #4817 * Additions that Crossplane doesn't declare are left alone rather than replaced along with the array that held them, e.g. an injected sidecar container or an extra volume added out of band now survives a reconcile. * The `RUNTIME` printer column on `ProviderRevision` and `FunctionRevision` was renamed to `RUNTIME-HEALTHY`, and a new `RUNTIME-ACTIVE` column was added. #7586 * Update any tooling that reads `kubectl get providerrevision` or `kubectl get functionrevision` output by column position. * The `type` label on the `engine_watches_started_total` and `engine_watches_stopped_total` metrics changed from `ComposedResource` to `Dependency`, now that a single watch mechanism covers both composed and required resources. #7572 * Update any dashboards or alerts that filter on that label value. #### 🎉 Highlights * **Watching required resources**: Composition functions can require resources they don't compose, but Crossplane didn't watch them, so a change to a required resource didn't reconcile the XRs that required it until their next poll. Crossplane now tracks the resources each XR depends on and drives watches from that. A change to a required resource now reconciles the XRs that required it the same way a change to a composed resource does. This w _[Truncated at 4000 characters — full notes: https://github.com/crossplane/crossplane/releases/tag/v2.4.0-rc.1]_