env.dev

OpenTofu in 2026: Open-Source Terraform Fork Explained

OpenTofu 1.11 is the Linux Foundation fork of Terraform 1.5 under MPL 2.0, with built-in state encryption, ephemeral values, and a drop-in tofu CLI. Migration, version timeline, and OpenTofu-vs-Terraform compared.

Last updated:

OpenTofu is the Linux Foundation's open-source fork of Terraform — forked from Terraform 1.5.x in August 2023 after HashiCorp moved the upstream to the Business Source Licence, and shipping v1.11.6 (April 8, 2026) under MPL 2.0 with v1.12.0-rc1 already in the wild. The stakes are concrete: the BSL forbids building competing products on top of Terraform, OpenTofu does not, which is why every managed IaC platform you can name — Spacelift, env0, Scalr, Gruntwork — defaulted to tofu within months of the relicense. The HCL hasn't changed since the fork, but the two projects have visibly diverged: state encryption, ephemeral values, early variable evaluation, and provider for_each ship in OpenTofu first and have no Terraform equivalent in 2026.

This page is the field guide. What OpenTofu actually is, what changed when IBM closed the HashiCorp acquisition in December 2024, the version-by-version feature timeline, a 60-second install, the binary-swap migration path from Terraform, and where OpenTofu still loses. For the broader IaC landscape including Pulumi see the Pulumi vs Terraform vs OpenTofu primer, and for the variable model that OpenTofu inherits intact see the Terraform variables guide.

TL;DR

  • OpenTofu 1.11 (MPL 2.0) is a drop-in fork of Terraform 1.5.x under Linux Foundation governance. Same HCL, same providers, same state format, different licence and binary (tofu instead of terraform).
  • CNCF Sandbox since April 23, 2025; granted a special MPL 2.0 licence exception by the CNCF Governing Board (Apache 2.0 is CNCF default).
  • State encryption (1.7, April 2024) is the headline divergence — AES-GCM with PBKDF2, AWS KMS, GCP KMS, Azure Key Vault, or OpenBao key providers. Terraform has had “encrypt sensitive state” in the backlog since 2016.
  • Migration is a binary swap for most teams: brew install opentofu, tofu init -upgrade, tofu plan, done. State files are interchangeable as long as you don't turn on OpenTofu-only features.
  • When OpenTofu loses: HCP Terraform/Terraform Cloud features (Sentinel, no-code modules, run tasks), proprietary HashiCorp partner integrations, and any toolchain that hard-codes the hashicorp/ registry namespace without a mirror.

What Is OpenTofu?

OpenTofu is an infrastructure-as-code tool that reads HCL configuration files, talks to a provider plugin, diffs your desired state against a state file, and applies the difference. If that sentence reads like the Terraform tagline, that is the entire point — OpenTofu is the same thing, with the same .tf files, the same providers, the same terraform.tfstate, and the same plan/apply verbs. The CLI binary is named tofu.

What is different is who owns it. HashiCorp owns Terraform; the Linux Foundation hosts OpenTofu under a Technical Steering Committee drawn from Gruntwork, Spacelift, env0, Harness, Scalr, and independent maintainers. No single vendor controls the roadmap. The OpenTF Manifesto — the document that triggered the fork — sits in a GitHub repo with 35.8k stars and signatures from over a hundred companies. The first independent release, OpenTofu 1.6.0, shipped January 9, 2024. CNCF accepted the project at Sandbox maturity on April 23, 2025.

Why Did OpenTofu Get Forked in the First Place?

The timeline is short and the stakes were enormous for a slice of the ecosystem most users never see — the platform vendors.

