<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://docs.schematiac.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://docs.schematiac.com/" rel="alternate" type="text/html" /><updated>2026-09-19T23:27:12+00:00</updated><id>https://docs.schematiac.com/feed.xml</id><title type="html">SchematIaC Docs</title><subtitle>Documentation for SchematIaC — the Terraform &amp; Bicep visual editor for VS Code. Covers the canvas, editing, Upgrade Preview, the MCP server for AI agents, licensing, and the blog.</subtitle><entry><title type="html">I spent four years trying to see infrastructure</title><link href="https://docs.schematiac.com/blog/four-years-trying-to-see-infrastructure.html" rel="alternate" type="text/html" title="I spent four years trying to see infrastructure" /><published>2026-09-19T00:00:00+00:00</published><updated>2026-09-19T00:00:00+00:00</updated><id>https://docs.schematiac.com/blog/four-years-trying-to-see-infrastructure</id><content type="html" xml:base="https://docs.schematiac.com/blog/four-years-trying-to-see-infrastructure.html"><![CDATA[<p class="blog-meta">September 19, 2026</p>

<p>I spent four years trying to see infrastructure. SchematIaC is the
editor I kept restarting.</p>

<p>Four years ago I won first place in NVIDIA’s Omniverse developer
competition for
<a href="https://metacloudexplorer.com">MetaCloudExplorer</a>. I worked with
graphic artist Andy Green to put my Azure estate in a 3D space. Andy
turned the Azure icons into models. I wrote an Omniverse extension that
grouped, aggregated, and let you walk the cloud in ways a portal never
will.</p>

<p>NVIDIA wrote it up as
<a href="https://blogs.nvidia.com/blog/gavin-stevens-omniverse-developer/">Meet the Omnivore</a>.</p>

<p>It was cool. It was not useful. Omniverse sat behind a walled garden:
special hardware, special software, Python, an extension install that
only people who already lived in that world would attempt. I had built
a prototype to learn Omniverse. The unfinished idea was bigger than the
prototype. I did not just want to see the cloud. I wanted to edit it.</p>

<h2 id="the-first-editor-that-did-not-survive-the-company">The first editor that did not survive the company</h2>

<p>After the win I teamed up with grand-prize winner Yizhou Zhou and
started Digital Bot Lab. One of the first things we tried was
<a href="https://visualiac.com">VisualIAC</a> — a visual Terraform editor at the
provider layer. That was my world. Yizhou’s was robotics. He helped us
get seed money from <a href="https://www.miracleplus.com/">MiraclePlus</a> to work
on digital twins for robots, and VisualIAC stalled.</p>

<p>I spent that stretch on industrial digital twins in Azure and Omniverse.
Yizhou went on to NVIDIA. Digital Bot Lab did not last long. The time
was not wasted — Azure IoT, twins, a sharp collaborator — but the IaC
editor was still sitting on the bench. The idea was right. The vehicle
was not.</p>

<h2 id="blast-radius-is-the-actual-job">Blast radius is the actual job</h2>

<p>I wanted to go back to VisualIAC. I also had a full-time job. Instead I
spent a few years doing cloud infrastructure for a friend, all in Bicep.
That is where the language stopped being abstract.</p>

<p>Terraform and Bicep are not programming languages in the usual sense.
They are declarations: you describe what you want, and an engine builds
it. Terraform keeps a state file and a plan of exactly what will change.
Bicep rides Microsoft’s ARM engine into Azure. HashiCorp’s
<a href="https://developer.hashicorp.com/terraform/tutorials/infrastructure-as-code">IaC intro</a>
covers the textbook version.</p>

<p>At scale they stop being simple. A resource reads a workspace value that
lands in a variable that is interpolated into a name that is passed into
a module that pins a provider. Change one string and you need a plan to
see what else moved. Cloud stops being “a thing you click in a portal”
and becomes code: branches, reviews, releases.</p>

<p>The real job is the blast radius. Text is a terrible map of that graph.
I have always been a visual person. A schematic lets me hold more of the
system at once than a file tree ever will.</p>

<h2 id="why-i-finally-built-it">Why I finally built it</h2>

