Developer & cloud explorers

Terraform Plan & Drift Explorer

Paste terraform show -json: drift, replacement reasons, attribute diffs and risky deletes.

Run `terraform plan -out=tfplan && terraform show -json tfplan` (full detail) or paste `terraform plan -json` output (actions and reasons only, no attribute values).

Read in memory as UTF-8 text and not stored. Max 5 MiB.

Try an example: Database replacement, bucket deletion, drift on a security group · terraform plan -json stream (GCP)

How it works

Paste the JSON of a saved plan (`terraform show -json tfplan`) or the `terraform plan -json` stream. You get counts per action, every resource change with Terraform's own reason (tainted, cannot update, removed from config…), attribute-level before/after diffs with sensitive values masked and "known after apply" marked, the drift Terraform detected outside of Terraform during refresh, and risk flags for deleting or replacing databases, buckets and other stateful resources or for opening access.

  • Reads the documented Terraform JSON plan format: resource_changes[].change.actions (["delete","create"] = destroy-then-create replacement, ["create","delete"] = create_before_destroy), action_reason, replace_paths, previous_address (moved), importing; resource_drift[] for changes made outside Terraform; output_changes.
  • Attribute diffs flatten before/after into dotted paths; after_unknown marks values "known after apply"; any path covered by before_sensitive/after_sensitive is replaced by "(sensitive value)" and never shown.
  • Drift: before = last state, after = refreshed real-world value. If the same address has an update planned, applying reverts the drift; a no-op plan means the configuration already matches (or ignore_changes).
  • Risk: delete/replace of a stateful type (databases, buckets, volumes, queues, keys, secrets, DNS zones…) is critical; other deletes high; other replacements medium; updates that open 0.0.0.0/0, grant "*" principals/actions, disable deletion protection, encryption, backups or S3 public-access blocks are high; force_destroy / skip_final_snapshot on deletion escalate.
  • The plan -json stream contains actions and reasons but no attribute values, so attribute diffs and value-based checks need the show -json form.

For scripts and AI agents

  • JSON API: POST https://terraformdriftexplorer.usefulweb.site/api/v1/calculate (same calculation as this page)
  • Interface description: OpenAPI 3.1 · AI guide: llms.txt
  • MCP server (Streamable HTTP): https://terraformdriftexplorer.usefulweb.site/mcp · tool name terraform_drift_explorer
Example request
curl -s -X POST https://terraformdriftexplorer.usefulweb.site/api/v1/calculate \
  -H 'content-type: application/json' \
  -d '{…see OpenAPI examples…}'

Related tools

Feedback