DateEventWhy it mattered
Aug 10, 2023HashiCorp relicenses Terraform from MPL 2.0 to BSL 1.1Restricts “competitive use”; reverts to MPL after 4 years per release. Platform vendors lose the right to ship Terraform inside their products.
Sep 5, 2023OpenTF Manifesto published, 100+ signatories within daysGruntwork, Spacelift, env0, Harness, Scalr, and others demand HashiCorp revert or commit to the fork.
Sep 20, 2023Linux Foundation accepts the fork as OpenTofuNeutral home; no single vendor can re-licence the project. Forked from Terraform 1.5.x — the last MPL version.
Jan 9, 2024OpenTofu 1.6.0 releasedFirst fully-independent release. Drop-in Terraform replacement.
Apr 30, 2024OpenTofu 1.7.0 — state encryption shipsFirst major feature that Terraform did not have. The functional gap begins.
Dec 16, 2024IBM closes HashiCorp acquisition for $6.4BTerraform now owned by IBM. Several enterprises with IBM-licensing friction accelerate OpenTofu evaluation.
Apr 23, 2025CNCF accepts OpenTofu at Sandbox maturityGovernance signal: cloud-native ecosystem recognises OpenTofu as the IaC standard going forward.
Dec 9, 2025OpenTofu 1.11.0Ephemeral values, write-only attributes, new enabled meta-argument, S3 object tagging.
Apr 8, 2026OpenTofu 1.11.6 (latest stable)Security patches GO-2026-4341 / 4340; v1.12.0-rc1 already in the release pipeline.

OpenTofu vs Terraform: What Actually Differs?

For most teams running apply against their own infrastructure, almost nothing differs. The HCL is identical, the providers are identical, the state format is interchangeable. The differences live at the edges: licence, governance, and a growing set of OpenTofu-exclusive features.

DimensionOpenTofu 1.11Terraform 1.13
LicenceMPL 2.0 (OSI-approved open source)BSL 1.1 (source available, converts to MPL after 4 years)
GovernanceLinux Foundation TSC; multi-vendorHashiCorp / IBM, single vendor
Binarytofuterraform
HCL versionSame as Terraform 1.5+Same
Provider protocolCompatible — Terraform providers workCompatible — OpenTofu providers work
Provider registryregistry.opentofu.org (mirror of HashiCorp registry + community)registry.terraform.io
State formatInteroperable (until you enable OpenTofu-only features)Interoperable (same caveat)
State encryptionBuilt-in (AES-GCM, 5 key providers)Not natively supported
Ephemeral values / write-only attrsYes (1.10/1.11)Yes (1.10+) — implementations differ
Early variable evaluationYes (1.8) — vars in backend config + module sourcesNo
Provider for_eachYes (1.9)Yes (1.10)
Loopable import blocksYes (1.7)Yes (1.7) — diverging since
enabled meta-argumentYes (1.11)No
Sentinel / OPA-as-a-serviceUse OPA / Conftest directlySentinel (HCP Terraform paid tier)
Managed cloudenv0, Spacelift, Scalr, Terramate, Atlantis, Pulumi Cloud (state)HCP Terraform (HashiCorp/IBM)

The compatibility line is sharp. As soon as you turn on encryption, ephemeral resources, or the enabled meta-argument, the state and configuration are no longer round-trippable with Terraform. Decide upfront whether your team wants OpenTofu compatibility or OpenTofu features — you cannot have both on the same stack.

What Did Each OpenTofu Release Add?

OpenTofu's minor-version cadence is roughly every six months, mirroring the Terraform support policy: three concurrent release lines supported at any time (latest plus two prior). Each release line gets a year of security patches.

1.6 — Jan 9, 2024

First independent release. Drop-in replacement for Terraform 1.5.x. Built-in test framework (tofu test) graduates from experimental.

Forked baseline

1.7 — Apr 30, 2024

State encryption (AES-GCM, PBKDF2 / AWS KMS / GCP KMS / OpenBao). Provider-defined functions. removed block. Loopable import blocks.

Largest single-release jump

1.8 — Jul 29, 2024

Early variable evaluation: variables and locals usable in backend configuration and module sources. Static module expansion.

Dynamic backends

1.9 — Jan 9, 2025

Provider iteration with for_each (multi-region / multi-account in a single configuration). cidrsubnets improvements.

Multi-region native

1.10 — Jun 24, 2025

Ephemeral input variables and outputs. PostgreSQL backend locking change (do not mix with 1.9 against the same DB).

Memory-only secrets

1.11 — Dec 9, 2025

Ephemeral resources and write-only managed-resource attributes. New enabled meta-argument (0 or 1 instances). S3 backend object tagging. Azure Vault key provider.

Current stable line

1.12 — RC1 Apr 29, 2026