<p>Writing software used to be the tax that killed side projects. Trial and
error, keeping the whole program in your head, deciding the app was not
worth the years. Once models started writing the tedious parts with me,
the apps I had been carrying around became buildable.</p>

<p>VisualIAC came back off the shelf. Some ideas you cannot drop.
MetaCloudExplorer was supposed to become an editor, not a fly-through.
“Visual IaC” sounded like a viewer. I wanted a schematic for
infrastructure as code. Schematic + IaC:
<a href="https://schematiac.com">SchematIaC</a>. Say it like “schematic” with an
ack — skee-MAT-ee-ack.</p>

<p>I spent the last few months building it. It is done enough to put in
front of people.</p>

<h2 id="the-visualizers-that-already-exist">The visualizers that already exist</h2>

<p>I am not the first person who wanted a picture of Terraform. The
category is crowded. Most of it either draws a graph you cannot touch,
or it takes the keyboard away and generates the HCL for you.</p>

<p><code class="language-plaintext highlighter-rouge">terraform graph</code> and Graphviz are the official answer. You pipe DOT
into <code class="language-plaintext highlighter-rouge">dot</code> and get a PNG. It is a dependency graph of the engine, not of
the file you are editing. On a real root it is spaghetti. You screenshot
it, pin it in a wiki, and it is stale the next commit.</p>

<p><a href="https://github.com/28mm/blast-radius">Blast Radius</a> made that graph
interactive — d3, pan, prune-to-selection. It is the tool that taught a
lot of us to think blast radius. It also wants Python, Graphviz, and an
initialized directory, and it serves a browser tab. You look, then you
go back to the editor to change anything. The project has not kept pace
with modern Terraform.</p>

<p><a href="https://github.com/im2nguyen/rover">Rover</a> is the one I still see
recommended. Docker, copy the tree into a container, run a plan, open
localhost:9000. Overview, map, graph. Useful. It is still a plan
visualizer. You leave VS Code, you need a terraform binary and enough
backend access to plan, and the picture is of what the engine would
do — not a surface you can rewire.</p>

<p><a href="https://github.com/cycloidio/inframap">Inframap</a> and
<a href="https://github.com/hieven/terraform-visual">Terraform Visual</a> sit in
the same bucket: HCL or plan-JSON in, a cleaner diagram out. CLI or a
browser. Read-only. Fine for a PR comment. Not a place you work.</p>

<p><a href="https://www.pluralith.com/">Pluralith</a> and
<a href="https://overmind.tech/">Overmind</a> go further into the pipeline. They
run <code class="language-plaintext highlighter-rouge">terraform plan</code> for you, draw the change, sometimes cost or blast
radius against live infra, and paste it onto the PR. That is a review
tool. It wants CI, a plan, often an account. The diagram lives next to
the pull request, not next to the file.</p>

<p>Then there is the other takeover:
<a href="https://www.brainboard.co/">Brainboard</a>. Design the architecture on
their canvas, emit Terraform. That is a real product, and it is the
opposite of what I wanted. Your repo becomes an export. Comments, module
boundaries, the ugly-but-true history of the files — gone, or constantly
regenerated. Onboarding a teammate means onboarding the SaaS. The source
of truth moved.</p>

<p>The pattern is the same in both camps. The read-only tools make you
leave the editor — Docker, Graphviz, a plan, a browser — and come back
to type. The design-first tools make you leave the files — their canvas
is canonical, HCL is a build artifact. Either way the visualization owns
a step that used to be yours.</p>

<p>I wanted the picture in the editor, over the files that already exist,
with an edit that writes those files back. No plan required to see the
schematic. No second source of truth. That is the gap SchematIaC is for.</p>

<h2 id="a-schematic-over-your-real-files">A schematic over your real files</h2>

<p>SchematIaC is a VS Code canvas over the Terraform or Bicep you already
have. Blocks become nodes. Properties become rows. References become
wires. You edit the drawing; it edits the files. There is no shadow
language and no generated-only DSL. Save writes the same <code class="language-plaintext highlighter-rouge">.tf</code> /
<code class="language-plaintext highlighter-rouge">.bicep</code> you would have typed.</p>

