Skip to content

How OpenTofu’s scores are calculated

The full audit trail, recomputed from the verdict data at build time through the same code that produced the leaderboard: verdict × quality × story weight per cell, cells sum to dimension scores, dimensions blend into the PA Score. Every number on the product page is reproducible from this page alone; for why the formula looks like this, see the methodology.

verdict factors: full ×1.0 · partial ×0.6 · disputed ×0.3 · none ×0.0 · n/a excluded from both sides · cell points = weight × quality × factor · cell max = weight × 10

PA Score30/100

Agent-ready 40.9 × 0.30 = 12.27

API quality 4.3 × 0.20 = 0.86

Openness 63.5 × 0.20 = 12.70

Built-in AI 12.0 × 0.15 = 1.80

Automation 17.0 × 0.15 = 2.55

(12.27 + 0.86 + 12.70 + 1.80 + 2.55) ÷ (0.30 + 0.20 + 0.20 + 0.15 + 0.15) = 30.18 ÷ 1.00 = 30.2

Scores are stored to 1 decimal; the product page’s pills round to whole numbers for display. Each dimension below shows the stories, verdicts, and cited evidence behind its number.

Agent-ready40.9/100×0.30 of the PA blend

Outside-in: can YOUR agent reach and drive this product — API, MCP, CLI, headless runs, agent docs.

Point an agent at llms.txt or agent-oriented docsweight 2

2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max

  • [probe] https://opentofu.org/llms.txtPROBE llms.txt: HTTP 404 at https://opentofu.org/llms.txt
  • [probe] https://opentofu.org/docs/.mdPROBE docs-md: HTTP 404 at https://opentofu.org/docs/.md

Run the product headlessly / in CI for automationweight 2

2 (weight) × 9 (quality) × 1.0 (full) = 18.0 of 20 max

  • [probe] https://opentofu.org/docs/cli/commands/plan/PROBE cli-plan (local run, macOS, OpenTofu v1.12.6): on the same minimal config used for Terraform, `tofu init -input=false` exited 0 and `tofu plan -input=false -detailed-exitcode -out=plan.out` exited 2 (changes present) proposing 1 create — drop-in Terraform-compatible headless plan workflow.
  • [probe] https://opentofu.org/docs/cli/commands/show/PROBE cli-plan-json (local run): `tofu show -json plan.out` exited 0 and emitted machine-readable plan JSON (format_version 1.2) with planned_values identical in shape to Terraform's, parseable by the same agent tooling.
  • [probe] https://opentofu.org/docs/cli/commands/apply/PROBE cli-apply (local run): `tofu apply -input=false -auto-approve plan.out` exited 0 ("Apply complete! Resources: 1 added") and `tofu destroy -auto-approve` exited 0 — full headless plan→apply→destroy loop, keyless, installed via `brew install opentofu`.
  • [claimed-docs] https://opentofu.org/docs/cli/commands/plan/The `tofu plan` command creates an execution plan, which lets you preview the changes that OpenTofu plans to make to your infrastructure.
  • [claimed-docs] https://opentofu.org/docs/cli/commands/plan/You can use the optional `-out=FILE` option to save the generated plan to a file on disk, which you can later execute by passing the file to `tofu apply` as an extra argument.

Plug MCP servers into this product so it can use their toolsweight 3

n/a — not applicable to this product: excluded from numerator and denominator

no evidence cited — the verdict rests on absence of evidence, re-checked on refresh

Connect an agent via an official MCP serverweight 3

n/a — not applicable to this product: excluded from numerator and denominator

no evidence cited — the verdict rests on absence of evidence, re-checked on refresh

Use an official CLIweight 2

