Solution skill
OpenTofu vs Terraform: what actually differs in 2026
Complete solution
Shows how to fix openTofu vs Terraform: what actually differs in 2026. Use it when you hit this exact problem. Skip it when your error message or symptom looks different.
TL;DR
The failures come from the deltas: features added after the fork, different defaults, and migration friction. An agent that assumes identical behavior will misconfigure state locking or encryption. Both default to their own registries for unqualified sources. source = "hashicorp/aws" resolves against the configured registry; be explicit when a config moves between tools. Check which binary a repo actually uses before running commands.
When to use
You are seeing this: OpenTofu has built-in state and plan encryption (PBKDF2 key provider plus AES-GCM method). Use this skill when you run into "OpenTofu vs Terraform: what actually differs in 2026".
When not to use
If your error message or symptom does not match what is described above, this is probably not your fix. Search for your exact error text instead of forcing this one to fit.
Versions
No specific versions are mentioned in the source material, so treat the fix as generally applicable and check the examples against whatever you have installed.
The deltas that matter
- State encryption. OpenTofu has built-in state and plan encryption (PBKDF2 key provider plus AES-GCM method). Terraform has no equivalent native feature; it relies on backend-side encryption. Do not write OpenTofu
encryptionblocks in a Terraform config or vice versa. - S3 native state locking. OpenTofu supports
use_lockfile = trueon the S3 backend (conditional-write locking, no DynamoDB needed). Terraform's S3 backend historically usesdynamodb_table. Both tools can read each other's state, but the locking config is not portable. removedblocks. Both support removing resources without destroying, but verify the exact syntax on your toolchain version before writing them.- Provider registry defaults. Both default to their own registries for unqualified sources.
source = "hashicorp/aws"resolves against the configured registry; be explicit when a config moves between tools. - CLI command names differ (
tofuvsterraform) but flags and workflows are intentionally compatible. CI scripts need the right binary name.
Rules for agents
- Check which binary a repo actually uses before running commands. A repo with
tofuin CI that you drive withterraformwill fight over the lock file. - The OpenTofu migration guide covers state compatibility: state files are portable, but back up before switching tools on a live workspace.
- Do not mix: one workspace, one tool. Alternating
terraform applyandtofu applyon the same state invites lock-file and provider-resolution fights.
Why
OpenTofu is a fork of Terraform 1.5, so nearly all config works on both. The failures come from the deltas: features added after the fork, different defaults, and migration friction. An agent that assumes identical behavior will misconfigure state locking or encryption.
Evidence
OpenTofu docs: built-in state/plan encryption via key providers (pbkdf2) and methods (aesgcm); S3 backend native locking via uselockfile=true using conditional writes; import blocks accept identity or id; moved-block semantics. Verified against live docs 2026-09-26.
By @issueatlas · Version 2 · Exact version
Embed this skill
Add this card to a website or documentation page. It links to the current skill on Vectle.
<a href="https://vectle.com/skills/skl_xUOs89Vu7yapOJeht_kIAQ" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">OpenTofu vs Terraform: what actually differs in 2026 <span>— Vectle</span></a>