Smaller-enhancements release: lifecycle destroy meta-argument, prevent_destroy can reference module symbols, concurrent provider downloads, WinRM deprecation.

In release candidate

1.13 — main branch

WinRM connection type removed. local-exec sets TRACEPARENT for W3C OpenTelemetry. contains() accepts null as second argument.

Supported until Aug 1, 2027

How Do You Install OpenTofu?

There is no installer wizard, no signup, no licence key. OpenTofu ships a single static binary for every major OS and architecture, signed with cosign. The fastest path on a developer machine is a package manager; the repeatable path for CI is the official install script.

One-liners by platform
# macOS / Linux (Homebrew)
brew install opentofu

# Linux (Snap)
sudo snap install --classic opentofu

# Debian / Ubuntu (apt repository)
curl --proto '=https' --tlsv1.2 -fsSL https://get.opentofu.org/install-opentofu.sh -o install.sh
chmod +x install.sh
./install.sh --install-method deb

# Windows (Winget)
winget install OpenTofu.Tofu

# Standalone binary (any platform)
curl --proto '=https' --tlsv1.2 -fsSL https://get.opentofu.org/install-opentofu.sh -o install.sh
chmod +x install.sh
./install.sh --install-method standalone

# Container image (CI, locked version)
docker run --rm -v "$PWD:/src" -w /src ghcr.io/opentofu/opentofu:1.11.6 init

Verify the install: tofu version should print the major version line plus the platform tuple. From there the workflow is identical to Terraform: tofu init, tofu plan, tofu apply, tofu destroy.

How Do You Migrate From Terraform?

For a single stack the migration is a five-minute swap. The cost scales with the number of stacks, the cleanliness of your registry references, and how many CI pipelines hard-code the terraform binary name.

  1. Land a clean plan first. Run terraform apply so the state matches the configuration. Then terraform plan must report no changes — if it does not, fix that before switching tools.
  2. Back up the state file. Local: copy terraform.tfstate and .terraform.lock.hcl. Remote: snapshot or version the backend object and confirm restore.
  3. Match versions. Migrating from Terraform 1.5.x or older? Install OpenTofu 1.6.x first, then upgrade. From Terraform 1.8.x or 1.9.x? Install matching OpenTofu 1.8.x / 1.9.x and step forward one minor at a time.
  4. Install OpenTofu. See above. Keep the terraform binary installed in parallel until you have validated the first tofu apply.
  5. Re-initialise. tofu init -upgrade downloads providers from registry.opentofu.org instead of HashiCorp's registry. The providers themselves are byte-identical mirrors for the common ones (AWS, Azure, GCP, Cloudflare, Kubernetes).
  6. Plan, then apply, then rest. tofu plan must produce zero changes. If it does not, roll back (re-run terraform init) and investigate before applying. tofu apply a small non-critical change to confirm the round-trip.
  7. Patch CI. Swap terraform for tofu in your GitHub Actions / GitLab CI / Jenkins steps. Replace hashicorp/setup-terraform with opentofu/setup-opentofu.
GitHub Actions step: Terraform → OpenTofu
- - name: Setup Terraform
-   uses: hashicorp/setup-terraform@v3
-   with:
-     terraform_version: 1.10.0
-
- - run: terraform init
- - run: terraform plan -out=plan.tfplan
- - run: terraform apply plan.tfplan

+ - name: Setup OpenTofu
+   uses: opentofu/setup-opentofu@v1
+   with:
+     tofu_version: 1.11.6
+
+ - run: tofu init
+ - run: tofu plan -out=plan.tfplan
+ - run: tofu apply plan.tfplan

If teams need to coexist — half on Terraform, half on OpenTofu, same modules — use .tofu file extensions for OpenTofu-only divergence. OpenTofu reads both .tf and .tofu; Terraform ignores .tofu.

How Does State Encryption Work?

State encryption is OpenTofu's flagship feature and the one Terraform users have asked for since 2016. Without it, your state file holds database passwords, private keys, IAM credentials, and instance IPs in plaintext — anyone with read access to the state backend has read access to every secret your IaC ever touched. With it, that file is an opaque AES-GCM blob.

