<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Reference on ZTD — Zero Trust Dev</title><link>https://ztd-98a2ef.gitlab.io/reference/</link><description>Recent content in Reference on ZTD — Zero Trust Dev</description><generator>Hugo</generator><language>en</language><atom:link href="https://ztd-98a2ef.gitlab.io/reference/index.xml" rel="self" type="application/rss+xml"/><item><title>Commands</title><link>https://ztd-98a2ef.gitlab.io/reference/commands/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ztd-98a2ef.gitlab.io/reference/commands/</guid><description>&lt;h2 id="commands"&gt;Commands&lt;a class="anchor" href="#commands"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Everything is driven through &lt;code&gt;ztd &amp;lt;verb&amp;gt;&lt;/code&gt;. &lt;code&gt;ztd&lt;/code&gt; is a &lt;strong&gt;Go (Cobra) binary&lt;/strong&gt; with its
runtime assets embedded, so an installed copy needs no source checkout — see
&lt;a href="https://ztd-98a2ef.gitlab.io/how-to/install/"&gt;Install&lt;/a&gt;. The tables below spell it &lt;code&gt;./ztd&lt;/code&gt;,
which is the shim in a source checkout: it builds the binary and execs it, pointing
it at the live tree so script edits take effect without a rebuild. &lt;strong&gt;If you
installed &lt;code&gt;ztd&lt;/code&gt;, drop the &lt;code&gt;./&lt;/code&gt; — nothing else differs.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Configuration</title><link>https://ztd-98a2ef.gitlab.io/reference/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ztd-98a2ef.gitlab.io/reference/configuration/</guid><description>&lt;h2 id="configuration"&gt;Configuration&lt;a class="anchor" href="#configuration"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;.ztd/ztd.toml&lt;/code&gt; is the ONE file you edit.&lt;/strong&gt; Every dependency&amp;rsquo;s config — Terraform
variables, the lima instance YAML, cloud-init, the compose env — is generated
inside the &lt;code&gt;ztd&lt;/code&gt; binary from &lt;code&gt;ztd.toml&lt;/code&gt; + built-in defaults. There is no
&lt;code&gt;terraform.tfvars&lt;/code&gt;, no lima/cloud-init/compose file you ever touch directly.
Secrets live separately in &lt;code&gt;.ztd/secrets/*.env&lt;/code&gt; (gitignored) — never in &lt;code&gt;ztd.toml&lt;/code&gt;,
which is meant to be committed.&lt;/p&gt;
&lt;p&gt;Scaffold it with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ztd init&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This writes &lt;code&gt;.ztd/ztd.toml&lt;/code&gt; with every key commented out — an all-defaults project
boots as-is; uncomment only what you want to change.&lt;/p&gt;</description></item><item><title>Backends</title><link>https://ztd-98a2ef.gitlab.io/reference/backends/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ztd-98a2ef.gitlab.io/reference/backends/</guid><description>&lt;h2 id="backends"&gt;Backends&lt;a class="anchor" href="#backends"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A backend is a stable contract — inputs (name, size, image, cloud-init, repo-sync
mode, ports) and outputs (a reachable SSH endpoint, instance id). Most backends
implement it as a Terraform module; the macOS &lt;code&gt;vz&lt;/code&gt; backend implements it host-side
with &lt;code&gt;lima&lt;/code&gt; instead (no usable Terraform provider, and it drives
Virtualization.framework on the host). The same interface drives every backend;
only &lt;code&gt;TARGET&lt;/code&gt; changes.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Backend&lt;/th&gt;
					&lt;th&gt;Status&lt;/th&gt;
					&lt;th&gt;Notes&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;kvm&lt;/code&gt; (libvirt)&lt;/td&gt;
					&lt;td&gt;available&lt;/td&gt;
					&lt;td&gt;Local Linux host. &lt;code&gt;dmacvicar/libvirt&lt;/code&gt; 0.9.x; repo live-mounted over virtiofs.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;proxmox&lt;/code&gt; (bpg)&lt;/td&gt;
					&lt;td&gt;validated&lt;/td&gt;
					&lt;td&gt;Remote node; cloud-init uploaded as a snippet.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ec2&lt;/code&gt; (aws)&lt;/td&gt;
					&lt;td&gt;validated&lt;/td&gt;
					&lt;td&gt;AWS instance; Debian AMI auto-looked-up; public IP is a real Terraform output. See the &lt;a href="https://ztd-98a2ef.gitlab.io/how-to/ec2-backend/"&gt;EC2 how-to&lt;/a&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;vz&lt;/code&gt; (Apple Virtualization)&lt;/td&gt;
					&lt;td&gt;available&lt;/td&gt;
					&lt;td&gt;macOS local via &lt;code&gt;lima&lt;/code&gt; — host-side (not Terraform); reached over lima&amp;rsquo;s forwarded SSH port. See the &lt;a href="https://ztd-98a2ef.gitlab.io/how-to/vz-backend/"&gt;vz how-to&lt;/a&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;hetzner&lt;/code&gt; / &lt;code&gt;digitalocean&lt;/code&gt; / &lt;code&gt;vultr&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;planned&lt;/td&gt;
					&lt;td&gt;Same contract.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;verda&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;planned&lt;/td&gt;
					&lt;td&gt;GPU cloud, for GPU agent workloads.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="libvirt-version-pin"&gt;libvirt version pin&lt;a class="anchor" href="#libvirt-version-pin"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;kvm&lt;/code&gt; backend pins &lt;code&gt;dmacvicar/libvirt&lt;/code&gt; to &lt;code&gt;~&amp;gt; 0.9.8&lt;/code&gt; — the raw-XML schema
(&lt;code&gt;devices&lt;/code&gt;, &lt;code&gt;os&lt;/code&gt;, &lt;code&gt;memory_backing&lt;/code&gt; as attributes), which the module needs for
native virtiofs. Note 0.9.x exposes no computed guest IP, so ztd reads it from the
libvirt DHCP lease via &lt;code&gt;virsh&lt;/code&gt; rather than a Terraform output.&lt;/p&gt;</description></item><item><title>Host prerequisites</title><link>https://ztd-98a2ef.gitlab.io/reference/host-prerequisites/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ztd-98a2ef.gitlab.io/reference/host-prerequisites/</guid><description>&lt;h2 id="host-prerequisites"&gt;Host prerequisites&lt;a class="anchor" href="#host-prerequisites"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;ZTD keeps the host footprint minimal: all orchestration tooling (Terraform,
providers, Task) runs in the toolbox container. The only thing that can&amp;rsquo;t be
containerized is a hypervisor for a &lt;em&gt;local&lt;/em&gt; VM — and that is &amp;ldquo;the VM&amp;rdquo; itself.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Backend&lt;/th&gt;
					&lt;th&gt;Host needs&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;kvm&lt;/code&gt; (local Linux)&lt;/td&gt;
					&lt;td&gt;Docker + libvirt/qemu + &lt;code&gt;virtiofsd&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;vz&lt;/code&gt; (local macOS)&lt;/td&gt;
					&lt;td&gt;Docker + Virtualization.framework (via &lt;code&gt;lima&lt;/code&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;proxmox&lt;/code&gt; / &lt;code&gt;ec2&lt;/code&gt; (remote)&lt;/td&gt;
					&lt;td&gt;Docker only&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;virtiofsd&lt;/code&gt; relays the repo live-share into the guest (it runs as root and
reflects the guest uid to the host owner, so files created in the VM are owned by
you on the host).&lt;/p&gt;</description></item></channel></rss>