mrkeyoor.com_
Fri 04 Sept 17:59 UTC
Automationevaluationupdated 04 Sept 2026

crossplane review

Crossplane turns a Kubernetes cluster into an API for provisioning cloud services, applications, and other infrastructure. Platform teams define their own resource types, then Crossplane keeps the resources behind those APIs in the requested state through providers and composition functions.

trackingstars / 7d
Verdict

Our Crossplane build succeeded in 138 seconds, while the test run reported 86 passed and 3 failed of 89 before ending on the test/e2e package. Crossplane 2.4 is a strong choice for a staffed platform team that wants Kubernetes-native product APIs and continuous reconciliation across providers. Use OpenTofu or Pulumi if running another control plane, provider pods, and a package ecosystem would add more operational work than the internal API saves.

We ran it

Lab card: what happened when we ran crossplaneScreenshot of crossplane (crossplane.io)
Install✓ · 90s576 packages
Build✓ · 138s
Tests✗ · 89s86 passed · 3 failed of 89 (go test)
Repo948 files~111,170 lines of source · 22.7 MB · 8 CI workflows · tests dir

Answers from our run

Does crossplane build from source?

Dependencies installed in 90 seconds (576 packages), and the build succeeded in 138 seconds. We cloned commit c2a893f into a clean Debian container with 3 CPUs and no project-specific setup.

Do crossplane's tests pass?

Not all of them: 86 of 89 passed and 3 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use crossplane?

Teams without an existing supported Kubernetes cluster and Helm 3.2 or later: both are installation prerequisites.

What are the alternatives to crossplane?

OpenTofu, Pulumi, Cluster API. Our Crossplane build succeeded in 138 seconds, while the test run reported 86 passed and 3 failed of 89 before ending on the test/e2e package.

Setup2/5Source build passed; deployment needs a cluster, providers, and secrets
Docs5/5Versioned install, composition, provider, and upgrade guides
Community5/512,024 stars with active September issues and pull requests
Maturity4/5Quarterly 2.4 release, clear EOL dates, and active fixes

Who it’s for

Platform teams that want developers to request infrastructure through a small, company-owned Kubernetes API.
Kubernetes operators who prefer continuous reconciliation over one-time infrastructure runs.
Organizations managing several providers or clusters behind reusable policy and composition packages.
Teams prepared to own provider credentials, package upgrades, CRDs, RBAC, and control-plane monitoring.

Who it’s NOT for

Teams without an existing supported Kubernetes cluster and Helm 3.2 or later: both are installation prerequisites.
Operators who want a plan-and-apply tool that exits after a run: provider pods continuously watch managed resources and call external APIs.
Crossplane v1 users who still depend on native patch-and-transform composition, ControllerConfig, external secret stores, or composite-resource connection details: the v2 upgrade guide says those features were removed.
Clusters that cannot accept provider and function pod restarts during a v2.4 upgrade: the release notes say every installed package gets a new revision on first reconcile.
Private-registry users whose dependency names share long prefixes: open issue 7813 reproduces a v2.4.0 collision after generated names are truncated.
Teams that require digest-pinned provider-family dependencies to resolve without a workaround: open issue 7458 reports that this failed on v2.3.1 and remains open.

Setup reality

Our sandbox installed 576 Go packages in 90 seconds and built commit c2a893f successfully in 138 seconds. Tests failed with exit 1 after 89 seconds: the run reported 86 passed and 3 failed of 89, and the log tail names test/e2e before the final failure. It does not show the individual causes.

A useful deployment needs an actively supported Kubernetes cluster, Helm 3.2 or later, and provider packages from a container registry. Providers need credentials for the external APIs they manage. Private package registries add pull secrets in Crossplane's namespace.

The composition quickstart calls for at least 2 GB of cluster RAM. Version 2 upgrades must proceed one minor release at a time, and v2.4 creates new package revisions that restart provider and function pods on first reconcile. Custom CLI download scripts may also need the new cli.crossplane.io location.

Version 2.4 makes Kubernetes the front door for infrastructure

Crossplane 2.4 lets a platform team publish its own Kubernetes resource types for infrastructure and applications. A developer can create an App, database, or storage object with a small schema, while a composition tells Crossplane which lower-level resources to create. Providers add Kubernetes APIs for external services and continuously compare desired state with what those services report. The attraction is a stable internal API that can hide account details, provider choices, and repeated configuration from its users.

The version 2.4 composition guide demonstrates one App resource producing a Deployment and a Service. Composition functions can express that work with templated YAML, ordinary YAML, CEL, Python, or KCL. That range gives platform authors choices, although it also creates standards work: someone must choose a function model, review packages, publish schemas, and support upgrades. The README's promise of building control planes without writing code is credible for simple cases; larger functions may still be software projects.

What happened when we ran it

Our commit c2a893f checkout installed 576 packages in 90 seconds inside a fresh Debian container with 3 CPUs and 8 GB of RAM. The source tree contained 948 files, about 111,170 lines, and used 22.7 MB before dependencies. Installation completed, and the build succeeded in 138 seconds. That result covers the Go repository in the stated sandbox. It does not cover a Helm installation, provider startup, cloud authentication, or reconciliation against a live external API.