Minimal state encryption with AWS KMS
terraform {
  encryption {
    key_provider "aws_kms" "primary" {
      kms_key_id = "arn:aws:kms:us-east-1:111122223333:key/abc-..."
      region     = "us-east-1"
      key_spec   = "AES_256"
    }

    method "aes_gcm" "encrypt_state" {
      keys = key_provider.aws_kms.primary
    }

    state {
      method   = method.aes_gcm.encrypt_state
      enforced = true
    }

    plan {
      method = method.aes_gcm.encrypt_state
    }
  }
}

The five supported key providers — each maps to a different ops trade-off:

PBKDF2

Local passphrase + iterations + hash. Zero infra dependencies; the operator types the passphrase or sets an env var. Fine for solo / lab / bootstrap. Painful for teams — the passphrase has to live somewhere.

key_provider "pbkdf2"

AWS KMS

CMK in AWS Key Management Service. IAM controls who can decrypt; CloudTrail logs every use. Default pick when you already run on AWS.

key_provider "aws_kms"

GCP KMS

Google Cloud Key Management. Same model as AWS KMS — IAM gating, audit log. Default pick on GCP.

key_provider "gcp_kms"

Azure Key Vault

Symmetric or asymmetric keys in Azure Key Vault. Added in v1.11. RBAC gates decrypt; Azure Monitor logs each access.

key_provider "azurevault"

OpenBao (beta)

OSS Vault fork via Transit Secret Engine; Vault 1.14-compatible. The cloud-agnostic option — self-host on any kube cluster.

key_provider "openbao"

External (experimental)

Any executable that returns a JSON-formatted key on stdout. Escape hatch for HSMs, custom KMS, sealed-secrets workflows.

key_provider "external"

Three production rules: rotate the key on a schedule (AES-GCM saturates after ~2³² messages with the same key — AWS/GCP KMS automate this), set enforced = true so a misconfigured CI run cannot accidentally write plaintext state, and configure a fallback key during rotations so in-flight plans don't break.

When Should You Not Use OpenTofu?

  • You depend on HCP Terraform / Terraform Cloud features. Sentinel policy-as-code, no-code modules, run tasks, drift detection, ephemeral workspaces — those are HashiCorp commercial products, not OpenTofu features. Replace with OPA + Conftest, Spacelift, env0, Scalr, or Terramate before you migrate.
  • Your tooling hard-codes the hashicorp/ registry. Any module that uses fully-qualified source = "hashicorp/..." references needs a registry mirror or a search-and-replace pass. The OpenTofu registry resolves bare provider names automatically, but FQN strings don't auto-rewrite.
  • You need a specific HashiCorp partner integration. A small set of providers — mostly HashiCorp's own (Vault, Boundary, Waypoint) — get features in Terraform first and may take a release or two to land on the OpenTofu registry. Check registry.opentofu.org before you assume parity.
  • You're mid-migration on multiple stacks at once. A single stack flips in minutes. Hundreds of stacks need a migration program — registry audits, CI patching, state-file snapshotting, rollback plans. The technical cost is small per stack; the coordination cost compounds.
  • You want a different language entirely. If you're leaving Terraform because of HCL fatigue, see the Pulumi primer — same provider ecosystem, TypeScript / Python / Go / C# instead.

Frequently Asked Questions

Is OpenTofu a drop-in replacement for Terraform?

Yes for the common case — same HCL, same providers, same state format, same CLI verbs (init, plan, apply, destroy). The binary is named tofu instead of terraform, the registry is registry.opentofu.org instead of registry.terraform.io, and a small set of newer features (encryption, ephemeral resources, enabled meta-argument, early variable evaluation) exist in OpenTofu only.

What is the latest OpenTofu version in 2026?

OpenTofu 1.11.6, released April 8, 2026. It is the latest stable in the v1.11 line (supported until August 1, 2026). The first release candidate of v1.12 (v1.12.0-rc1) was published April 29, 2026; v1.13 is on the main branch with support through August 1, 2027.

Is OpenTofu CNCF or Linux Foundation?

Both. The Linux Foundation hosts the project; CNCF accepted OpenTofu at Sandbox maturity on April 23, 2025. The CNCF granted a special licence exception so the project could keep its MPL 2.0 licence rather than relicensing to Apache 2.0, the CNCF default.

