The canvas

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)

Declarations group per file because they are bags of named values; resources are objects and stay individual. A wire from a resource to a resource anchors at the source node’s header, because the attribute being read (aws_vpc.main.id) is computed, not in the file.

Value marks

Every row shows its effective value — what Terraform would actually use — and a corner mark says how it got there:

  • reference — the value comes from another block (var.x, local.y)
  • interpolated — a string built with ${…}
  • expression — computed (merge(...), conditionals)
  • override dot — a tfvars or workspace value displaced the default
  • no mark — a literal, written exactly as shown

Hover any marked value for the definition behind it. Anything that cannot be known before terraform apply says so honestly — it reads unknown or unresolved rather than guessing. The collapsible Legend in the corner repeats all of this next to the canvas.

Tracing

Click a row to light up its whole lineage, upstream and downstream; everything uninvolved dims. Click a node header for the node’s full fan-in and fan-out. Click empty canvas to clear.

Navigate (toolbar) follows your selection into the text editor: the file opens beside the canvas with the exact line marked. A click in the file panel overrides the canvas selection.

Layout

New nodes lay out left-to-right by dependency: tfvars feed variables feed resources. Drag nodes wherever you like — positions persist in the .canvas file, one line per node, so parallel edits merge cleanly. Nodes can be resized, and the name/value column split adjusted. Moving things never touches your Terraform.

Grouping

The Group picker turns the canvas into labelled containers — by file, or by a resolved attribute such as location or resource_group_name. A container folds to a single box; wires crossing the fold re-route to its edge. Grouping is a view: your saved layout is parked and comes back untouched when you switch back to No grouping.

The file panel

Files (toolbar) lists every file on the canvas as a collapsible tree with the resources each contributes. Click a file to light up everything it adds; click a resource to focus that node; right-click to open the file. Files with unsaved editor changes are marked.