<p>A one-resource sample does not show that. A two-tier Azure template with
every NIC and route table lit at once does not either — that is a
hairball, not a first impression. I opened the public
<a href="https://github.com/PaloAltoNetworks/terraform-templates">Palo Alto templates</a>
and started with the small one: <code class="language-plaintext highlighter-rouge">vpc_sample</code>. A VPC, one subnet, the
variables that feed them. The drawing is four or five nodes and a
handful of wires you can actually count.</p>

<figure class="doc-shot placeholder">
  <div class="frame">Screenshot to come</div>
  <figcaption>Figure 1. A tfvars file feeds the variables; the variables feed the VPC and the subnet. vpc_id is a wire back to aws_vpc.main, not a string you type twice.</figcaption>
</figure>

<p>That subnet is not “a resource with two strings.” Its VPC is the other
node. Its CIDR comes off a variable. In the file that is easy to skim
past. On the canvas it is two wires you can hold.</p>

<div class="language-hcl highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nx">resource</span> <span class="s2">"aws_subnet"</span> <span class="s2">"NewPublicSubnet"</span> <span class="p">{</span>
  <span class="nx">vpc_id</span>     <span class="o">=</span> <span class="nx">aws_vpc</span><span class="p">.</span><span class="nx">main</span><span class="p">.</span><span class="nx">id</span>
  <span class="nx">cidr_block</span> <span class="o">=</span> <span class="nx">var</span><span class="p">.</span><span class="nx">PublicCIDR_Block</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Click <code class="language-plaintext highlighter-rouge">vpc_id</code> and the rest of the drawing dims. The lineage stays
lit — the VPC node, and nothing else — so the blast radius is a path,
not a grep.</p>

<figure class="doc-shot placeholder">
  <div class="frame">Screenshot to come</div>
  <figcaption>Figure 2. Trace. Click vpc_id and only the wire back to aws_vpc.main stays lit. This is the move I wanted in MetaCloudExplorer and could not get from a 3D fly-through.</figcaption>
</figure>

<p>The canvas evaluates locally. The CIDR reads as <code class="language-plaintext highlighter-rouge">10.0.0.0/24</code>, not the
expression. A mark says when a value was computed rather than typed, and
it is honest when something cannot be known before a real deploy.</p>

<h2 id="when-it-gets-dense">When it gets dense</h2>

<p>The same repo’s <code class="language-plaintext highlighter-rouge">azure_two_tier_sample</code> is the hairball: resource group,
storage, public IPs, NSG, every NIC and route. That is a real Tuesday
file. It is a terrible first screenshot. Open it after <code class="language-plaintext highlighter-rouge">vpc_sample</code> and
the move is the same — click a row, everything else dims — except now
you need it.</p>

<p>Compare still works when you put two canvases side by side.
<a href="/diffs.html">Show Diffs</a> does the same job against git: a branch, a
tag, the merge base of a PR. Added, removed, changed. Removed blocks
stay as ghosts so you see the hole, not just a missing box.</p>

<figure class="doc-shot placeholder">
  <div class="frame">Screenshot to come</div>
  <figcaption>Figure 3. The same public Azure two-tier sample, with one row traced. Grey is the rest of the graph. Blue is the blast radius — one value on the left landing on the resource group, the storage account, the public IPs, the routes.</figcaption>
</figure>

<h2 id="the-tree-then-the-wiring">The tree, then the wiring</h2>

<p>For the shape of a whole sample repo, <a href="/folder-overview.html">Folder Overview</a>
reads every <code class="language-plaintext highlighter-rouge">.tf</code> under terraform-templates — nothing is evaluated —
into one picture: a card per folder (<code class="language-plaintext highlighter-rouge">aws_two_tier</code>,
<code class="language-plaintext highlighter-rouge">azure_two_tier_sample</code>, <code class="language-plaintext highlighter-rouge">one-click-multi-cloud</code>, …), wires for who
calls whom as a local module. From there you open the detailed canvas.
The Azure cluster in terraform-azure-samples/simple-cluster is the same
move when you want modules as boxes with ports.</p>

<figure class="doc-shot placeholder">
  <div class="frame">Screenshot to come</div>
  <figcaption>Figure 4. Folder Overview over terraform-templates. The forest. The canvas in Figure 1 is one of those doors.</figcaption>
</figure>

<p>That is the whole trick. The schematic is not a picture of the code. It
is the code, viewed as the graph it always was. Drag a wire or edit a
value; the review is the exact one-line diff; comments and alignment
stay put; nothing is written until you Save.</p>

<p>The rest of the editor answers the questions that make you open plan in
the first place. <a href="/upgrade-preview.html">Upgrade Preview</a> on a registry
module or a provider paints what a newer version would do <em>here</em> —
inputs you set that vanish, arguments the target docs no longer
list — worded as “docs say…”, never “this will break.”
<a href="/analyze.html">Analyze</a> lists the re-wirings the graph already argues
for. Every change is staged. Your code never leaves the machine.</p>

<h2 id="the-agent-does-not-replace-the-schematic-the-schematic-is-what-the-agent-uses">The agent does not replace the schematic. The schematic is what the agent uses</h2>

<p>A lot of the people who will read this already let an agent touch their
Terraform. Cursor, Claude Code, Copilot — the model writes the HCL, you
review the diff, you hope it understood the blast radius. That is the
same job the canvas is for. SchematIaC is not another agent. It does not
compete with yours. It is the tool your agent should call when the files
get too wide for a context window.</p>

<p>SchematIaC ships a <a href="/mcp.html">Model Context Protocol server</a>. Claude
Code, Cursor, Claude Desktop, or any other MCP client gets the same
local engine the canvas uses. The agent can read the graph, ask what a
value actually resolves to, trace a lineage, preview a module or
provider upgrade against this canvas, and get a validated diff for a
proposed change. Still on your machine. No terraform or bicep binary.
Your files are never uploaded.</p>

<p>The important half: it never writes a file. Every edit tool returns a
diff and the new file text. The agent’s own host applies it, or you do.
Same rule as the canvas — nothing reaches disk until you say so.</p>

<p>That is the enhancement. An agent grepping HCL is guessing. An agent
with the schematic knows that <code class="language-plaintext highlighter-rouge">vpc_id</code> is a wire to <code class="language-plaintext highlighter-rouge">aws_vpc.main</code>, that
a tfvars line is what the subnet actually gets, that changing one
variable fans out across the two-tier sample the way Figure 3 shows. It
can propose a surgical one-line rewrite instead of regenerating a file.
You still review. You just review a change that was computed against the
graph, not against a guess.</p>

<p>Command palette: <strong>SchematIaC: Copy MCP Setup for AI Agents</strong>. Pick the
client, paste once, reload. After that you talk to the agent in English.
You do not paste JSON on every question.</p>

<h2 id="what-it-deliberately-is-not">What it deliberately is not</h2>

<p>It is not a new IaC language. HCL and Bicep stay the source of truth.</p>

<p>It is not a 3D or VR toy. It runs in VS Code, where the files already
are.</p>

<p>It is not a replacement for <code class="language-plaintext highlighter-rouge">terraform plan</code> or an ARM what-if. Those
still own the remote world. SchematIaC answers a smaller, sharper
question: what on this canvas would move.</p>

<p>It is not an AI agent. Your agent writes and applies. SchematIaC is the
ground truth that agent can ask.</p>

<p>Some features are Terraform-first — upgrade preview, simulated
workspaces, copy between canvases. Bicep is first-class for parse, edit,
and git diffs. That split is honest, not a roadmap slide.</p>

<h2 id="try-it-on-a-folder-you-already-have">Try it on a folder you already have</h2>

<p>MetaCloudExplorer was the visualization. VisualIAC was the first editor
attempt. SchematIaC is the one you can install.</p>

<p>Open <a href="https://schematiac.com">schematiac.com</a>, get the
<a href="https://marketplace.visualstudio.com/items?itemName=schematiac.schematiac">VS Code extension</a>,
and point it at a folder you already trust. The schematic is the point:
see the blast radius before you type it.</p>]]></content><author><name></name></author><category term="origin" /><summary type="html"><![CDATA[The origin of SchematIaC — Omniverse, VisualIAC, Bicep years, and why the schematic is the tool an agent should call.]]></summary></entry></feed>