/ CHANGELOG
35 releases
What shipped, release by release.
Every release, the diagram engines and fixes it shipped — with the rendered output for each diagram it touched. Click any render, or open the gallery’s by-type view.
v0.8.3
2026-06-03Addeddiagram
aliases + keywords discoverability metadata (first installment)- ·Populated for the nine diagram types added since 0.7.0 —
eventtree,fmea,causalloop,markov,gitgraph,epc,idef0,threatmodel,welding. The remaining types are tracked for the next installment. - ·
listDiagrams()(src/ai/tools.ts) now returnsaliases/keywordswhen present, so the LLM can map a request like "draw a STRIDE diagram" or "焊接符号" to the right type.
Fixeddocs navigation drift: 9 diagram pages were unreachable
- ·--
v0.8.2
2026-06-03Fixedentity
cluster [members: [...]] no longer fails to parse- ·Root cause (
src/diagrams/entity/parser.ts): the attribute-block regex captured the bracket body with[^\]]*, which stops at the *first*]. Becausemembers: [a, b]contains its own], the match terminated early, the outer bracket never closed, and the whole line fell through to the parse error. The capture now tolerates one level of nested[...], so the members array no longer truncates the attribute block. The downstreamparseProps/parseIdListhelpers already handled nesting correctly — only the line-level extraction was broken. - ·Tests (
tests/entity/parser.test.ts, new): the entity engine previously had no parser tests. Added regression coverage for empty / bracketed-members / members+color / color-only clusters, plus an end-to-end render assertion that members actually produce a grouping box.
Changed
- ·AI discoverability (
src/ai/profiles.ts): the entity generation profile now lists theclusterform and states thatmembersmust be a bracketed list, sogetSyntax("entity")surfaces grouping to the model instead of leaving it to guess Mermaid-stylesubgraph. - ·Docs (
docs/reference/12-ENTITY-STRUCTURE-STANDARD.md): the §5.3 mixed-jurisdiction cluster example used the un-bracketedmembers: a, bform, which contradicts the EBNF grammar ("members:" "[" ID_LIST "]") and is not parseable. Corrected to the bracketed form. - ·--
v0.8.1
2026-06-032 diagrams- ·
welding— full glyph catalog (16 types: fillet · square / V / bevel / U / J / flare-V / flare-bevel grooves · plug · slot · spot · seam · back · backing · surfacing · edge), drawn as original line-art. Dimension slots — size, throat(E), length, length-pitch, count×length, groove angle, root opening. Supplementary symbols — weld-all-around circle, field-weld flag, tail process/spec/NDE, contour (flush / convex / concave) + finish letter. AWS A2.4 single reference line, ISO 2553 System A (solid + dashed dual line, inverted side convention) and System B; arrow / other /both:sides; multi-joint vertical stacking. The structural differentiator: AI-readable validation of illegal type/side/dimension combinations (a fillet needssize,angleis groove-only,pitchneedslength, surfacing is arrow-side only).
- ·matrix →
punnett—cross: Bb x Bbwith allele-case dominance and optionaltraitphenotype names. Computes the canonical ratios — monohybrid 3:1, dihybrid 9:3:3:1 — reduced to lowest terms, with each box tinted by phenotype class. Mono / di / trihybrid (2×2 / 4×4 / 8×8). Three gallery examples: monohybrid (3:1), test cross (1:1), and dihybrid (9:3:3:1). - ·--
v0.8.0
2026-06-03AddedBucket B: 8 new diagram engines
- ·
eventtree— Event Tree Analysis (IEC 62502 / NUREG). Header function columns, success-up/failure-down pruned tree; the engine computes each outcome's path frequency = initiating freq × Π branch probabilities. - ·
fmea— Failure Mode and Effects Analysis (AIAG-VDA / IEC 60812 / SAE J1739). The engine computes RPN = S×O×D and the AIAG-VDA Action Priority, ranks the sheet, and colour-fills the RPN/AP cells by risk. Schematex's first table-shaped diagram. - ·
causalloop— Causal Loop Diagram (Sterman system dynamics). Signed links; the engine detects feedback loops and classifies each reinforcing (R) / balancing (B) by negative-link parity. - ·
markov— Discrete-time Markov chain. The engine computes the stationary distribution (power iteration) and classifies states recurrent/transient/absorbing; absorbing states render with a double ring.
v0.7.0
2026-06-02AddedBucket A: 4 engine-extension modes
- ·phylo →
dendrogram— merge-height (cophenetic) layout, rectangular elbows, height axis, andcut <value>flat-cluster slicing. - ·decisiontree →
influence— Howard & Matheson influence diagram: compact DAG with decision (rectangle) / chance (oval) / value (octagon) nodes and destination-derived arc semantics. - ·matrix →
sipoc+qfd— Six Sigma SIPOC table and the Akao House of Quality with a computed technical-importance row (Σ weight×strength) and a HOW×HOW diamond-cell correlation roof. - ·mindmap →
futureswheel+driver— Jerome Glenn concentric-ring consequence map and the IHI aim→drivers→change-ideas tree.
v0.6.10
2026-06-021 diagram- ·Minor-process line class (
src/diagrams/pid/renderer.ts): line types now map to explicit CSS classes —process→lt-pid-process,process_minor→lt-pid-process-min(was the unstyledlt-pid-process-minor). - ·No-fill guard class: every line
<path>now carries a sharedlt-pid-line-pathclass (with.lt-pid-line-path { fill: none; }), so no line can inherit a fill. - ·Z-order layering: render split into ordered groups — process pipes (
lt-pid-process-lines) behind equipment (lt-pid-equipment), with signal lines (lt-pid-signal-lines) + instruments above. - ·Line-mounted instrument placement (
src/diagrams/pid/layout.ts): an instrument thatmeasures/controlsa *pipe* (not equipment) now anchors to that pipe's midpoint x instead of a fixed offset.
v0.6.9
2026-06-011 diagramAddedLLM input recovery: code-fence stripping + abbreviated-header normalization (
src/core/api.ts)- ·Markdown code-fence stripping. Input wrapped in ```
mermaid …,schematex …, or a bare…fence now has the fence lines removed before detection. Previously the opening fence line (``mermaid) was read as the diagram header and the whole diagram failed to detect. A leading fence line and a trailing fence line are stripped independently, so a truncated artifact with only an opening fence is still recovered; unfenced input is untouched. - ·Abbreviated-header normalization. Once the target engine is known, a first-token header that is a prefix (≥3 chars) of the resolved diagram type is rewritten to the canonical keyword —
flow→flowchart,org→orgchart,gen→genogram,ped→pedigree,seq→sequence,socio→sociogram,eco→ecomap. Headerless grammars (mindmap's# Title), already-canonical headers, and unrelated first tokens (e.g. flowchart's alternategraphkeyword) are left untouched. - ·New test suite
tests/core/input-recovery.test.ts(14 cases across fence stripping, abbreviation recovery, and the two combined).
- ·
CIRCUIT_DUPLICATE_ID— a reference designator declared twice (silently overwrites a pinMap entry). Runs in both positional and netlist modes. - ·
CIRCUIT_NO_GROUND— the circuit has a source (voltage_source/ac_source/battery/current_source) but no ground reference anywhere; node voltages are undefined. - ·
CIRCUIT_FLOATING_NET— a net only one pin connects to (dangling node), excluding intentional single-terminal reference symbols (ground / vcc / port / label / test_point / no_connect / antenna) and auto no-connect padding. - ·
CIRCUIT_NET_TYPO— a dangling net whose name is one edit (Levenshtein) from a properly wired net (e.g.votvsvout) — surfaced as a likely misspelled connection with a rename suggestion, in place of the generic floating-net warning.
v0.6.8
2026-05-311 diagram- ·
signal("label")with no consumer (only incoming edges, no outgoing) was silently dropped: the edge lost its label and the layout discarded it because the target had no anchor. Two fixes: the parser now applies the signal label to the surviving edge, and the layout synthesises a lightweight output-port anchor for any signal ID that is an edge target but not declared as a block/sum/port. - ·Compact height for pure-forward diagrams: an unconditional
FWD_Y + 170height floor overrode the natural canvas height even when there were no feedback rows, producing unnecessarily tall SVGs. The floor now applies only when at least one feedback row is present, reducing the canvas for simple diagrams. - ·Fixes the last non-P&ID pre-existing test failure (
tests/blockdiagram/renderer.test.ts). The 5 remaining P&ID test failures describe unimplemented layout features (z-order, instrument fan-out,process_minorCSS class) tracked indocs/issues/06-pid-layout-quality.md. - ·--
v0.6.7
2026-05-313 diagramsFixedParser tolerance: degrade-not-reject for circuit / orgchart / mindmapOrganisation chartCircuit schematicMindmap
- ·Circuit (
src/diagrams/circuit/netlist.ts): a multi-terminal component given fewer nets than its pin count (e.g. a 4-pin transformer given only 2 nets) no longer throws. Missing pins are padded with floating no-connect nets and the component is rendered; aCIRCUIT_PIN_UNDERSPECIFIEDlint warning names the shortfall and gives a minimal correct example. Newlint()hook incircuit/index.ts. - ·Orgchart (
src/diagrams/orgchart/parser.ts): unparseable lines are now skipped with anORGCHART_UNPARSEABLE_LINEwarning instead of aborting the whole chart. Edge-only (Mermaid-style) input (CEO -> CTO) synthesises implied nodes rather than throwing "unknown node" (ORGCHART_IMPLIED_NODE). Duplicate node ids keep the first declaration (ORGCHART_DUPLICATE_ID). Newlint()hook inorgchart/index.ts. - ·Mindmap (
src/diagrams/mindmap/parser.ts): a missing# Titlecentral topic is recovered — the first plain text line is adopted as the centre (rootInferred:"line"), or a "Mindmap" placeholder is inserted over top-level bullets (rootInferred:"placeholder"). The orphan-node throw is gone. Newlint()hook inmindmap/index.tssurfaces aMINDMAP_SYNTHESIZED_ROOTwarning.
Fixed
validateDsl now surfaces status and warnings- ·The return type of
validateDslis extended:ok:trueresults now carrystatus: "valid" | "partial"andwarnings: SchematexValidationError[], so upstream LLMs can see exactly what was recovered and self-correct rather than only seeing a binary pass/fail.
- ·New test suites:
tests/mindmap/degradation.test.ts,tests/orgchart/degradation.test.ts,tests/circuit/degradation.test.ts— 35 new passing tests covering degradation paths, lint warnings, and glyph coverage. - ·Updated
tests/ai/tools.test.tsto assert the new degradation contract (partial render + warnings) instead of the old hard-error expectation. - ·--
v0.6.6
2026-05-301 diagram- ·New
bowtieengine (src/diagrams/bowtie/) for CCPS / Energy Institute 2018 barrier-based risk management (IEC 31010 §B.4.6, ICAO Doc 9859) — the sibling offaulttreein the Risk & Reliability cluster. A central top event (the knot) with threats fanning in from the left through chains of preventative barriers and consequences fanning out to the right through chains of mitigative barriers, shaped like a bow tie. Spec:38-BOWTIE-STANDARD.md. - ·The differentiator is not computation (bowtie is qualitative — no probability rollup) but a rigid, correct-by-construction symmetric layout that no general-purpose box-and-arrow tool produces, plus structural validation of the CCPS/EI barrier rule set: every threat must reach the top event through ≥ 1 barrier, every consequence must hang off it through ≥ 1 barrier, every escalation factor must attach to a named barrier — violations are *rejected* with plain-English errors, not silently drawn.
- ·Full element vocabulary:
hazardheader,topevent(green-disc knot),threat(orange),prevent/mitigatebarriers (grey, chained, declaration-order = outer→inner),consequence(red),escalationfactor (amber, drops below the barrier it degrades), escalation-factorbarrier. Indentation-structured DSL mirroring the CCPS 7-step build; CJK quotes accepted. - ·Bespoke symmetric band model (not the flowchart DAG engine): wings centred independently about the knot, centre-anchored barrier columns, escalation factors dropping into the whitespace below without breaking line symmetry. Theme:
BowtieTokens(BowTieXP/bowtiemaster colour scheme indefault, shape/border-basedmonochromefor regulator print, Catppuccindark).
v0.6.5
2026-05-301 diagram- ·New
faulttreeengine (src/diagrams/faulttree/) for NUREG-0492 / IEC 61025 fault tree analysis, opening a new Risk & Reliability cluster. Likepertandpetri, the engine *computes the semantics*: it runs MOCUS (Fussell-Vesely 1972) to enumerate the minimal cut sets (with idempotence + absorption, so repeated/shared events are handled correctly) and the top-event probability (prob: rare | mcub | exact), then highlights the cut sets in red and single points of failure in the strongest red. Spec:37-FAULT-TREE-STANDARD.md. - ·Events:
top/gate(intermediate) rectangles,basiccircles withp:,undevelopeddiamonds,houseevents withstate: 0|1, conditioning ellipses. Gates:AND(dome),OR/XOR(shield),VOTING(k/n; …),INHIBIT(x) if cond(hexagon),PAND(…) order: …. Flat declaration wired by id (DAG-friendly); keywordfaulttree(aliasfta). - ·Deterministic tidy top-down layout with content-sized event boxes; shared leaves duplicated (NUREG convention); cut-set boxes drawn behind nodes. Theme:
ReliabilityTokens(coloured-housedefault, faithful black/whitemonochrome, Catppuccindark). - ·Validation: exactly-one-top, undefined-reference (named), cycle detection, probability range, VOTING bounds, conditioning-gate placement — all readable errors.
v0.6.4
2026-05-301 diagram- ·New
umlclassengine (src/diagrams/umlclass/) for UML 2.5.1 §9–§11 class diagrams — the largest unfilled gap below Mermaid'sclassDiagram. Standard-correct adornments (hollow triangle → parent, filled diamond at the composite end), a generalization-driven layered layout (Sugiyama with dummy-node edge routing, so connectors never cross a box), and tree-merged inheritance heads (N children of one parent share one trunk + one triangle). Five classifier kinds, all six relationship kinds, visibility glyphs, multiplicity, roles, stereotypes. Spec:36-UMLCLASS-STANDARD.md. - ·Accepts the Mermaid
classDiagramheader and glyph aliases for one-line migration (<|--,*--,o--,-->,..>,..|>,--,..).
- ·Namespaces / packages:
namespace Name { … }renders a labelled containment frame (union + padding, C4-style). Dot-notationnamespace A.B.Cauto-creates parent packages; blocks nest syntactically; explicit["Label"]supported. A package-clustering pass keeps same-package classifiers contiguous so frames stay clean rectangles. - ·Mermaid member forms: tilde-generics
List~int~→List<int>(nested + on class names), single-lineClass : +member/Class : <<interface>>, member classifiers*(abstract) /$(static), and space-return-typegetId() String. A lone leading~stays the package-visibility glyph. - ·Single-line class bodies (
class Foo { +a +b }) now parse correctly (depth-aware member splitter). - ·Registered across
DiagramType,src/core/api.ts,src/index.ts,src/ai/registry.ts,src/ai/profiles.ts, andSYNTAX_KEYS. Theme tokens (incl. package-frame tints) insrc/core/theme.ts. Tests intests/umlclass/. Docs:website/content/docs/umlclass.mdx; examples:umlclass-shape-hierarchy.mdx,umlclass-order-model.mdx,umlclass-payment-strategy.mdx,umlclass-namespaces.mdx,umlclass-generics-mermaid.mdx.
v0.6.3
2026-05-293 diagramsChangedgraceful degradation for the highest-failure industrial diagrams (
SLD, P&ID, logic gate)Single-line diagramP&ID (Piping & Instrumentation)Logic gate netlist- ·L1 — the generation profiles now teach the full controlled vocabulary.
src/ai/profiles.tslists the complete equipment / node / gate-type enum forSLD,P&ID, andlogic gatein eachpreferblock, so the LLM emits canonical names instead of inventing synonyms. Repair hints gained example mappings (e.g.exchanger → hx_shell_tube,vessel_horizontal → vessel_h). This is a vocabulary fix, not a hard-coded alias table. - ·L2 — an unknown type keyword no longer blanks the diagram. When a parser hits an unrecognised node/equipment/gate kind, it keeps the element with an
"unknown"sentinel + the originalrawTypetoken instead of throwing. The renderer draws a visibly-flagged placeholder (dashed box +?+ the raw word, accent-coloured) so the output is never silently wrong, and the lint pass emits a non-fatal warning naming the bad token with a did-you-mean suggestion (SLD_UNKNOWN_DEVICE/PID_UNKNOWN_EQUIP/LOGIC_UNKNOWN_GATE). Genuine structural errors (duplicate ids, malformed syntax) stay fatal. - ·
P&ID— modifier keywords degrade to a safe default rather than a placeholder: an unknown linetype:falls back toprocessand an unknown instrument category tofield_discrete. The instrument-tag grammar was relaxed to accept dash-less tags (e.g.inst PLC : cr_shared). - ·Added
tests/{sld,pid,logic}/graceful-degradation.test.ts(17 cases): no-throw parsing,"unknown"sentinel +rawTypepreservation, flagged-placeholder markers in the SVG, the three lint warning codes, modifier-default fallback, dash-lessP&IDtags, and regression guards that fully-known diagrams stayvalid.
v0.6.2
2026-05-272 diagramsChangedMermaid header compatibility for
sequence and erdUML sequence diagramEntity-Relationship Diagram (ERD)- ·
sequence— accepts the MermaidsequenceDiagramheader. Under that header the arrow tokens take Mermaid meaning (->>synchronous call,-->>reply/return,-)async, plus--)/--x); under the nativesequence "Title"header the long-standing Schematex meaning is preserved (->>= async), so existing documents are unaffected.participant/actor,Note over A,B:, activation suffixes, andloop/alt/opt/par … endwork in both. Canonical profile now recommendssequenceDiagram. - ·
erd— accepts the MermaiderDiagramheader. Bare relationships (CUSTOMER ||--o{ ORDER : places, norefkeyword) auto-create their entities, and type-first entity blocks (ORDER { int id PK }, KEY ∈ PK/FK/UK) are parsed. The nativeerdheader withtable NAME { name type PK }+ref …is unchanged. Canonical profile now recommendserDiagram.
Addedshowcase examples
- ·
timing-clock-rle-shorthand— synchronous bus read using theclock Nandrle <state>*<count>shorthands (0.6.1 features). - ·
circuit-pullup-orientation-hint— netlist pull-up circuit demonstrating thedir=orientation hint (0.6.1 feature). - ·Added
tests/sequence/mermaid-compat.test.tsandtests/erd/mermaid-compat.test.ts(header detection, Mermaid arrow/cardinality semantics, native-mode regression guards). - ·--
v0.6.1
2026-05-27ChangedLLM-friendlier DSL for the highest-failure diagram types
- ·
circuit— netlist is now the recommended generation path. Canonical syntax (src/ai/profiles.ts) and docs lead with the SPICE-style netlist (circuit "…" netlist); the positional/cursor mode is reframed as hand-drawing only (it requires tracking a moving cursor across lines, the dominant LLM failure). Added an optional per-component orientation hintdir=right|left|up|down(Lcapy-style L2 control) that rotates a symbol without affecting connectivity. - ·
circuit— netlist auto-layout compaction. Two-pin components with one pin on ground are now recognised as shunt legs and dropped vertically beneath the node they tap; series / multi-pin components stay on a top spine row and spacing is tightened. Footprint: RC low-pass −36%, voltage divider −40%, common-emitter amp −32%; output now follows the conventional schematic idiom instead of one wide row. - ·
network— minimal core keeps the cheap structural hints. Canonical guidance is now: device + link skeleton pluslayout:/tier:(recommended — they drive the hierarchy at near-zero cost). The verbose per-link annotations (vlan:/port:/ speed /trunk) are demoted to "only when asked" — they don't affect layout and are the main source of generation errors. - ·
state— MermaidstateDiagram-v2is now the recommended header/form. Aligns generation with the dominant training-data prior ([*]start/end,-->transitions). The nativestate "…"+initial/finalform still works; the parser already accepted both.
v0.6.0
2026-05-253 diagramsChanged
- ·
petrireclassified into a newconcurrencycluster (wasbehavior-modeling), matching the type-system intent (Concurrency / discrete-event formalism) and the docs navigation. Petri nets model concurrent / distributed / asynchronous systems, so they now group on their own in the gallery's by-type view with a dedicated line-glyph. - ·Clearer registry taglines for
usecaseandsequence— both now lead with purpose (what the diagram is *for*) before the feature list, matching the house definition style.
- ·New dedicated
pertengine (src/diagrams/pert/) implementing the activity-on-node / Precedence Diagramming Method per PMI PMBOK 7 + Moder 1983. Unlike every other text-DSL diagram tool, the engine computes the schedule: a forward pass + backward pass return Early/Late Start & Finish, total slack, project duration, and the critical path — the render is downstream of the computation. Spec:32-PERT-STANDARD.md. - ·Six-field activity box (ES | Duration | EF / Name + id / LS | Slack | LF), the canonical Kerzner / Primavera P6 representation. Every computed field is mirrored onto
data-*attributes. - ·Full PDM dependencies — FS (default), SS, FF, SF — with integer/fractional lag (
after: A+2d) and lead (after: A SS-1). Edge labels render the type + lag (SS+1d,FF); FS with zero lag stays unlabelled. - ·Three-point (PERT) estimation —
duration: O/M/Pcomputeste = (O+4M+P)/6and varianceσ² = ((P−O)/6)²; the project-level standard deviation over the critical path is reported in the footer.
- ·New dedicated
petriengine (src/diagrams/petri/) for place/transition nets per Murata 1989 + ISO/IEC 15909-1. Likepert, the engine computes the dynamics: it validates the bipartite structure, applies afire:sequence to the initial marking, and highlights which transitions are *enabled* in the resulting marking. Spec:34-PETRINET-STANDARD.md. - ·Places, transitions, and four arc types —
place <id> *<tokens>circles,transition <id>bars (immediate) ortimed rate: <λ>boxes (GSPN), with standard->, inhibitor-o, read--, and reset=>arcs. Weighted arcs (weight: n/*n) and placecapacity:. - ·Subclass detection — source/sink, workflow-net (van der Aalst), state-machine, and marked-graph structures are recognised and noted in the SVG
<desc>. - ·House-style palette with green reserved for "enabled" and red for "inhibitor/dead"; faithful black-and-white Murata textbook look under
monochrome.layout: lr|tbwith cycle-removal back-edge routing.
- ·New dedicated
networkengine (src/diagrams/network/) for IT / CCTV network topology with Cisco-convention device icons, typed links, subnets/VLANs, and topology-correct layout. Spec:35-NETWORK-STANDARD.md. - ·31 device kinds (router, switch, l3switch, firewall, loadbalancer, ap, wlc, gateway, server, serverfarm, pc, laptop, mobile, ipphone, printer, storage, camera with
type: fixed|bullet|dome|ptz|turret, nvr, dvr, poeswitch, encoder, monitor, internet/wan/cloud/pstn, lan, …) connected with--(undirected),->(directed), or==(LAG). - ·Rich link specs after
:— link type (fiber/wireless/serial/poe/vpn/lag),trunk/access,vlan:, speed, andport: a>b; each rendered with a distinct line style. - ·Physical + logical boundaries —
site/rack(solid) vssubnet/vlan/zone/dmz(dashed, tinted) nested blocks. Layoutstiered(default),tree,star,ring,bus,mesh,spine-leaf,manual. Validates VLAN range 1–4094 and device-IP-in-subnet-CIDR; never drops a device/port/link.
v0.5.2
2026-05-22Fixedparser preview resilience
- ·Preview surfaces stay visible when strict parsing or rendering fails. New
- ·React, browser, and AI integrations use the non-blank preview boundary.
- ·Circuit netlist explicit
type=now owns pin order. A component such as - ·Docs cover strict versus preview APIs. The README, reference overview,
v0.5.0
2026-05-192 diagrams- ·New dedicated
prismaengine (src/diagrams/prisma/) implementing the PRISMA 2020 flow diagram (Page MJ et al., BMJ 2021;372:n71). Rigid four-row layout (Identification → Screening → Eligibility → Included) that is correct by construction — the author writes record counts and exclusion reasons; the layout, mandatoryn =fields, and exclusion side-boxes are prescribed. Spec:28-PRISMA-STANDARD.md. - ·Single + dual pipeline.
mode: 2020-single(databases & registers only) andmode: 2020-dual(adds the "Identification via other methods" column, merged into Screening via a Y-junction). Auto-detects dual when another:block is present. - ·Canonical column-group layout. "Records removed before screening" is its own box in the right column; the orange/slate section header is an independent capsule bar spanning the column group (matrix-style), and the left Identification/Screening/Included stage bands are independent capsules that bracket the cards.
- ·Vocabulary overlays.
kind: scoping-review(PRISMA-ScR — "sources of evidence"),kind: ipd(participants count),kind: systematic-review(default).
- ·Unified actor anchor. Every association line from an actor now fans out from a single anchor point (facing-side, torso height) instead of each line exiting the actor box at a different edge point — matching canonical UML rendering.
- ·Aesthetic pass. Soft blue tinted use-case ellipses, bold names, rounded stick-figure strokes, a quiet rounded subject boundary, and crisper dashed include/extend lines.
- ·Added
website/content/docs/usecase.mdx(the syntax doc was registered inSYNTAX_KEYSbut missing) and curated example MDX. - ·--
v0.4.3
2026-05-16Fixedproduction parser bugs from ChatDiagram 2026-05-15 report
- ·Ladder
RESreset coil now parses. Rockwell / Allen-Bradley counter-reset - ·Ladder element regex no longer breaks on parens inside quoted names.
- ·Ladder
rung Naccepts a trailing colon or none. LLMs routinely omit it - ·SLD residential vocabulary. Added
mcb,mccb,rcd,rcbo,rccb,
AddedMermaid-compatibility scaffolding
- ·YAML frontmatter title block.
---\ntitle: My diagram\n---at the top - ·Universal
%%comment marker. All parsers touched by this release - ·"Did you mean…?" suggestions. New
src/core/dsl-suggest.tsreturns - ·Engine-bug error telemetry.
extractError()now tags runtime errors
v0.4.1
2026-05-061 diagram- ·
style: tabledirective for matrix diagrams. Flips any 2×2 or 3×3 quadrant diagram from scatter/bubble mode into a text-in-cell table layout — the canonical form for Eisenhower, Johari, Impact-Effort, and 9-box. Settingstyle: tableautomatically disables axis arrows, axis labels, grid lines, and the quadrant-annotation overlay; quadrant titles are instead rendered as cell-header text inside each cell, and multiple items for the same cell stack as a bullet list. Renderer gains three new CSS classes (sx-matrix-cell-title,sx-matrix-cell-subtitle,sx-matrix-cell-item) for theming. - ·
Q1…Q4shorthand for 2×2 table mode. Instead ofcell (col, row) label: "…", authors can writeQ2: "Ship hotfix"— one line per item, repeating the key to stack items. Q1 = top-right, Q2 = top-left, Q3 = bottom-left, Q4 = bottom-right. Designed to match what LLMs naturally emit for Eisenhower-style prompts. - ·3×3
style: tablesupport.renderQuadrantBackgroundextended to cover 3×3 grids with a diagonal severity heatmap (green → amber → red, following the GE/McKinsey 9-box convention).renderCellLabelsunified from a 3×3-only helper into a shared 2×2/3×3 path. - ·Four new example MDX files.
matrix-eisenhower-week(updated to table form),matrix-impact-effort,matrix-johari-window, andmatrix-9-box-talent— each a canonical AI-grounding few-shot for LLM DSL generation. All four also added tosrc/ai/_generated.ts.
v0.4.0
2026-05-055 diagramsEntity-Relationship Diagram (ERD)
Breadboard / Physical wiring
BPMN business process
Function Block Diagram (FBD)
Sequential Function Chart (SFC)
- ·Full pipeline: parser → layered LR/TB layout → tabular SVG renderer with crow's-foot endpoint glyphs (bar, open circle, foot, foot+circle).
- ·DBML-compatible DSL:
Table Name { col type PK FK -> X.y }with Mermaid}o--||ASCII glyph aliases as input shorthand. - ·Automatic crow's-foot rendering: endpoint cardinality symbols (
|,o,<) read from relation glyphs and rendered per notation standard. - ·AI registry entry under new
data-modelingcluster with explicit disambiguation from theentitytype (corporate ownership vs. database schema).
- ·Section-based DSL:
board:dimensions,partswith@col-rowhole addressing, power-rail notation (@+t8), span placements, off-board MCU side placement. - ·Parts catalog: resistors (auto color-bands from value), LED, capacitors, diode, button, DIP ICs, headers, MCU breakouts (Arduino Uno/Nano, ESP32, Raspberry Pi Pico), HC-SR04, DHT11/22, SSD1306 OLED, LCD 1602 I²C, rotary encoder, servo.
- ·Cubic Bézier wire routing with
via @coordoverride; post-layout shift with copy-on-return fix for shared pin references. - ·Z-ordered renderer: substrate + rails + trough + parts + wires, semantic SVG with CSS class hooks.
- ·Full pipeline: parser → longest-path layered layout with DFS cycle-break → orthogonal Manhattan routing → SVG renderer.
- ·Pools & lanes:
pool "Name"+lane "Name"for horizontal swimlane partitioning; black-box pools. - ·Events: start · intermediate · end, with none / message / timer trigger variants; correct IEC-style circle glyphs.
- ·Tasks: plain tasks + 6 marker types (user / service / send / receive / manual / script) + collapsed subprocess.
- ·Full pipeline: parser → layered-DAG layout → SVG renderer.
fbd "Title"keyword auto-detects. - ·40+ standard blocks with correct IEC distinctive symbols:
&(AND),≥1(OR),=1(XOR),1(BUF/NOT),SR,RS,TON,TOF,CTU,CTD,ADD,SUB,MUL,DIV,MOD,LT,GT,LE,GE,EQ,NE,SEL,MUX,LIMIT,MOVE,BOOL_TO_INT, and more. - ·Output negation bubbles on NAND, NOR, XNOR, NOT (small circle on output port per IEC standard).
- ·Wire data-type coloring: BOOL = black, INT = blue, REAL = orange, TIME = magenta — follows TIA Portal convention.
- ·Full pipeline: parser → recursive-region layout → SVG renderer.
sfc "Title"keyword auto-detects. - ·Steps:
step S0 [initial],step S1 [label: "Filling"]— initial step renders with double border per IEC §6.5.1.2. - ·Transitions:
transition from: S0 to: S1: StartBtn— condition text rendered next to the horizontal bar. - ·Action blocks: right-side action boxes with qualifier compartment (N/S/R/L/D/P/P0/P1/SD/DS/SL) + body text + optional time row (
D Mixer_Run T#10s).
Addedinfrastructure and docs
- ·11 new example MDX files covering ERD, Breadboard, BPMN, FBD, and SFC — all with industry context, complexity ratings, and
featuredflags. - ·5 new reference docs:
docs/reference/23-FBD-STANDARD.md,24-SFC-STANDARD.md,25-ERD-STANDARD.md,26-BREADBOARD-STANDARD.md,27-BPMN-STANDARD.md. - ·New Data modeling cluster added to
docs/reference/00-OVERVIEW.mdand AI registry. - ·AI registry: all 5 types in
src/ai/registry.ts; syntax keys inscripts/build-ai-content.mjs; total AI-bundled syntax docs 27, examples 58.
v0.3.5
2026-05-04Fixedproduction-audit findings (3 items)
- ·Logic parser: ref-before-decl now a warning, not a hard error. When a gate references a signal that was never declared with
input, the parser previously threwUnknown signal "X" in gate Y. It now auto-declares the signal as an input and appends a string toast.warnings. Active-low markers (~) are preserved on auto-declared signals. This matches real production patterns where LLMs emit gate-first DSL without explicitinputlines.LogicGateInputgainsautoDeclared?: boolean;LogicGateASTgainswarnings?: string[]. - ·Smart-quote support across all diagram header titles. Eleven parsers extracted diagram titles with the regex
/"([^"]*)"/, which rejected Unicode curly quotes and other locale-specific pairs used by non-English speakers. A new shared helper (src/core/quotes.ts) recognises"…"'…'"…"'…'«…»「…」『…』and\"/\'escape sequences. All header-title extraction in blockdiagram, circuit, entity, ladder, logic, orgchart, phylo, sld, sociogram, timing, and venn parsers now uses this helper. - ·Venn tokenizer: smart-quote support in title, set labels, region values, and comment stripping.
parseTitleAndProps,parseConfigProps,splitTopLevelCommas, andparseValueall updated to be quote-pair-aware. ThestripCommenthelper now correctly skips over non-ASCII quote pairs (e.g.«…») before looking for#. Fixes both theunterminated quoted titleerror and the\"escape robustness gap reported in Spanish-locale sessions. - ·--
v0.3.4
2026-05-02Changedbackground handling
- ·Removed
background:from inline<style>blocks across all 19 - ·PNG export (
svgToPngBlob) defaults to transparent. Previously - ·Dark theme requires a dark host wrapper. When using
theme: "dark", - ·--
v0.3.3
2026-05-01Fixedproduction-audit findings (4 items)
- ·flowchart
linkStylenow actually renders. Parser already acceptedlinkStyle 1,5,6 stroke:#ff0000,stroke-width:4pxbut stored the result without applying it. Renderer now emitsdata-edge-index="N"per edge and emits matching CSS overrides. Multiple comma-separated indices supported per statement. - ·flowchart inline
<b>/<i>in node labels.multilineTextpreviously stripped these tags. Now per-line segments inside<b>...</b>render withfont-weight=bold;<i>...</i>withfont-style=italic. Mid-line bolding works (Foo <b>bar</b> baz). Combines with existing<br/>line-break support. - ·circuit
Cannot infer typeerror message rewrite. Old:Cannot infer type from id "X" — use type= override. New message lists the valid SPICE prefixes (R/C/L/D/V/I/Q/M/J/S/F/B/K/U/X/W/T), gives an explicittype=…example using the user's id, and states the engine's scope (electrical schematics only — hydraulic/pneumatic prefixes likeEV*,BOMBA*,TANK*are not supported). - ·genogram dual-union sibship regression test. New test in
tests/genogram/layout.test.tscovers the case where one shared parent has children with two different partners (Case F from the 2026-05-01 audit). Confirms the existing layout already groups offspring per-union with cross-union gap > 1.25× within-sibship gap. No layout change required — added as regression guard.
v0.3.2
2026-04-30ChangedInternal cleanup of v0.3.1 fixes
- ·circuit/netlist: consolidated 4 separate ground-check codepaths (
GROUND_NETSset,isGroundNetName,GROUND_ID_PATTERN, inline error-hint regex) into oneisGroundRefhelper. Trimmed redundant error-message hint that duplicated the auto-resolve branch. - ·timeline/parser: removed unreachable
ifblock (startsWith("")is always true) and its empty body. The block was also silently dropping the colon validation that previously existed fortrack "Name":. - ·react.tsx: restored a concise inline comment explaining why
onErroris excluded fromuseMemodeps. Previous 3-line comment was self-contradictory ("no disable comment is needed" — written as a 3-line replacement for a 1-line disable comment). - ·eslint.config / orgchart / svg / circuit symbols / pedigree / blockdiagram / flowchart / genogram: trimmed multi-line "story" comments down to single-line intent. Removed comments that re-narrated obvious code or self-referenced the audit PR.
v0.3.1
2026-04-305 diagramsFixedBlockdiagram: inline
[id] -> [id] no longer rejected (Case F)- ·--
v0.3.0
2026-04-295 diagrams- ·--
v0.2.5
2026-04-271 diagram- ·--
v0.2.4
2026-04-251 diagram- ·*Fix: the sibship bar now extends to
min(leftX, midX) … max(rightX, midX), guaranteeing the parent drop always lands on it regardless of where children are positioned. - ·--
v0.2.3
2026-04-25 (backfilled)AddedStructured parse errors (Pass A)
- ·--
v0.2.3
2026-04-25AddedUnified legend system
- ·
bottom-inline(new default): sections flow left-to-right in rows; canvas minimum width 480 px - ·
bottom-right: compact floating legend anchored to the lower-right corner; does not widen the chart canvas - ·
none/legend: none: suppress legend entirely - ·
LegendItem.fill— new field on theLegendItemtype; separates shape-fill color from stroke/line color so swatches render WYSIWYG
AddedAI tool layer (
schematex/ai, schematex/ai/sdk, @schematex/mcp)- ·*
schematex/ai— five tools with JSON schemas: - ·*
schematex/ai/sdk— drop-in Vercel AI SDK adapter: - ·*
@schematex/mcp— standalone stdio MCP server (separate package, same five tools):
Changed
- ·Genogram legend: auto-derivation excludes Male/Female shapes, Married, and Parent-Child — universal McGoldrick conventions omitted by default
- ·No legend border/box: hairline box dropped; legend is borderless and minimal
- ·Chart centering: when the legend widens the canvas beyond the chart's natural width, chart content is translated to remain horizontally centered
Fixed
- ·Mindmap left-align: node label text is now flush with the left edge of the underline; previously offset ~2 px due to an incorrect anchor calculation
- ·Genogram condition fill:
.schematex-genogram-condition-fill:not([fill])— theme CSS no longer overrides per-individual inlinefillattributes - ·Quad clip-path: switched to
clipPathUnits="objectBoundingBox"with 0..1 fractional coordinates;quad-tl/quad-trnow clip to the correct quadrant - ·--
v0.2.2
2026-04-231 diagram- ·*bold text / *italic* /
code - ·Multi-line text wrapping via
%% maxLabelWidth: Ndirective (default 240 px) - ·New
InlineTokendiscriminated union insrc/core/types.ts:text | code | link | checkbox - ·New
MindmapLabelLinetype;MindmapLayoutNodegainsfontSizeandlinesfields
- ·All nodes use a single underline-based visual: no root capsule border, no node box at any depth
- ·Bezier edges terminate precisely at the underline stroke (fixed 2 px y-offset bug from previous release)
- ·Same-depth nodes share identical
labelWidth(global equalization), so bezier curves at the same depth span identical horizontal distances - ·Root node gets a 1.5× wrap budget (proportional to its 20 pt font) so short titles stay on one line
v0.2.0
2026-04-201 diagramAdded
- ·Timeline diagram type — three visual styles in one DSL:
- ·
style: swimlane— proportional/equidistant/log scale axis; auto-track packing via greedy interval scheduling; bidirectional label cascade with leader lines; era bands - ·
style: gantt— milestone pin zone with label cascade; category lane grouping - ·
style: lollipop— event-only axis with lollipop stems and cards
ChangedBreaking
- ·Package renamed from
lineagetoschematex— update all imports: - ·License changed to AGPL-3.0
- ·Phase 1 — crossing minimization: Barth–Junger–Mutzel barycenter with forward/backward sweep and best-of-N selection
- ·Phase 2 — x-coordinate assignment: Brandes–Kopf 4-alignment (new shared module
src/core/layered/bk.ts) with type-1 conflict detection, block compaction, and balanced-median merge - ·Phase 3 — subgraph support: lane-based x-coord assignment so cluster bboxes never overlap foreign-lane nodes;
subgraph Title … end/endblock syntax; cluster and title labels have correct viewport padding - ·*8 new M2 node shapes (in addition to the 7 M1 shapes from 0.1.1):
Changed
- ·Unified
DiagramPlugininterface:render(text, config?)andparse?(text, config?)are now the canonical entry points per plugin; all renderers migrated - ·--
v0.1.1
2026-04-18Added5 new diagram types
- ·Flowchart — initial implementation:
- ·Mermaid-compatible DSL (
-->,--label-->,-.->,==>) - ·7 M1 node shapes: rectangle
[…], rounded(…), stadium([…]), circle((…)), rhombus{…}, trapezoid[/…/], asymmetric>…] - ·Layered layout (basic, no crossing minimization — see 0.2.0 for full Sugiyama)
Changed
- ·Per-diagram subpath exports: every diagram type now has its own addressable entry point:
- ·Unified semantic color tokens: all 6 engineering diagrams (circuit, logic, ladder, SLD, block, timing) now respect the shared
default/monochrome/darktheme — previously these diagrams used hardcoded colors - ·Theme token cleanup: removed redundant/dead tokens from
src/core/theme.ts; token surface area reduced without breaking existing theme customization
Fixed
- ·Venn label placement: label placement algorithm rewritten — set labels, intersection labels, and count chips no longer overlap on 3-circle and 4-circle diagrams
- ·Fishbone: new DSL layout options —
sides: both | left | right,density: compact | normal | wide,cause-side:,rib-slope: <degrees>, per-rib[side: …, order: …]overrides; alternating rib placement; improved spine and header sizing - ·--
v0.1.0
2026-03-15Added
- ·Core pipeline: Text DSL → Parser → AST → Layout → SVG
- ·Relationships: Genogram (McGoldrick standard), Ecomap (Hartman categories), Pedigree (genetic status / carrier / presymptomatic)
- ·Biological: Phylogenetic tree (Newick/NHX format; clade coloring)
- ·Social science: Sociogram (Moreno sociometry; force-directed layout; valence edges)