2 (weight) × 9 (quality) × 1.0 (full) = 18.0 of 20 max

  • [probe] https://opentofu.org/docs/cli/official CLI documented at https://opentofu.org/docs/cli/
  • [probe] https://opentofu.org/docs/cli/commands/plan/PROBE cli-plan (local run, macOS, OpenTofu v1.12.6): on the same minimal config used for Terraform, `tofu init -input=false` exited 0 and `tofu plan -input=false -detailed-exitcode -out=plan.out` exited 2 (changes present) proposing 1 create — drop-in Terraform-compatible headless plan workflow.
  • [probe] https://opentofu.org/docs/cli/commands/show/PROBE cli-plan-json (local run): `tofu show -json plan.out` exited 0 and emitted machine-readable plan JSON (format_version 1.2) with planned_values identical in shape to Terraform's, parseable by the same agent tooling.
  • [probe] https://opentofu.org/docs/cli/commands/apply/PROBE cli-apply (local run): `tofu apply -input=false -auto-approve plan.out` exited 0 ("Apply complete! Resources: 1 added") and `tofu destroy -auto-approve` exited 0 — full headless plan→apply→destroy loop, keyless, installed via `brew install opentofu`.
  • [claimed-docs] https://opentofu.org/docs/cli/commands/plan/The `tofu plan` command creates an execution plan, which lets you preview the changes that OpenTofu plans to make to your infrastructure.
  • [claimed-docs] https://opentofu.org/docs/cli/commands/plan/You can use the optional `-out=FILE` option to save the generated plan to a file on disk, which you can later execute by passing the file to `tofu apply` as an extra argument.

Drive the product through a documented public APIweight 3

3 (weight) × 5 (quality) × 0.6 (partial) = 9.0 of 30 max

  • [probe] https://opentofu.org/docs/cli/commands/plan/PROBE cli-plan (local run, macOS, OpenTofu v1.12.6): on the same minimal config used for Terraform, `tofu init -input=false` exited 0 and `tofu plan -input=false -detailed-exitcode -out=plan.out` exited 2 (changes present) proposing 1 create — drop-in Terraform-compatible headless plan workflow.
  • [probe] https://opentofu.org/docs/cli/commands/show/PROBE cli-plan-json (local run): `tofu show -json plan.out` exited 0 and emitted machine-readable plan JSON (format_version 1.2) with planned_values identical in shape to Terraform's, parseable by the same agent tooling.
  • [probe] https://opentofu.org/docs/cli/commands/apply/PROBE cli-apply (local run): `tofu apply -input=false -auto-approve plan.out` exited 0 ("Apply complete! Resources: 1 added") and `tofu destroy -auto-approve` exited 0 — full headless plan→apply→destroy loop, keyless, installed via `brew install opentofu`.
  • [probe] https://opentofu.org/llms.txtPROBE llms.txt: HTTP 404 at https://opentofu.org/llms.txt
  • [probe] https://opentofu.org/docs/.mdPROBE docs-md: HTTP 404 at https://opentofu.org/docs/.md
  • [probe] https://opentofu.org/openapi.jsonPROBE openapi: all candidate paths 404 (https://opentofu.org/openapi.json, https://opentofu.org/swagger.json, https://opentofu.org/api/openapi.json, https://opentofu.org/.well-known/openapi.json)
  • [probe] https://opentofu.org/docs/cli/official CLI documented at https://opentofu.org/docs/cli/

Issue scoped/least-privilege API credentials for an agentweight 2

n/a — not applicable to this product: excluded from numerator and denominator

no evidence cited — the verdict rests on absence of evidence, re-checked on refresh

Build against official SDKsweight 2

2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max

  • [probe] https://opentofu.org/llms.txtPROBE llms.txt: HTTP 404 at https://opentofu.org/llms.txt
  • [probe] https://opentofu.org/docs/.mdPROBE docs-md: HTTP 404 at https://opentofu.org/docs/.md
  • [probe] https://opentofu.org/openapi.jsonPROBE openapi: all candidate paths 404 (https://opentofu.org/openapi.json, https://opentofu.org/swagger.json, https://opentofu.org/api/openapi.json, https://opentofu.org/.well-known/openapi.json)
  • [probe] https://opentofu.org/docs/cli/official CLI documented at https://opentofu.org/docs/cli/

Subscribe to events via webhooksweight 2

n/a — not applicable to this product: excluded from numerator and denominator

no evidence cited — the verdict rests on absence of evidence, re-checked on refresh

Agent-ready = 45.0 ÷ 110 × 100 = 40.9

API quality4.3/100×0.20 of the PA blend

The programmable surface once an agent is there — machine-readable spec, interactive docs, sandbox, versioning discipline.

Explore an interactive API reference with runnable examplesweight 2