The tests ran for 89 seconds and exited with code 1. The summary reported 86 passed and 3 failed out of 89. Its last lines show several internal packages passing, then github.com/crossplane/crossplane/v2/test/e2e failing after 13.880 seconds, followed by the overall FAIL. The supplied tail does not name the three individual failures or their causes, so we cannot attribute them to permissions, networking, missing services, or Crossplane itself. The complete command did not pass in our sandbox.

A live install needs Kubernetes, Helm 3.2, and cloud credentials

The 2.4 installation guide requires an actively supported Kubernetes release and Helm 3.2.0 or later. Helm creates the crossplane-system namespace and installs the core and RBAC manager pods. The composition quickstart asks for at least 2 GB of cluster memory. A useful installation then adds provider and function packages, so the operational footprint depends on the APIs and composition languages selected rather than the core chart alone. A local Kind cluster is suitable for learning, not proof of production capacity.

Providers make calls to external APIs, which means their credentials and permissions become part of the control plane's security boundary. Crossplane obtains provider packages only from container registries; offline sites need a local registry, and private registries use Kubernetes pull secrets in the Crossplane namespace. Version 2.4 can scale safe-start providers to zero until a managed resource definition is active. That saves idle pods, but operators still own registry access, credential rotation, RBAC, package health, and recovery when reconciliation stops.

Version 2 keeps old resources running but does not migrate their scope

The version 2 upgrade guide says existing version 1 resources can continue in legacy cluster-scoped form. There is no automated tool that converts those resources to the newer namespaced style. Upgrades must begin from v1.20 and move one minor version at a time. Native patch-and-transform composition, ControllerConfig, external secret stores, composite-resource connection details, and the default registry flag are removed, so clusters using them need preparation before the core chart is upgraded.

Crossplane v1.20 reaches end of life in November 2026, according to the current release table. The project supplies an upgrade checker in the v1.20 CLI and conversion commands for two removed APIs. That is better than a vague migration note, though it does not remove the change work. Existing live compositions also need restraint: the guide warns that changing an in-use composition to namespaced provider APIs can disrupt or replace resources, and recommends using the new form for new resources.

Release 2.4 restarts package pods and moves the CLI

Version 2.4 derives package revision names from both digest and metadata generation. On the first reconcile after upgrade, every installed package receives a new revision and its provider or function pods restart. Runtime objects now use server-side apply, which preserves additions Crossplane does not declare while removing fields deleted from a runtime configuration. Teams should stage this release with workload owners because the package restart is expected behavior, even when the core upgrade itself is healthy.

The 2.4 CLI moved from releases.crossplane.io to cli.crossplane.io and changed its binary name from crank to crossplane. The core and CLI version numbers now follow separate schedules. A metric label also changed from ComposedResource to Dependency. These are manageable edits, but they reach installation scripts, firewall allowlists, dashboards, and alerts. The supplied install script already uses the new location; private automation copied from older releases may not.

Two open package bugs can block strict registry policies

Issue 7813 reproduces a dependency collision on Crossplane 2.4.0 when two packages from a private GitLab registry share a long path prefix. Generated Function or Provider names are truncated, leaving only one dependency object and preventing resolution. Issue 7458 covers another policy-sensitive case: provider-family dependencies referenced by SHA-256 digest were not recognized as satisfying a version dependency on 2.3.1. Both issues were open on September 4, 2026, so test your real registry paths and pinning scheme before standardizing them.

GitHub showed 119 open issues and 75 open pull requests on September 4, 2026. The repository had 12,024 stars, 8 CI workflow files, and a push that same day; v2.4.0 had shipped on August 20. That is active maintenance around a large project, and the 194 combined items should not be read as 194 bugs. Crossplane earns a controlled platform trial, with the failed e2e run, provider permissions, and package-upgrade behavior included in the acceptance checks.

Alternatives

ProjectWhat it isPick it when
OpenTofu gh↗A declarative infrastructure tool with a plan-and-apply workflow.pick this instead when you want infrastructure runs outside Kubernetes and a reviewable plan before changes.
Pulumi gh↗An infrastructure-as-code platform that uses general-purpose programming languages.pick this instead when developers want code-level abstractions and a run-based deployment model.
Cluster APIA Kubernetes project for declaratively creating and operating Kubernetes clusters.pick this instead when Kubernetes cluster lifecycle is the focused problem rather than a broader platform API.

What people are saying

  1. [github-trending] crossplane/crossplane

Sources

  1. Crossplane repository and README
  2. Crossplane 2.4 installation guide
  3. Crossplane 2.4 composition quickstart
  4. Crossplane 2.4.0 release notes
  5. Crossplane v2 upgrade guide
  6. Open issue 7813 on truncated dependency names
  7. Open issue 7458 on digest-pinned dependencies

More automation reviews

espanso · follow-builders · CloakBrowser · freqtrade · acme.sh · stagehand · the whole board →