Bicep
Bicep is a full peer language to Terraform on the same canvas. Open your .bicep and .bicepparam files and you get the same graph: params, vars and outputs as nodes, resources as nodes, references as wires, and the value each row resolves to shown in place. The engine is a hand-rolled Bicep lexer/parser/evaluator compiled to the same WebAssembly bundle — no Bicep CLI is required, and your code never leaves your machine.
The same canvas, the same moves
Everything you do with Terraform you do with Bicep:
- Trace — click a row and its whole lineage lights up while everything else dims.
- Resolve — see the computed value, not the expression, with a mark that says how it got there.
- Edit — drag a wire’s source dot to re-point a reference, or type a new expression in the properties panel. It is validated as Bicep before it can touch a file.
- Review and Save — every change shows its exact one-line diff, staged until you press Save. Only the expression you changed is rewritten; comments, alignment and ordering stay exactly as you wrote them.
- Analyze and Show Diffs work the same way. Upgrade Preview and copy-between-canvases are Terraform-first for now.
See The canvas and Editing for the shared mechanics.
What maps to what
If you already know the Terraform experience, here is how Bicep lines up:
| Terraform | Bicep |
|---|---|
.tf source files | .bicep source files |
.tfvars values file | .bicepparam file |
variable | param — addressed as var.<name> |
locals | var — addressed as local.<name> |
output | output — addressed as output.<name> |
a resource (aws_instance.web) | a resource by its symbol (sa, or a nested child sa::blob) |
| simulated workspaces | not applicable — use more than one .bicepparam file |
Environments are .bicepparam files
A Bicep canvas does not have simulated workspaces. Instead, add more than one .bicepparam file to the canvas — each is already its own environment (dev.bicepparam, prod.bicepparam) and each is evaluated in place.
One canvas holds one language
A canvas is Terraform or Bicep, never both — the first file you add decides which. If you point one at a folder that contains both kinds, SchematIaC asks you to add them separately rather than guessing.
Modules
A local Bicep module (a referenced .bicep file) loads as a box with input and output ports, like a Terraform module. A registry module (br:) shows as a box with a note rather than real ports — there is no local vendoring step to resolve it against yet.
What is not evaluated yet
- Loop resources (
[for ...]) render as a single node, the same way Terraform’scount/for_eachdo. - User-defined Bicep functions (
func) are not evaluated; rows that use them read unresolved rather than guess. - The Folder Overview is Terraform-only for now — a Bicep folder opens straight on a canvas instead.
The full list lives in Limits.
Bring your AI agent
The same Bicep engine is available to AI agents over the MCP server: your agent can read the graph, resolve a value, and get a validated Bicep diff for a proposed change — still local, still no CLI binary.
SchematIaC Docs