2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max

  • [probe] https://opentofu.org/openapi.jsonPROBE openapi: all candidate paths 404 (https://opentofu.org/openapi.json, https://opentofu.org/swagger.json, https://opentofu.org/api/openapi.json, https://opentofu.org/.well-known/openapi.json)
  • [probe] https://opentofu.org/llms.txtPROBE llms.txt: HTTP 404 at https://opentofu.org/llms.txt
  • [claimed-docs] https://opentofu.org/docs/cli/commands/plan/The `tofu plan` command creates an execution plan, which lets you preview the changes that OpenTofu plans to make to your infrastructure.
  • [claimed-docs] https://opentofu.org/docs/cli/commands/test/The `tofu test` command lets you test your OpenTofu configuration by creating real infrastructure and checking that the required conditions (assertions) are met. Once the test is complete, OpenTofu destroys the resources it created.

Download a machine-readable API spec (OpenAPI or equivalent)weight 2

2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max

  • [probe] https://opentofu.org/openapi.jsonPROBE openapi: all candidate paths 404 (https://opentofu.org/openapi.json, https://opentofu.org/swagger.json, https://opentofu.org/api/openapi.json, https://opentofu.org/.well-known/openapi.json)
  • [probe] https://opentofu.org/llms.txtPROBE llms.txt: HTTP 404 at https://opentofu.org/llms.txt
  • [probe] https://opentofu.org/docs/.mdPROBE docs-md: HTTP 404 at https://opentofu.org/docs/.md

Test against a sandbox environment without touching production dataweight 1

1 (weight) × 5 (quality) × 0.6 (partial) = 3.0 of 10 max

  • [claimed-docs] https://opentofu.org/docs/cli/commands/test/The `tofu test` command lets you test your OpenTofu configuration by creating real infrastructure and checking that the required conditions (assertions) are met. Once the test is complete, OpenTofu destroys the resources it created.
  • [claimed-docs] https://opentofu.org/docs/cli/commands/test/The `tofu test` command lets you test your OpenTofu configuration by creating real infrastructure and checking that the required conditions (assertions) are met.
  • [claimed-docs] https://opentofu.orgDynamically generate provider configurations with for_each, eliminating repetitive code and improving maintainability. Perfect for multi-region deployments, multi-environment setups (dev/staging/prod)...
  • [claimed-docs] https://opentofu.org/docs/cli/commands/plan/The `tofu plan` command creates an execution plan, which lets you preview the changes that OpenTofu plans to make to your infrastructure.
  • [probe] https://opentofu.org/docs/cli/commands/plan/PROBE cli-plan (local run, macOS, OpenTofu v1.12.6): on the same minimal config used for Terraform, `tofu init -input=false` exited 0 and `tofu plan -input=false -detailed-exitcode -out=plan.out` exited 2 (changes present) proposing 1 create — drop-in Terraform-compatible headless plan workflow.

Rely on versioned APIs with a documented deprecation policyweight 2

2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max

  • [probe] https://opentofu.org/docs/cli/commands/show/PROBE cli-plan-json (local run): `tofu show -json plan.out` exited 0 and emitted machine-readable plan JSON (format_version 1.2) with planned_values identical in shape to Terraform's, parseable by the same agent tooling.
  • [probe] https://opentofu.org/docs/cli/official CLI documented at https://opentofu.org/docs/cli/

API quality = 3.0 ÷ 70 × 100 = 4.3

Openness63.5/100×0.20 of the PA blend

Can you leave, inspect, or self-host — data export, open source, portability.

Do everything through the API that I can do in the UIweight 2

n/a — not applicable to this product: excluded from numerator and denominator

  • [probe] https://opentofu.org/docs/cli/official CLI documented at https://opentofu.org/docs/cli/
  • [probe] https://opentofu.org/docs/cli/commands/plan/PROBE cli-plan (local run, macOS, OpenTofu v1.12.6): on the same minimal config used for Terraform, `tofu init -input=false` exited 0 and `tofu plan -input=false -detailed-exitcode -out=plan.out` exited 2 (changes present) proposing 1 create — drop-in Terraform-compatible headless plan workflow.
  • [probe] https://opentofu.org/docs/cli/commands/apply/PROBE cli-apply (local run): `tofu apply -input=false -auto-approve plan.out` exited 0 ("Apply complete! Resources: 1 added") and `tofu destroy -auto-approve` exited 0 — full headless plan→apply→destroy loop, keyless, installed via `brew install opentofu`.
  • [probe] https://opentofu.org/openapi.jsonPROBE openapi: all candidate paths 404 (https://opentofu.org/openapi.json, https://opentofu.org/swagger.json, https://opentofu.org/api/openapi.json, https://opentofu.org/.well-known/openapi.json)

