Knap · data → .md
Graphs from a Knap template
Pipe a props object through a graph_* filter; Knap renders Markdown and these filters draw the official fence. No SVG. The Knap CLI does not load custom filters. Wire them in your app.
Template and the frames it produces
Same incident as the Comark landing. Here the source is a Knap template; the rendered side is the React graphs. Toggle to read the template that emitted the fences.
p95 crossed 800ms at 14:02. Rollback at 14:11.
- 14:02p95 crossed 800ms
- 14:11rolled back the cache flag
- 14:40write the postmortem
Same night, and the two days users felt it.
█ up▒ slow· down
79 percent uptime over 14 days, Aug 14 to Aug 27How the pieces fit
You own three files: templating stays in Knap, the graphs stay copied via shadcn if you also render React, and the filters are the only new piece.
- Data
- Pass plain JSON (or any variables Knap can resolve). The filter reads the typed value, not a schema this library invented.
- Filter
- Pipe the graph props through
graph_timeline,graph_meter, and the rest. A string param is the title. Passcomarkfor a::graph-*block. - Markdown
- Output is the official fenced ASCII, the same drawing as the MDX tab. Obsidian, GitHub, and a README can open it. Graphs with no ASCII emit Comark YAML instead.
Where each format belongs
Knap is a generator. It writes the fence a README can paste, or the ::graph-* block a Comark app can render. It does not draw the React frame itself.
- MDX / React✓–✓–
- App .md file––✓✓
- README / GitHub–✓–✓
- Data in, Markdown out–––✓
- same props as React
- official fence, not homemade
- comark param → ::graph-*
- CLI loads graph filterswire createEngine