v0.3 · Operate safely

Keep compilation bounded and measurable

Use fixed resource ceilings, deterministic caches, and exact output-byte regressions.

01 / LimitsReject hostile work before allocation

The compiler caps source length, components, connections, wire crossings, UML rows, pins, label lengths, routing states, and SVG output. Orthogonal routing remains bounded even when rotated AABBs create tight corridors.

port:A "A" at (70, 100) #blue
resistor:R "R" at (330, 100) #amber [orientation=down]
component:BLOCK "obstacle" at (330, 250) #slate [width=150 height=70]
port:B "B" at (700, 100) #emerald
A.out -> R.in #blue [ortho]
R.out -> B.in #emerald [ortho]
compiled by @schemd/core → shown in the rail

The 0.3.2 release measures 101,672 B minified, 30,348 B gzip, 68,779 B npm tarball, and 298,854 B unpacked. The hard compiler gate is 30,720 B gzip, enforced by bun run size.

02 / NodeBound every process-lifetime cache

The website registry stores one immutable release snapshot and one refresh promise. The compile API uses a 256-entry LRU. Documentation and simulation caches are keyed by finite version/slug or environment registries; user source is never accumulated without eviction.

clock:C "CLK" at (90, 120) #blue
counter:N "count" at (340, 120) #cyan [outputs=4]
port:Q "Q" at (620, 120) #emerald
C.out -> N.clock #blue [digital ortho]
N.out1 -> Q.in #emerald [digital line]
compiled by @schemd/core → shown in the rail

On Node.js 26.4.0 / Apple Silicon, Phase 5 warm medians were 0.202 ms for the representative RC compile, 6.583 ms for 512 rotated components, and 2.982 ms for a dense 16×16 crossing fixture. Their SVG outputs were 6,019 B, 279,243 B, and 44,604 B. A repeated-symbol fixture emitted 1,353 B for one resistor and 35,463 B for 64 labeled mixed-orientation instances.