From install to your first write-back in about five minutes. No terraform binary required; everything runs inside VS Code.
Install SchematIaC from the VS Code Marketplace, or search “SchematIaC” in the Extensions view. Needs VS Code 1.74 or newer. It also runs in OpenTofu projects — same HCL.
Opening a canvas without a licence shows an activation screen. Click Start 14-day trial, enter an email, then type the 6-digit code we send you — that unlocks everything for 14 days. Those two requests are the extension's only network calls; an email address and an anonymous installation digest go to the licensing service. Never any Terraform. See how we handle your code.
Run New SchematIaC Canvas from the command palette and name it. Fill it by right-clicking a .tf, .tfvars or folder in the Explorer and choosing Add to SchematIaC Canvas, or with + Add file on the canvas toolbar. The canvas is a plain file you check in. Name it for the project — one canvas is one definition, and simulated workspaces parameterize it for dev, test and prod:
.schematiac/ analytics.canvas # workspaces: dev, test, prod networking.canvas # workspaces: dev, prod
Each block is a node and its attributes are rows; variables, locals, outputs and tfvars entries group into one node per file. References are wires. A row shows what the value resolves to — "${var.env}-acme" displays as "dev-acme" — with a corner mark saying it was computed, and the expression behind it on hover. Click a row to light up its whole lineage; values that genuinely cannot be known before apply show as (known after apply).
Drag the blue dot at a wire's source onto a different variable, or edit an expression in the properties panel. Both show you the exact diff before anything is staged; nothing reaches disk until Save, which reviews every changed file one last time. Only what you changed is rewritten:
- instance_type = var.instance_type # standard workload+ instance_type = var.machine_class # standard workload
./, ../); registry and git modules are roadmap.templatefile, cidrsubnet, try) stay unresolved, and count/for_each instances are not expanded.