Terraform

Terraform is where SchematIaC started, and it is still the fullest experience. Open your .tf and .tfvars files on a canvas and every block becomes a node, every attribute a row, and every reference a wire — with the value each row actually resolves to shown in place. It works with OpenTofu too; it is the same HCL, and no terraform binary is required.

What becomes what

Terraform On the canvas
resource, data, module one node each, attributes as rows
variable blocks one node per file, one row per variable
.tfvars entries one node per file, one row per assignment
locals, output blocks one node per file, one row per name
var.x, local.y, aws_vpc.main a wire into the consuming row
a tfvars key matching a variable a dashed bind wire (not editable)
nested blocks flattened to dotted rows (root_block_device.volume_size)

See The canvas for what every value mark means, and Editing for how re-pointing and value edits are written back.

Resolved values, honest about apply

The canvas evaluates your HCL locally and shows the computed value, not the expression: "${var.env}-acme" reads "dev-acme". Anything that genuinely cannot be known before terraform apply reads (known after apply) rather than a guess. try() and can() evaluate; a few other functions still do not — see Limits.

Simulated workspaces

One canvas is one definition — the same model as Terraform itself. To see what that definition becomes in dev, test or prod, a Terraform canvas holds simulated workspaces: named sets of variable values, applied over defaults and tfvars exactly as a real workspace would inject them at plan time. Switch between them from the toolbar, or compare them all at once. Full detail in Simulated workspaces.

Modules

Local module sources (./, ../) load automatically when their caller is added; each appears as a box with input and output ports. Registry and git modules load from what terraform init vendored under .terraform/modules. An unvendored registry module is a warning on its own box — not an error that blocks the canvas. You cannot drill into a module’s internals yet.

Upgrade Preview

Upgrade on the toolbar — or Preview upgrade… on a registry module, or Preview provider upgrade… on a resource. Pick a newer version and the canvas paints what that bump would do here: inputs you set that vanish, arguments the target docs no longer list, required inputs you lack. Worded as what the docs say, never “this will break.” Full walk-through in Upgrade Preview.

Folder Overview

For the shape of a whole tree rather than the wiring of one root, the Folder Overview reads every .tf and .tfvars beneath a folder into a read-only picture of directories, counts, and which directories compose which. It is Terraform-only for now.

Copy between canvases

Select resource, data or module nodes and press Ctrl+C, then Ctrl+V on another canvas. The block arrives byte for byte, comments included. Terraform only — see Editing.

What is not evaluated yet

  • A few Terraform-only functions (templatefile, cidrsubnet) are not evaluated; those rows read unresolved, with the reason, rather than a guess.
  • count and for_each are not expanded: a resource with three instances is one node, and each.* references draw no wire.

The full list lives in Limits.

Bring your AI agent

The same Terraform engine is available to AI agents over the MCP server — where a value comes from, what it resolves to, an upgrade’s blast radius, and a validated diff for a proposed change, all local. SchematIaC does not compete with your agent. It is the tool that agent uses.