Can OpenTofu and Terraform share the same state file?

Yes, as long as you do not enable OpenTofu-only features. Vanilla state files are interchangeable in both directions — a Terraform team and an OpenTofu team can operate against the same backend during migration. The moment you turn on state encryption, ephemeral resources, or the enabled meta-argument, the state and configuration stop being round-trippable.

Does OpenTofu support state encryption?

Yes, since v1.7 (April 30, 2024). AES-GCM with six key providers: PBKDF2 (local passphrase), AWS KMS, GCP KMS, Azure Key Vault (1.11+), OpenBao (beta), and an experimental external command provider. Set enforced = true on the state block to prevent accidental plaintext writes.

How do I migrate from Terraform to OpenTofu?

Apply pending changes so terraform plan reports zero diff, back up the state file, install OpenTofu, run tofu init -upgrade, run tofu plan and verify zero changes, then tofu apply a small non-critical change. Match versions one minor at a time when migrating from Terraform 1.6.x or newer. Swap the binary name in CI pipelines (hashicorp/setup-terraform → opentofu/setup-opentofu).

Does OpenTofu work with existing Terraform providers?

Yes. The provider protocol is unchanged — every Terraform provider works with OpenTofu, and vice versa. The OpenTofu registry mirrors HashiCorp providers and adds community publishes. Custom in-house providers continue to work without recompilation.

References

Was this helpful?

Read next

Pulumi vs Terraform vs OpenTofu: Getting Started 2026

Pulumi 3.236 writes cloud infra in TypeScript, Python, Go, or C# under Apache 2.0. Side-by-side with Terraform and OpenTofu, install in 60 seconds, plus a first AWS S3 stack walkthrough and the state-backend matrix.

Continue →

Frequently Asked Questions

Is OpenTofu a drop-in replacement for Terraform?

Yes for the common case — same HCL, same providers, same state format, same CLI verbs (init, plan, apply, destroy). The binary is named tofu instead of terraform, the registry is registry.opentofu.org instead of registry.terraform.io, and a small set of newer features (encryption, ephemeral resources, enabled meta-argument, early variable evaluation) exist in OpenTofu only.

What is the latest OpenTofu version in 2026?

OpenTofu 1.11.6, released April 8, 2026. It is the latest stable in the v1.11 line (supported until August 1, 2026). The first release candidate of v1.12 (v1.12.0-rc1) was published April 29, 2026; v1.13 is on the main branch with support through August 1, 2027.

Is OpenTofu CNCF or Linux Foundation?

Both. The Linux Foundation hosts the project; CNCF accepted OpenTofu at Sandbox maturity on April 23, 2025. The CNCF granted a special licence exception so the project could keep its MPL 2.0 licence rather than relicensing to Apache 2.0, the CNCF default.

Can OpenTofu and Terraform share the same state file?

Yes, as long as you do not enable OpenTofu-only features. Vanilla state files are interchangeable in both directions — a Terraform team and an OpenTofu team can operate against the same backend during migration. The moment you turn on state encryption, ephemeral resources, or the enabled meta-argument, the state and configuration stop being round-trippable.

Does OpenTofu support state encryption?

Yes, since v1.7 (April 30, 2024). AES-GCM with six key providers: PBKDF2 (local passphrase), AWS KMS, GCP KMS, Azure Key Vault (1.11+), OpenBao (beta), and an experimental external command provider. Set enforced = true on the state block to prevent accidental plaintext writes.

How do I migrate from Terraform to OpenTofu?

Apply pending changes so terraform plan reports zero diff, back up the state file, install OpenTofu, run tofu init -upgrade, run tofu plan and verify zero changes, then tofu apply a small non-critical change. Match versions one minor at a time when migrating from Terraform 1.6.x or newer. Swap the binary name in CI pipelines (hashicorp/setup-terraform → opentofu/setup-opentofu).

Does OpenTofu work with existing Terraform providers?

Yes. The provider protocol is unchanged — every Terraform provider works with OpenTofu, and vice versa. The OpenTofu registry mirrors HashiCorp providers and adds community publishes. Custom in-house providers continue to work without recompilation.

Stay up to date

Get notified about new guides, tools, and cheatsheets.