Skip to content

Rewrite Pulumi vs. OpenTofu page#18929

Open
jkodroff wants to merge 1 commit into
masterfrom
jkodroff/revise-vs-opentofu
Open

Rewrite Pulumi vs. OpenTofu page#18929
jkodroff wants to merge 1 commit into
masterfrom
jkodroff/revise-vs-opentofu

Conversation

@jkodroff
Copy link
Copy Markdown
Member

Replaces the old marketing-toned Pulumi vs. OpenTofu comparison with a neutral, factual rewrite following the structure of the CloudFormation rewrite (#18908) and the parent epic (#18673). The page has been optimized for SEO/AEO.

Changes

  • Full rewrite of content/docs/iac/comparisons/opentofu.md: feature-by-feature comparison table, key-differences sections, adoption/migration paths, and an AEO-friendly FAQ.
  • Surfaces OpenTofu-specific Pulumi capabilities: Any Terraform Provider works against the OpenTofu Registry; Pulumi can execute OpenTofu modules directly via pulumi-terraform-module; pulumi convert --from terraform handles OpenTofu HCL.
  • Preserves all four historical aliases.
  • Adds a STYLE-GUIDE.md exception allowing FAQ-section H3s to end in ? so the site's FAQPage JSON-LD auto-collector detects them.

Closes #18898

Replaces the old comparison page with a neutral, factual rewrite
following the structure established by the CloudFormation rewrite
(#18908) and the parent epic (#18673). Preserves all legacy URLs
via aliases.

The page has also been optimized for SEO/AEO.

Also adds a STYLE-GUIDE.md exception allowing FAQ-section H3s to
end in `?` so the site's FAQPage JSON-LD auto-collector detects
them as questions.

Closes #18898

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@jkodroff
Copy link
Copy Markdown
Member Author

This PR intentionally does not delete the TF vs. OpenTofu page, which I believe is per @alexleventer's wishes.

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented May 13, 2026

Docs review

Solid rewrite — the new structure (intro → what-each-is → comparison table → key differences → when-to-choose → adoption → FAQ → next steps) reads well, the four historical aliases are preserved, and the inline links resolve. Verified ~15 internal paths including /docs/iac/concepts/providers/any-terraform-provider/, /docs/iac/guides/building-extending/using-existing-tools/use-terraform-module/, the registry terraform.state.get*Reference functions, and anchor targets like #available-encryption-providers and #types-of-providers.

A few items to address.

Accuracy: the import resource option does not generate code

content/docs/iac/comparisons/opentofu.md:50 (table cell for "Import existing resources"):

pulumi import and the import resource option, both of which generate code in your language

Only the pulumi import CLI command generates code. The import resource option requires you to author the resource declaration by hand and pass { import: \"<id>\" } as an option — see content/docs/iac/concepts/resources/options/import.md:18-40, where the example shows the user writing the aws.ec2.SecurityGroup/aws.ec2.Instance constructors themselves.

| Import existing resources | [`pulumi import`](/docs/iac/guides/migration/import/) generates code in your language; the [`import` resource option](/docs/iac/concepts/resources/options/import/) attaches an existing resource to a hand-authored declaration | [`tofu import`](https://opentofu.org/docs/cli/commands/import/) and the [`import` block](https://opentofu.org/docs/language/import/); HCL for the imported resource must be authored by hand |

STYLE-GUIDE.md exception (line 43)

The exception is well-scoped and helpfully names the auto-collector file. One tightening suggestion — the current wording allows the exception in any "Frequently asked questions" section, but layouts/partials/schema/collectors/faq-entity.html actually detects question-formatted H3s anywhere on the page (it only treats all H3s as questions on /faq URLs). The rule as written is fine for guiding authors; just confirm the FAQ-section scoping is the intent rather than "anywhere a question H3 makes sense."

Stylistic notes (non-blocking)

  • Em-dash density: 18 em-dashes in the file. The blog/marketing em-dash guideline doesn't strictly apply to reference docs, but several reads could be tightened — for example opentofu.md:65 ("The result is a strongly typed local package usable from any Pulumi language — so an OpenTofu user's existing third-party providers are first-class citizens…") and opentofu.md:69 ("The difference is in surface area — Pulumi offers an embeddable SDK…") could use periods or colons for variety.
  • Hyphenation consistency: opentofu.md:35 uses "open-source" (hyphenated) before "declarative," while opentofu.md:77 and opentofu.md:134 use "open source" without a hyphen as predicate adjectives. Both are defensible; consider picking one for the file.
  • Slight redundancy: The "no separate --from opentofu flag" point appears at both opentofu.md:109 and opentofu.md:126. Acceptable for emphasis between the body and the FAQ, just flagging it.

Verified good

  • All four legacy aliases retained (opentofu.md:16-20).
  • FAQ H3s all end with ? — matches the new STYLE-GUIDE exception and the FAQ JSON-LD collector's detection logic.
  • Sentence-case H2/H3 throughout; ordered lists use 1. per AGENTS.md.
  • No "easy" or "simple" usage.
  • The #adoption-coexistence-conversion-and-import and #available-encryption-providers in-page anchors are correctly Hugo-generated from the heading text.
  • Meta description trimmed to a concise, keyword-forward sentence — good for SEO/AEO.

Mention me (@claude) if you want another pass after edits or want me to fix the table cell directly.

@pulumi-bot
Copy link
Copy Markdown
Collaborator

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Comparisons: Pulumi vs. OpenTofu

2 participants