@archsmith/renderer
v0.10.0
Published
ArchSmith diagram renderer — validated IR in, SVG out. Pure library, no agent/LLM dependency.
Maintainers
Readme
@archsmith/renderer
The ArchSmith renderer — a validated diagram IR in, a complete SVG document out. Pure function, no I/O beyond reading its own bundled font, no LLM dependency.
See the root README for what ArchSmith is, what the IR looks like, and why the renderer is built this way.
Usage
import { render, validate } from "@archsmith/renderer";
const result = validate(ir); // { valid: boolean, errors: string[] }
if (result.valid) {
const svg = render(ir); // complete SVG document, as a string
}render() validates the IR itself before rendering (pass { skipValidate: true } to skip, e.g. if you've already validated). By default it embeds the bundled Arimo font into the output SVG so a diagram renders identically regardless of what's installed on the machine viewing it — subset to just the glyphs that diagram's own text needs, not the whole font, so the size added scales with the diagram rather than a fixed cost. Pass { embedFonts: false } to skip embedding entirely and get a smaller file still.
What's in here
validate()/validateStructure()/validateRegistryReferences()— schema (structural) and registry-reference (semantic) validation against@archsmith/schema.render()— the full IR → SVG pipeline: measure, lay out five columns, assemble, optionally embed fonts.measureText()/wrapText()— real glyph-advance-width text measurement (viafontkitagainst the bundled Arimo font) and word wrapping, used throughout layout instead of a flat character-count heuristic.- SVG primitives and box-drawing functions (
rect,text,pill,actorBox,itemBox,clusterBox,gatewayBox,layerFrame, …) if you want to compose diagram fragments yourself rather than going throughrender().
Everything here is content-driven: box sizes, text wrapping, and row heights are computed from the actual IR content, never a fixed number the caller supplies and hopes is big enough.
License
Apache-2.0
