comparing
Crossplane
Solutions for Kubernetes resource orchestration
Crossplane allows you to manage infrastructure as Kubernetes resources across different platforms, such as AWS, GCP, or Azure. It extends the Kubernetes API to manage resources outside of Kubernetes itself using Crossplane Providers. These Providers bundle Managed Resources and controllers which allow Crossplane to provision and manage the respective infrastructure resources. In contrast, Koreo was designed specifically to allow you to use off-the-shelf operators or built-in Kubernetes controllers for provisioning and managing infrastructure versus needing to implement the Crossplane API or using Crossplane-specific operators. It serves as a meta-controller programming language used to orchestrate Kubernetes control loops.
Configuration Management
Crossplane does not provide a configuration management solution directly. Instead, you might use a tool such as Helm, Kustomize, or Koreo to manage configuration for Crossplane resources. Koreo provides an integrated solution for configuration management and orchestration since it is designed specifically for orchestrating resource configuration.
Workflow Orchestration
Crossplane's workflow capabilities are primarily focused on managing resource dependencies and reconciliation. The closest analog to a Koreo workflow in Crossplane is a Composition. Compositions allow exposing a single abstraction that encapsulates multiple resources. Koreo's workflows share some similarities but provide a more general-purpose resource orchestration engine, enabling complex, multi-step processes for platform operations that leverage any operator or controller instead of a specific API.
Resource Materialization
Crossplane uses Providers to translate Kubernetes API calls into the target provider's APIs. It also generally requires resources to be cluster-scoped and live within the same cloud project or account as the control plane itself. Koreo leverages existing Kubernetes operators to provision and manage infrastructure, and it's designed to support namespaced resources and managed infrastructure that can live in service projects/accounts separate from the control plane. Koreo's dynamic resource materialization allows you to define, combine, and test resource materialization by using atomic overlays rather than sets of JSON patches. This approach makes mapping arbitrary values between resources or transforming static Kubernetes configurations to create or update resources declarative and testable.
Target Audience
Both Crossplane and Koreo are designed for platform engineering teams looking to build their own internal developer platform or control plane. Crossplane takes an approach of using a Provider API and Provider marketplace to support extensibility. This provides more out-of-the-box solutions but is ultimately limited to what is supported by the Providers and tends to require cluster-scoped Managed Resources. Koreo provides a lower-level toolkit designed to compose arbitrary operators and controllers into a cohesive platform by orchestrating any type of Kubernetes resource. It also better supports multi-tenant use cases through namespaced resources and a more flexible provisioning model.

When to choose Crossplane
- You are primarily looking for an Infrastructure as Code alternative and there are existing Providers that meet your needs
- You are not looking to leverage existing Kubernetes operators
- Cluster-scoped resources are okay and/or managed infrastructure can live in the same cloud project/account as the control plane
When to choose Koreo
- You prefer leveraging existing, off-the-shelf Kubernetes operators for infrastructure management
- You need fine-grained control over the configuration and lifecycle of Kubernetes resources
- You require complex, programmable workflows with business logic for Kubernetes platform operations
- You need resources to be namespaced rather than cluster-scoped and/or you want managed infrastructure to live in cloud projects/accounts separate from where the control plane lives (e.g. in a multi-tenant environment)