Upjet is a code generation framework and Kubernetes controller runtime that transforms Terraform providers into Crossplane providers. It generates Kubernetes CRDs, reconciliation controllers, and example manifests while providing runtime libraries for API conversions, Terraform state management, and resource lifecycle operations. It powers the official AWS, Azure, and GCP providers along with 50+ community providers.

Multiple Terraform Execution Modes
Terraform CLI: Traditional fork-based Terraform CLI and Terraform provider process spawning
Terraform Plugin Framework: Protocol-based communication via protov6 (no-CLI invocation)
Automatic Resource Generation
Kubernetes CRDs highly conformant to the Crossplane Resource Model (XRM) from Terraform schemas
Example manifests, API documentation, (partial) API validation rules, etc.
Cross-Resource References
Kubernetes-native reference resolution between resources
Automatic selector generation for resource lookups
Management Policies (Crossplane v1.11+)
Fine-grained control over resource lifecycle operations
Observe-only mode for importing existing infrastructure
Advanced Capabilities
External name mapping for resource identification
Upjet is ideal when:
Consider a native Crossplane provider when:
Upjet bridges the gap between Terraform's vast provider ecosystem and Kubernetes-native infrastructure management. At build time, Upjet reads a Terraform provider's schema and generates everything needed for a Crossplane provider: Go types, Custom Resource Definitions, and reconciliation controllers. At runtime, these controllers use Terraform's resource logic to manage infrastructure, while exposing a pure Kubernetes API to users.

Browse the Upbound Marketplace for a full list of available providers.
| Guide | Description |
|---|---|
| Generating a Provider | Create a new Crossplane provider from scratch |
| Configuring a Resource | External names, references, and resource customization |
| Adding New Resources | Add resources to an existing provider |
| Testing with Uptest | End-to-end testing framework |
| Monitoring | Prometheus metrics for the Upjet runtime |
| Upgrading to v2 | Migration guide from Upjet v1 to v2 |
| Managing CRD Versions | Handle Terraform schema changes across versions |
| Controller Template Variables | Variables available to the managed resource controller setup template |
| Main Template Variables | Variables available to the provider family main program template |
We welcome contributions! Please see our Contributing Guide for details.
Upjet originates from the Terrajet project. See the original design document.
Upjet is under the Apache 2.0 license with notice.
$ claude mcp add upjet \
-- python -m otcore.mcp_server <graph>