New:Introducing Socket Scanning for VS Code Marketplace Extensions.Learn more →
Get Started

@archsmith/renderer

Package Overview
Dependencies
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@archsmith/renderer

ArchSmith diagram renderer — validated IR in, SVG out. Pure library, no agent/LLM dependency.

Source
npmnpm
Version
0.9.0
Version published
Weekly downloads
41
-16.33%
Maintainers
1
Weekly downloads
 
Created
Source

@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 (via fontkit against 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 through render().

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

Keywords

architecture

FAQs

Package last updated on 14 Aug 2026

Related posts