v0.2 · Contribute
Help shape Schemd
Pick a known limit, agree on the approach, and help move the compiler forward.
01 / Now · P1Build the topology and routing foundation
These are correctness items, so they come first — everything else is decoration on top of a drawing that has to be right before it is allowed to be pretty.
- P1-02 · Net and junction semantics. Split explicit nets at junctions, render one junction dot, and bridge only separate nets. Claim P1-02
- P1-04 · Document-level routing index. Reuse an interval index or visibility graph instead of rescanning every obstacle. Depends on P1-02. Claim P1-04
- P1-03 · Line and Bézier collision rules. Define manual opt-outs or validate straight and cubic paths against components and crossings. Depends on P1-02. Claim P1-03
- P1-08 · Component overlap validation. Reject accidental overlap in
O(V log V)while allowing explicit semantic containers. Claim P1-08
port:IN "Input" at (60, 160) #blue
resistor:R1 "10 k\Omega" at (250, 160) #amber
capacitor:C1 "100 nF" at (490, 160) #cyan
port:OUT "Output" at (700, 160) #emerald
IN.out -> R1.in #blue [ortho]
R1.out -> C1.in #amber [ortho]
C1.out -> OUT.in #emerald [ortho marker-end=arrow]02 / Next · P1Make every rendered detail deliberate
This is the work that turns valid output into dependable output — the distance between "it compiled" and "you would put it in a specification without apologizing for it."
- P1-05 · Wire and label occupancy. Add soft route costs and route around unrelated external labels. Depends on P1-04. Claim P1-05
- P1-06 · Dense bridge clusters. Preserve a tangent gap, merge close crossings, or report a diagnostic. Depends on P1-02. Claim P1-06
- P1-07 · Background-independent UML markers. Trim paths, use transparent interiors, and include marker bounds in collision checks. Claim P1-07
- P1-09 · Deterministic typography. Publish the font contract and wrap or reject overflowing UML rows clearly. Claim P1-09
- P1-10 · Visual and adversarial test gates. Add browser goldens, route properties, bounded fuzzing, and mutation checks. Claim P1-10
class:Service "Service" at (210, 200) #slate [attributes="- id: UUID" operations="+ execute(): void"]
class:Worker "Worker" at (590, 200) #blue [operations="+ run(): void"]
Worker.left -> Service.right #blue [ortho realization label="implements"]03 / Later · P1 + P2Grow the language without growing the runtime
These items grow the language without growing the runtime — and because the correctness work above can still reshape them, treat their final form as provisional rather than promised.
- P1-01 · Built-in symbol registry. Move parsing, ports, bounds, and primitives behind typed entries and publish a support matrix. Claim P1-01
- P2-01 · Serializer byte result. Reuse one internal
{ svg, bytes }result and benchmark memory at the 2 MiB limit. Claim P2-01 - P2-02 · Incremental document IDs. Avoid allocating a full JSON signature and document unique prefixes for repeated diagrams. Claim P2-02
- P2-03 · Grammar delimiter escapes. Support bounded
\\,\", and\;escapes with a small lexer. Claim P2-03 - P2-04 · Shared external styling. Let controlled hosts reuse one style asset while preserving self-contained SVG. Claim P2-04
port:INPUT "Sensor bus" at (60, 230) #blue
ic:U1 "Controller" at (480, 240) #cyan [left="DATA,ENABLE" right="ACTUATOR,FAULT" top="CLK,VCC" bottom="GND"]
port:OUTPUT "Actuator" at (900, 220) #emerald
INPUT.out -> U1.DATA #blue [ortho]
U1.ACTUATOR -> OUTPUT.in #emerald [ortho marker-end=arrow]Lifecycle: this is an active queue, not a changelog. The PR that finishes an item deletes it — here and in the GitHub roadmap — and lets the issue, the merged PR, and the Git history keep the record.