
dogbed is a document compiler, not a CMS: a Knap template plus a JSON object goes in, an HTML document comes out. One static binary, no runtime, no JavaScript, no database, no edit button. k4o does the templating, oliver does the rendering, dogbed joins the halves.
template.knap + data.json --k4o--> Textile --oliver--> HTML
Grab a static binary from the releases page, or build from source — Zig 0.16.0 and zig build gives you zig-out/bin/dogbed.
Print the verdict starter and keep it — you own it now. Blank lines are shown as ··· — the codeblock filter cannot hold empty lines (fourth finding on the dogfood page):
{{ title | h1 }}
···
{{ verdict | bold }} — {{ summary }}
···
{{ "Blockers" | h2 }}
···
{{ blockers | list }}
···
{{ "Nits" | h2 }}
···
{{ nits | numbered }}
Feed it data. This is the starter example:
{"blockers":[],"nits":["ship it"],"summary":"the pipeline sings","title":"dogbed 0.1.0 — first verdict","verdict":"approve"}
Render:
<h1>dogbed 0.1.0 — first verdict</h1>
<p><strong>approve</strong> — the pipeline sings</p>
<h2>Blockers</h2>
<h2>Nits</h2>
<ol>
<li>ship it</li>
</ol>
That block is the entire output — a bare HTML fragment, ready to pipe into something bigger. Add --title or --css and dogbed finishes the document for you. Keep reading: the document shell, the starter templates, the CLI contract, the dogfood story, and the publishing pipeline that ships it all.