Provider Support

Oxid works with ALL Terraform providers out of the box. It uses the same tfplugin5/6 gRPC protocol, so every provider in the Terraform registry is compatible.

How Providers Work

Terraform providers are standalone binaries that implement a gRPC interface (tfplugin5 or tfplugin6 protocol). Oxid communicates with these providers using the exact same protocol - no compatibility layer, no translation. If a provider works with Terraform, it works with Oxid.

Oxid ──gRPC──→ terraform-provider-aws
Oxid ──gRPC──→ terraform-provider-google
Oxid ──gRPC──→ terraform-provider-azurerm
Oxid ──gRPC──→ terraform-provider-kubernetes
Oxid ──gRPC──→ (any Terraform provider)

Declaring Providers

Providers are declared in your .tf files using the standard required_providers block:

versions.tf
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
    google = {
      source  = "hashicorp/google"
      version = "~> 5.0"
    }
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.0"
    }
  }
}

Provider Download

During oxid init, providers are downloaded from registry.terraform.io and cached locally:

$ oxid init

Initializing Oxid workspace...
  Downloading hashicorp/aws v5.67.0 for darwin_arm64...
  Downloading hashicorp/google v5.12.0 for darwin_arm64...
  Providers cached in .oxid/providers/

Oxid initialized successfully.

Provider Caching

Provider binaries are cached in the .oxid/providers/ directory, organized by registry, namespace, and version:

.oxid/providers/
  registry.terraform.io/
    hashicorp/
      aws/
        5.67.0/
          terraform-provider-aws
      google/
        5.12.0/
          terraform-provider-google
    integrations/
      github/
        6.0.0/
          terraform-provider-github

On subsequent runs, Oxid reuses cached providers and only downloads when the version changes or the binary is missing.

Supported Providers

Oxid supports every provider in the Terraform registry. Here are some commonly used ones:

Cloud providers

  • AWS - hashicorp/aws
  • Google Cloud - hashicorp/google
  • Azure - hashicorp/azurerm
  • DigitalOcean - digitalocean/digitalocean
  • Hetzner - hetznercloud/hcloud

Infrastructure

  • Kubernetes - hashicorp/kubernetes
  • Helm - hashicorp/helm
  • Docker - kreuzwerker/docker

Services

  • GitHub - integrations/github
  • Cloudflare - cloudflare/cloudflare
  • Datadog - DataDog/datadog
  • PagerDuty - PagerDuty/pagerduty
NoteBrowse all available providers at registry.terraform.io/browse/providers. If it works with Terraform, it works with Oxid.

Provider Configuration

Configure providers with the standard provider block:

provider "aws" {
  region  = "us-west-2"
  profile = "production"
}

provider "google" {
  project = "my-gcp-project"
  region  = "us-central1"
}

Providers also read their standard environment variables (e.g., AWS_ACCESS_KEY_ID, GOOGLE_CREDENTIALS, ARM_SUBSCRIPTION_ID).

Protocol Details

Oxid supports both major versions of the Terraform plugin protocol:

  • tfplugin5 - Used by most existing providers (AWS, GCP, Azure, etc.)
  • tfplugin6 - Newer protocol used by some recent providers

Protocol negotiation is automatic - Oxid detects which protocol a provider uses and communicates accordingly.

TipThe gRPC protocol definitions are compiled from proto/tfplugin5.proto and proto/tfplugin6.proto during the Oxid build process.