Export all of my data in open formats and leaveweight 3

3 (weight) × 6 (quality) × 0.6 (partial) = 10.8 of 30 max

  • [claimed-docs] https://opentofu.org/manifesto/Now that we are part of the Linux Foundation, we can guarantee that OpenTofu will remain: Truly open source
  • [claimed-docs] https://opentofu.org/manifesto/Backwards-compatible - so that the existing code can drive value for years to come
  • [probe] https://opentofu.org/docs/cli/commands/show/PROBE cli-plan-json (local run): `tofu show -json plan.out` exited 0 and emitted machine-readable plan JSON (format_version 1.2) with planned_values identical in shape to Terraform's, parseable by the same agent tooling.
  • [probe] https://opentofu.org/llms.txtPROBE llms.txt: HTTP 404 at https://opentofu.org/llms.txt
  • [community] https://news.ycombinator.com/item?id=40365198Fortunately using OpenTofu is just s/terraform/opentofu/g at this point.

Read the product's source under an open licenseweight 2

2 (weight) × 8 (quality) × 1.0 (full) = 16.0 of 20 max

  • [github] https://github.com/opentofu/opentofuOpenTofu builds a graph of all your resources, and parallelizes the creation and modification of any non-dependent resources.
  • [claimed-docs] https://opentofu.org/manifesto/Now that we are part of the Linux Foundation, we can guarantee that OpenTofu will remain: Truly open source
  • [community] https://news.ycombinator.com/item?id=37581132It seems the license info is not readily available on the website. I can easily find it in the GitHub repo but not on the website. I think it would be nice to have it clearly visible on the website, too.

Self-host the core productweight 3

3 (weight) × 8 (quality) × 1.0 (full) = 24.0 of 30 max

  • [claimed-docs] https://opentofu.org/docs/intro/install/You can install OpenTofu via a wide range of methods. Please select your operating system and installation method
  • [claimed-docs] https://opentofu.org/manifesto/Now that we are part of the Linux Foundation, we can guarantee that OpenTofu will remain: Truly open source
  • [probe] https://opentofu.org/docs/cli/commands/plan/PROBE cli-plan (local run, macOS, OpenTofu v1.12.6): on the same minimal config used for Terraform, `tofu init -input=false` exited 0 and `tofu plan -input=false -detailed-exitcode -out=plan.out` exited 2 (changes present) proposing 1 create — drop-in Terraform-compatible headless plan workflow.
  • [probe] https://opentofu.org/docs/cli/commands/show/PROBE cli-plan-json (local run): `tofu show -json plan.out` exited 0 and emitted machine-readable plan JSON (format_version 1.2) with planned_values identical in shape to Terraform's, parseable by the same agent tooling.
  • [probe] https://opentofu.org/docs/cli/commands/apply/PROBE cli-apply (local run): `tofu apply -input=false -auto-approve plan.out` exited 0 ("Apply complete! Resources: 1 added") and `tofu destroy -auto-approve` exited 0 — full headless plan→apply→destroy loop, keyless, installed via `brew install opentofu`.
  • [claimed-docs] https://opentofu.org/manifesto/Backwards-compatible - so that the existing code can drive value for years to come

Openness = 50.8 ÷ 80 × 100 = 63.5

Built-in AI12.0/100×0.15 of the PA blend

Inside-out: how agentic the product itself is for its users — built-in assistants, autonomous features.

Get AI-generated insights and suggestions from my data inside the productweight 2

n/a — not applicable to this product: excluded from numerator and denominator

no evidence cited — the verdict rests on absence of evidence, re-checked on refresh

Set up automations that run autonomously in the backgroundweight 2

2 (weight) × 4 (quality) × 0.6 (partial) = 4.8 of 20 max

  • [probe] https://opentofu.org/docs/cli/commands/plan/PROBE cli-plan (local run, macOS, OpenTofu v1.12.6): on the same minimal config used for Terraform, `tofu init -input=false` exited 0 and `tofu plan -input=false -detailed-exitcode -out=plan.out` exited 2 (changes present) proposing 1 create — drop-in Terraform-compatible headless plan workflow.
  • [probe] https://opentofu.org/docs/cli/commands/show/PROBE cli-plan-json (local run): `tofu show -json plan.out` exited 0 and emitted machine-readable plan JSON (format_version 1.2) with planned_values identical in shape to Terraform's, parseable by the same agent tooling.
  • [probe] https://opentofu.org/docs/cli/commands/apply/PROBE cli-apply (local run): `tofu apply -input=false -auto-approve plan.out` exited 0 ("Apply complete! Resources: 1 added") and `tofu destroy -auto-approve` exited 0 — full headless plan→apply→destroy loop, keyless, installed via `brew install opentofu`.

