A cartoon Weimaraner asleep on a plush round dog bed, tucked under an orange cape like a blanket. An HTML5 shield is embroidered on the bed, and a matching HTML5 tag hangs from his collar

dogbed — a document compiler

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.

The pipeline

template.knap + data.json --k4o--> Textile --oliver--> HTML

Install

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.

Quickstart

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.

index · shell · templates · contract · dogfood · deploy
rendered by oliver