Delegate tasks to a built-in AI assistant inside the productweight 3

n/a — not applicable to this product: excluded from numerator and denominator

no evidence cited — the verdict rests on absence of evidence, re-checked on refresh

Operate the product with natural-language commandsweight 2

2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max

  • [probe] https://opentofu.org/llms.txtPROBE llms.txt: HTTP 404 at https://opentofu.org/llms.txt
  • [probe] https://opentofu.org/docs/.mdPROBE docs-md: HTTP 404 at https://opentofu.org/docs/.md
  • [probe] https://opentofu.org/docs/cli/official CLI documented at https://opentofu.org/docs/cli/
  • [claimed-docs] https://opentofu.org/docs/cli/commands/plan/The `tofu plan` command creates an execution plan, which lets you preview the changes that OpenTofu plans to make to your infrastructure.

Built-in AI = 4.8 ÷ 40 × 100 = 12.0

Automation17.0/100×0.15 of the PA blend

Depth of automation primitives — rules, scheduling, bulk operations, webhooks.

Perform bulk operations across many items at onceweight 2

2 (weight) × 6 (quality) × 0.6 (partial) = 7.2 of 20 max

  • [github] https://github.com/opentofu/opentofuOpenTofu builds a graph of all your resources, and parallelizes the creation and modification of any non-dependent resources.
  • [claimed-docs] https://opentofu.orgSelectively exclude resources from operations with the -exclude flag. This provides more control during testing and rollouts, allowing you to focus on specific parts of your infrastructure.
  • [claimed-docs] https://opentofu.orgDynamically generate provider configurations with for_each, eliminating repetitive code and improving maintainability.
  • [claimed-docs] https://opentofu.orgUpdate all your modules programmatically with a single variable change. Never miss updating a module version by accident - keep your infrastructure consistent and secure with centralized version management.
  • [claimed-docs] https://opentofu.orgDynamically generate provider configurations with for_each, eliminating repetitive code and improving maintainability. Perfect for multi-region deployments, multi-environment setups (dev/staging/prod)...

Define rules that trigger actions automatically on eventsweight 3

3 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 30 max

no evidence cited — the verdict rests on absence of evidence, re-checked on refresh

Schedule recurring jobs or workflowsweight 2

n/a — not applicable to this product: excluded from numerator and denominator

no evidence cited — the verdict rests on absence of evidence, re-checked on refresh

Version, review, and roll back my automationsweight 1

1 (weight) × 5 (quality) × 0.6 (partial) = 3.0 of 10 max

  • [claimed-docs] https://opentofu.orgVersion control your infrastructure with OpenTofu. Track changes, collaborate with your team, and deploy DNS configurations with a single command.
  • [claimed-docs] https://opentofu.org/docs/cli/commands/plan/The `tofu plan` command creates an execution plan, which lets you preview the changes that OpenTofu plans to make to your infrastructure.
  • [claimed-docs] https://opentofu.org/docs/cli/commands/plan/You can use the optional `-out=FILE` option to save the generated plan to a file on disk, which you can later execute by passing the file to `tofu apply` as an extra argument.
  • [probe] https://opentofu.org/docs/cli/commands/plan/PROBE cli-plan (local run, macOS, OpenTofu v1.12.6): on the same minimal config used for Terraform, `tofu init -input=false` exited 0 and `tofu plan -input=false -detailed-exitcode -out=plan.out` exited 2 (changes present) proposing 1 create — drop-in Terraform-compatible headless plan workflow.
  • [probe] https://opentofu.org/docs/cli/commands/apply/PROBE cli-apply (local run): `tofu apply -input=false -auto-approve plan.out` exited 0 ("Apply complete! Resources: 1 added") and `tofu destroy -auto-approve` exited 0 — full headless plan→apply→destroy loop, keyless, installed via `brew install opentofu`.

Automation = 10.2 ÷ 60 × 100 = 17.0