Skip to main content
Glama

Add a tab to a document

add_tab

Add a NEW tab (its own canvas) to an existing document — e.g. a detail view zooming into one part of an architecture. Produce the elements like create_document (or pass "template" instead of elements to start from a hand-tuned scaffold); the server validates, lays out per the layout arg, appends the tab, and returns an inline PNG. Run read_document first to see the document and its existing tabs.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYesName of the new tab. Keep it short: at most 60 characters. A longer name is shortened at a word boundary with an ellipsis.
graphNoA node/edge graph the server turns into laid-out boxes + arrows — the easiest way to author. Provide one of graph, mermaid, elements or template.
themeNoPreset theme id that paints the whole diagram + canvas. One of: brand, slate, forest, sunset, lavender, mono, ocean, sky, midnight, cream, rose, sand, olive, indigo, pine, steel, mocha, plum, abyss, espresso, rainbow, pastel, tropical, uml, sparkle, spring, pumpkin, yuletide, frost, evergreen. Omit per-element colours and let the theme own them. Defaults to "brand".
finishNoHow the tab is drawn (docs/specs/008-canvas/finish.md): "flexible" (the default), "professional" (crisp corners, thin lines, no shadows), "sketch" (hand-drawn pencil lines, hatched fills, a handwriting font) or "marker" (bold felt-tip lines, coloured-in fills, marker lettering). An element can carry its own "finish" too.
layoutNoHow to position elements. "preserve" keeps the exact x/y you give — use it for a deliberate shape (a cycle as a ring, a tree, a grid). "auto" arranges a clean directed graph for you. Omit to auto-detect: a real arrangement is kept; nodes left piled at one point get laid out. Supporting text is always kept in place either way.
mermaidNoThe diagram as Mermaid text: a flowchart (graph / flowchart, with subgraphs), a state diagram (stateDiagram), an ER diagram (erDiagram: crow's-foot ends from the cardinality tokens, an entity alias in brackets is its title, BOOK_AUTHOR[Book author]) or a sequence diagram (sequenceDiagram: participant / actor, ->> calls, -) async, -->> replies, +/- activations, Note over, alt/else, loop, opt, par, autonumber, title). Parsed into the same graph as the "graph" input: subgraphs become groups, the direction is kept, and the same label limit applies; a sequence diagram is drawn with lifelines, activation bars, notes and fragments. Front matter (---, title: Text, ---) titles any of them. Provide one of graph, mermaid, elements or template.
elementsNoAn array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { "id": a unique string, "type", "x", "y", "width", "height", and optional "label" }. type "shape" is a NODE (a labelled box) and also needs "shape", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, avatar-pad, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, final-state, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is "square" (there is NO "rectangle"); use "diamond" for a decision, "cylinder" for a datastore, "stadium" for start/end. type "text" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets "textAlignX": "left". type "freehand" is a HAND-DRAWN stroke: give "points" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with "closed" true to close and fill the shape, and "penColour" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the "whiteboard" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned "arrow", which a "sketch" finish draws by hand and which stays attached. Any box may carry "rotation" in degrees, a small tilt (-4 to 4) reading as placed by hand. type "arrow" needs "from" and "to" endpoints, each either { "kind": "pinned", "elementId", "anchor" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { "kind": "free", "x", "y" }; an arrow may carry a "label". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry "finish" ("flexible", "professional", "sketch" or "marker") to be drawn differently from its tab. Style fields: "textSize" (sm, md, lg, scale), "textAlignX" (left, center, right), "textAlignY" (top, middle, bottom), "iconPosition" (left, right, above, below), "arrowStyle" (straight, angled, curved), "arrowEnds" (to, from, both, none), "arrowheadShape" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), "arrowheadStartShape" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), "strokeStyle" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), "borderRadius" (none, sm, md, lg, full), "accentEdge" (left, top, bottom), "cardMedia" (badge, tile, initial), "chipLook" (solid, ink, outline, tinted, quiet), "attachAt" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), "boundaryStyle" (tab, inset, c4), "pyramidVariant" (pyramid, inverted, funnel), "stackDirection" (row, column, grid), "stackAlign" (start, center, end), "mindLook" (person), "sequenceAnim" (play), "iconWeight" (thin, regular, bold), "font" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); "textBold", "textItalic" (true/false); "colorPreset" (a shape’s look from the theme, its border’s width and style included, so it outranks a "strokeStyle" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); "iconId" (an id from search_icons) with "iconPosition"; "note" (detail shown on the element); on text, wordmark type: "letterSpacing" (em between letters, -0.2 to 1), "fontWeight" (400, 500, 700), "textCase" (upper, lower), "textArc" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow "label", "strokeStyle", "arrowEnds", "arrowheadShape" (an ER line’s ends: one, zero-or-one, many, zero-or-many, one-or-many), "arrowheadStartShape" (the start’s, when it differs: a one at one table, a many at the other). A Mermaid erDiagram draws these ends itself. A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: "session-button" a "session" ({"tool": "timer" with "minutes", "stopwatch", "vote" with "dots", or "poll" with "question" and "options"}), drawn as what pressing it does unless it has a label; "agenda" its "agendaItems" ([{"label", "minutes"}]); "checklist" its "checklistItems" ([{"text", "done"}]); a stat row its "stats" ([{"value", "caption"}]); a callout its "pageTitle" over its "label" (the body); a banner its "pageTitle" and "pageSubtitle"; "sticker" a "stickerId" (an emoji- id from search_icons). The entries of a "qa-board", "idea-box" and "temperature" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type "sticky": a note whose "label" is its text; the theme never recolours it, so its own "fillColor" + "textColor" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. A sticky with "esKind" (domain-event, command, actor, policy, read-model, external-system, aggregate, hotspot) is an event-storming note of that kind (its paper, size and lane on a storm board): add one to a board with the edit `add sticky label="Courier" esKind=actor`. type "image": a picture from the user's gallery: "imageId" is an id from list_images (one not in the gallery is refused); without it the element is a placeholder the user fills in the editor. "objectFit" contain (default, the whole picture) or cover (fills the box, cropping); "alt" describes it. A box in the picture's own proportions (its width and height from list_images, scaled) shows it uncropped. type "table": "cells" is rows of strings (ragged rows are padded), "headerRow" / "headerColumn" style the first row / column, "zebra" tints alternate rows. shape "code-block": "code" (up to 4000 chars), "codeLanguage" (plain, ts, js, python, json, bash, sql, html, css, yaml), "codeTheme" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), "codeWrap"; the block draws itself and shows no label. shape "entity": "label" is the title, "entityFields" is [{ "name", "type"?, "key"? }] rows (up to 40; "key" is "pk", "fk", "pk-fk" or "uk"); the box grows to fit its rows. A pinned arrow end on an entity may add "field": a row index, with anchor "w" or "e", to join that field. shape "lane": a swimlane whose "label" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape "bar-chart" / "pie-chart": "pieSlices" is [{ "label", "value" }]; categories show in the legend. shape "line-chart": "lineCategories" is the x labels, "lineSeries" is [{ "name", "values" }] with one value per category. "chartVariant" picks the chart type: on "bar-chart" "horizontal" draws a Bar chart (absent: upright columns); on "line-chart" "area" fills each series down to zero and "scatter" draws points only, at x = each category read as a number; on "pie-chart" "doughnut" opens the middle. "chartValues": true prints each mark's number on the chart (a pie's as percentages when its values add up to 100; a column chart also names each column under it, so "chartLegend": false can drop the key). "chartAxis": true draws the value axis, round tick values and gridlines (not on a pie). A "lineSeries" entry with "axis": "right" is drawn against a scale of its own, labelled on the right, so a series in the thousands and one in the tens both read. A chart draws no title (a caption is a separate "text" element) and draws sample data when its data is empty. shape "sankey": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. "sankeyFlows" is [{ "from", "to", "value" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: "sankeyLinkColor" (gradient, source, target, neutral; default gradient), "sankeyAlign" (justify: end nodes in the last column, the default; left: each at its own step), "sankeyValueLabel" (value, percent, none), "sankeyUnit" (e.g. "£", "kWh"; up to 8 chars), "sankeyNodes" [{ "name", "color", "leftover": false }] to colour a node or switch off its own leftover, "sankeyLeftover" (show, the default: a middle node that sends on less than it receives draws the difference to a "Leftover" end node; hide: it does not), "sankeyLeftoverName" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape "card": a node with a title, meta line and body; "pageTitle" is the title, "pageSubtitle" the meta (a product or runtime), "label" the body, "cardMedia" + "iconId" the glyph (a badge disc, a tile or an initial), "cardHeader" true for a coloured header band, "tags" up to 6 short facts. Use cards for service and component nodes. "callout" is accepted and stored as a card. "accentEdge" on a square, stadium or card draws a coloured strip on that side. shape "badge": a small label pill (up to 24 chars); shape "step": a numbered disc ("label" the number, up to 3 chars). Both take "chipLook"; with "attachedTo" (a node id) and "attachAt" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape "boundary": a titled container ("label" the title, "pageSubtitle" a meta line such as a CIDR, "iconId" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, "boundaryStyle" inset for a nested one, c4 for a C4 diagram. shape "layer-stack" / "pyramid" / "cycle": "conceptRows" is [{ "label", "note"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; "pyramidVariant" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its "label" is the centre); "hub" 3 to 8 satellites round its "label" ("hubSpokes" false hides the lines), "onion" 2 to 6 rings from the core out, "chevrons" 2 to 8 stages left to right, "timeline-rail" 2 to 8 milestones left to right (label = what, note = when: a date, a quarter). They draw their own rows in the colour ramp; do not draw them from separate shapes. shape "pointer-note": a note ("label") with a leader to a tip; "pointerTip" { x, y } is relative to its top-left, or "attachedTo" + "attachAt" pins the tip to that point of a node. shape "diagram-key": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, "keyMeanings" maps a row id ("line:dashed", "tag:<tag>") to what it means. shape "stack": a container that lines up the elements whose centre is inside it; "stackDirection", "stackColumns" (2 to 6, grid), "stackGap" and "stackPadding" (0 to 64), "stackAlign"; place children anywhere inside and the editor lays them out. An org chart is quickest as a graph with style "tree" and a "role" on each node (see the graph tool). shape "sequence": a UML sequence diagram in one element; "sequenceParticipants" is [{ "id", "label", "actor"? }] (2 to 12, left to right), "sequenceMessages" [{ "from", "to", "label", "kind": call | async | reply }] (up to 60, top to bottom, from === to a self-call), "sequenceNumbered" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit.
templateNoStart from a hand-tuned template scaffold instead of providing elements: a template kind from list_templates (e.g. "kanban", "flowchart", "gantt"). The server materialises its curated layout ("layout" is ignored for a template tab) and paints it with the chosen theme. Personalise the placeholder labels afterwards with update_document mode "ops". Provide template OR elements, not both.
dashboardNoMake the tab a Plan Dashboard instead of a canvas: rows of the tabs it shows, then metrics, Gantts, other charts and notes, each drawn live from the cards; up to 12 rows. Give it in place of graph, mermaid, elements or template.
documentIdYesThe document to add a tab to (from find_documents / read_document).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
revYesThe tab revision now, to pass as rev on the next update_document.
urlYesLink that opens the document in the livediagram editor.
lintYesThe diagram lint summary line of the tab as written.
nameYesThe stored tab name (shortened if it was over the cap).
noteNoSaid when a template has more tabs than add_tab adds.
textYesWhat the changeset did, one line per element, and how to revert it.
notesNoWhat the graph or Mermaid could not keep of what it asked (a nested subgraph folded).
tabIdYesThe new tab id.
documentIdYesThe document id.
changesetIdYesThe changeset written; null when nothing changed.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / elements / description
      Previous value: -"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, avatar-pad, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, final-state, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\", \"sketch\" or \"marker\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\" (an ER line’s ends: one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (the start’s, when it differs: a one at one table, a many at the other). A Mermaid erDiagram draws these ends itself. A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. A sticky with \"esKind\" (domain-event, command, actor, policy, read-model, external-system, aggregate, hotspot) is an event-storming note of that kind (its paper, size and lane on a storm board): add one to a board with the edit `add sticky label=\"Courier\" esKind=actor`. type \"image\": a picture from the user's gallery: \"imageId\" is an id from list_images (one not in the gallery is refused); without it the element is a placeholder the user fills in the editor. \"objectFit\" contain (default, the whole picture) or cover (fills the box, cropping); \"alt\" describes it. A box in the picture's own proportions (its width and height from list_images, scaled) shows it uncropped. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"?, \"key\"? }] rows (up to 40; \"key\" is \"pk\", \"fk\", \"pk-fk\" or \"uk\"); the box grows to fit its rows. A pinned arrow end on an entity may add \"field\": a row index, with anchor \"w\" or \"e\", to join that field. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. \"chartValues\": true prints each mark's number on the chart (a pie's as percentages when its values add up to 100; a column chart also names each column under it, so \"chartLegend\": false can drop the key). \"chartAxis\": true draws the value axis, round tick values and gridlines (not on a pie). A \"lineSeries\" entry with \"axis\": \"right\" is drawn against a scale of its own, labelled on the right, so a series in the thousands and one in the tens both read. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is quickest as a graph with style \"tree\" and a \"role\" on each node (see the graph tool). shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."New value: +"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, avatar-pad, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, final-state, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\", \"sketch\" or \"marker\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\" (an ER line’s ends: one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (the start’s, when it differs: a one at one table, a many at the other). A Mermaid erDiagram draws these ends itself. A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. A sticky with \"esKind\" (domain-event, command, actor, policy, read-model, external-system, aggregate, hotspot) is an event-storming note of that kind (its paper, size and lane on a storm board): add one to a board with the edit `add sticky label=\"Courier\" esKind=actor`. type \"image\": a picture from the user's gallery: \"imageId\" is an id from list_images (one not in the gallery is refused); without it the element is a placeholder the user fills in the editor. \"objectFit\" contain (default, the whole picture) or cover (fills the box, cropping); \"alt\" describes it. A box in the picture's own proportions (its width and height from list_images, scaled) shows it uncropped. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"?, \"key\"? }] rows (up to 40; \"key\" is \"pk\", \"fk\", \"pk-fk\" or \"uk\"); the box grows to fit its rows. A pinned arrow end on an entity may add \"field\": a row index, with anchor \"w\" or \"e\", to join that field. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. \"chartValues\": true prints each mark's number on the chart (a pie's as percentages when its values add up to 100; a column chart also names each column under it, so \"chartLegend\": false can drop the key). \"chartAxis\": true draws the value axis, round tick values and gridlines (not on a pie). A \"lineSeries\" entry with \"axis\": \"right\" is drawn against a scale of its own, labelled on the right, so a series in the thousands and one in the tens both read. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right, \"timeline-rail\" 2 to 8 milestones left to right (label = what, note = when: a date, a quarter). They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is quickest as a graph with style \"tree\" and a \"role\" on each node (see the graph tool). shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."
  2. Changed1 schema field changed
    • changedInput schema / properties / elements / description
      Previous value: -"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, avatar-pad, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, final-state, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\", \"sketch\" or \"marker\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\" (an ER line’s ends: one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (the start’s, when it differs: a one at one table, a many at the other). A Mermaid erDiagram draws these ends itself. A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. A sticky with \"esKind\" (domain-event, command, actor, policy, read-model, external-system, aggregate, hotspot) is an event-storming note of that kind (its paper, size and lane on a storm board): add one to a board with the edit `add sticky label=\"Courier\" esKind=actor`. type \"image\": a picture from the user's gallery: \"imageId\" is an id from list_images (one not in the gallery is refused); without it the element is a placeholder the user fills in the editor. \"objectFit\" contain (default, the whole picture) or cover (fills the box, cropping); \"alt\" describes it. A box in the picture's own proportions (its width and height from list_images, scaled) shows it uncropped. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. \"chartValues\": true prints each mark's number on the chart (a pie's as percentages when its values add up to 100; a column chart also names each column under it, so \"chartLegend\": false can drop the key). \"chartAxis\": true draws the value axis, round tick values and gridlines (not on a pie). A \"lineSeries\" entry with \"axis\": \"right\" is drawn against a scale of its own, labelled on the right, so a series in the thousands and one in the tens both read. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is quickest as a graph with style \"tree\" and a \"role\" on each node (see the graph tool). shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."New value: +"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, avatar-pad, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, final-state, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\", \"sketch\" or \"marker\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\" (an ER line’s ends: one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (the start’s, when it differs: a one at one table, a many at the other). A Mermaid erDiagram draws these ends itself. A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. A sticky with \"esKind\" (domain-event, command, actor, policy, read-model, external-system, aggregate, hotspot) is an event-storming note of that kind (its paper, size and lane on a storm board): add one to a board with the edit `add sticky label=\"Courier\" esKind=actor`. type \"image\": a picture from the user's gallery: \"imageId\" is an id from list_images (one not in the gallery is refused); without it the element is a placeholder the user fills in the editor. \"objectFit\" contain (default, the whole picture) or cover (fills the box, cropping); \"alt\" describes it. A box in the picture's own proportions (its width and height from list_images, scaled) shows it uncropped. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"?, \"key\"? }] rows (up to 40; \"key\" is \"pk\", \"fk\", \"pk-fk\" or \"uk\"); the box grows to fit its rows. A pinned arrow end on an entity may add \"field\": a row index, with anchor \"w\" or \"e\", to join that field. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. \"chartValues\": true prints each mark's number on the chart (a pie's as percentages when its values add up to 100; a column chart also names each column under it, so \"chartLegend\": false can drop the key). \"chartAxis\": true draws the value axis, round tick values and gridlines (not on a pie). A \"lineSeries\" entry with \"axis\": \"right\" is drawn against a scale of its own, labelled on the right, so a series in the thousands and one in the tens both read. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is quickest as a graph with style \"tree\" and a \"role\" on each node (see the graph tool). shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."
  3. Changed3 schema fields changed
    • changedInput schema / properties / elements / description
      Previous value: -"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, avatar-pad, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, final-state, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\" (an ER line’s ends: one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (the start’s, when it differs: a one at one table, a many at the other). A Mermaid erDiagram draws these ends itself. A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. A sticky with \"esKind\" (domain-event, command, actor, policy, read-model, external-system, aggregate, hotspot) is an event-storming note of that kind (its paper, size and lane on a storm board): add one to a board with the edit `add sticky label=\"Courier\" esKind=actor`. type \"image\": a picture from the user's gallery: \"imageId\" is an id from list_images (one not in the gallery is refused); without it the element is a placeholder the user fills in the editor. \"objectFit\" contain (default, the whole picture) or cover (fills the box, cropping); \"alt\" describes it. A box in the picture's own proportions (its width and height from list_images, scaled) shows it uncropped. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. \"chartValues\": true prints each mark's number on the chart (a pie's as percentages when its values add up to 100; a column chart also names each column under it, so \"chartLegend\": false can drop the key). \"chartAxis\": true draws the value axis, round tick values and gridlines (not on a pie). A \"lineSeries\" entry with \"axis\": \"right\" is drawn against a scale of its own, labelled on the right, so a series in the thousands and one in the tens both read. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is quickest as a graph with style \"tree\" and a \"role\" on each node (see the graph tool). shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."New value: +"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, avatar-pad, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, final-state, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\", \"sketch\" or \"marker\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\" (an ER line’s ends: one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (the start’s, when it differs: a one at one table, a many at the other). A Mermaid erDiagram draws these ends itself. A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. A sticky with \"esKind\" (domain-event, command, actor, policy, read-model, external-system, aggregate, hotspot) is an event-storming note of that kind (its paper, size and lane on a storm board): add one to a board with the edit `add sticky label=\"Courier\" esKind=actor`. type \"image\": a picture from the user's gallery: \"imageId\" is an id from list_images (one not in the gallery is refused); without it the element is a placeholder the user fills in the editor. \"objectFit\" contain (default, the whole picture) or cover (fills the box, cropping); \"alt\" describes it. A box in the picture's own proportions (its width and height from list_images, scaled) shows it uncropped. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. \"chartValues\": true prints each mark's number on the chart (a pie's as percentages when its values add up to 100; a column chart also names each column under it, so \"chartLegend\": false can drop the key). \"chartAxis\": true draws the value axis, round tick values and gridlines (not on a pie). A \"lineSeries\" entry with \"axis\": \"right\" is drawn against a scale of its own, labelled on the right, so a series in the thousands and one in the tens both read. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is quickest as a graph with style \"tree\" and a \"role\" on each node (see the graph tool). shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."
    • changedInput schema / properties / finish / description
      Previous value: -"How the tab is drawn (docs/specs/008-canvas/finish.md): \"flexible\" (the default), \"professional\" (crisp corners, thin lines, no shadows) or \"sketch\" (hand-drawn lines, hatched fills, a handwriting font). An element can carry its own \"finish\" too."New value: +"How the tab is drawn (docs/specs/008-canvas/finish.md): \"flexible\" (the default), \"professional\" (crisp corners, thin lines, no shadows), \"sketch\" (hand-drawn pencil lines, hatched fills, a handwriting font) or \"marker\" (bold felt-tip lines, coloured-in fills, marker lettering). An element can carry its own \"finish\" too."
    • changedInput schema / properties / finish / enum
      Previous value: -[
      -  "flexible",
      -  "professional",
      -  "sketch"
      -]New value: +[
      +  "flexible",
      +  "professional",
      +  "sketch",
      +  "marker"
      +]
  4. Changed2 schema fields changed
    • changedInput schema / properties / elements / description
      Previous value: -"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, final-state, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\" (an ER line’s ends: one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (the start’s, when it differs: a one at one table, a many at the other). A Mermaid erDiagram draws these ends itself. A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. A sticky with \"esKind\" (domain-event, command, actor, policy, read-model, external-system, aggregate, hotspot) is an event-storming note of that kind (its paper, size and lane on a storm board): add one to a board with the edit `add sticky label=\"Courier\" esKind=actor`. type \"image\": a picture from the user's gallery: \"imageId\" is an id from list_images (one not in the gallery is refused); without it the element is a placeholder the user fills in the editor. \"objectFit\" contain (default, the whole picture) or cover (fills the box, cropping); \"alt\" describes it. A box in the picture's own proportions (its width and height from list_images, scaled) shows it uncropped. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. \"chartValues\": true prints each mark's number on the chart (a pie's as percentages when its values add up to 100; a column chart also names each column under it, so \"chartLegend\": false can drop the key). \"chartAxis\": true draws the value axis, round tick values and gridlines (not on a pie). A \"lineSeries\" entry with \"axis\": \"right\" is drawn against a scale of its own, labelled on the right, so a series in the thousands and one in the tens both read. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is quickest as a graph with style \"tree\" and a \"role\" on each node (see the graph tool). shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."New value: +"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, avatar-pad, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, final-state, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\" (an ER line’s ends: one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (the start’s, when it differs: a one at one table, a many at the other). A Mermaid erDiagram draws these ends itself. A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. A sticky with \"esKind\" (domain-event, command, actor, policy, read-model, external-system, aggregate, hotspot) is an event-storming note of that kind (its paper, size and lane on a storm board): add one to a board with the edit `add sticky label=\"Courier\" esKind=actor`. type \"image\": a picture from the user's gallery: \"imageId\" is an id from list_images (one not in the gallery is refused); without it the element is a placeholder the user fills in the editor. \"objectFit\" contain (default, the whole picture) or cover (fills the box, cropping); \"alt\" describes it. A box in the picture's own proportions (its width and height from list_images, scaled) shows it uncropped. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. \"chartValues\": true prints each mark's number on the chart (a pie's as percentages when its values add up to 100; a column chart also names each column under it, so \"chartLegend\": false can drop the key). \"chartAxis\": true draws the value axis, round tick values and gridlines (not on a pie). A \"lineSeries\" entry with \"axis\": \"right\" is drawn against a scale of its own, labelled on the right, so a series in the thousands and one in the tens both read. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is quickest as a graph with style \"tree\" and a \"role\" on each node (see the graph tool). shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."
    • changedInput schema / properties / graph / properties / nodes / items / properties / shape / description
      Previous value: -"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, final-state, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. A \"circle\" with no label is a small solid dot, a state machine's start; \"final-state\" is its end, a bullseye."New value: +"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, avatar-pad, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, final-state, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. A \"circle\" with no label is a small solid dot, a state machine's start; \"final-state\" is its end, a bullseye."
  5. Changed1 schema field changed
    • changedInput schema / properties / elements / description
      Previous value: -"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, final-state, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\" (an ER line’s ends: one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (the start’s, when it differs: a one at one table, a many at the other). A Mermaid erDiagram draws these ends itself. A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. A sticky with \"esKind\" (domain-event, command, actor, policy, read-model, external-system, aggregate, hotspot) is an event-storming note of that kind (its paper, size and lane on a storm board): add one to a board with the edit `add sticky label=\"Courier\" esKind=actor`. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. \"chartValues\": true prints each mark's number on the chart (a pie's as percentages when its values add up to 100; a column chart also names each column under it, so \"chartLegend\": false can drop the key). \"chartAxis\": true draws the value axis, round tick values and gridlines (not on a pie). A \"lineSeries\" entry with \"axis\": \"right\" is drawn against a scale of its own, labelled on the right, so a series in the thousands and one in the tens both read. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is quickest as a graph with style \"tree\" and a \"role\" on each node (see the graph tool). shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."New value: +"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, final-state, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\" (an ER line’s ends: one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (the start’s, when it differs: a one at one table, a many at the other). A Mermaid erDiagram draws these ends itself. A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. A sticky with \"esKind\" (domain-event, command, actor, policy, read-model, external-system, aggregate, hotspot) is an event-storming note of that kind (its paper, size and lane on a storm board): add one to a board with the edit `add sticky label=\"Courier\" esKind=actor`. type \"image\": a picture from the user's gallery: \"imageId\" is an id from list_images (one not in the gallery is refused); without it the element is a placeholder the user fills in the editor. \"objectFit\" contain (default, the whole picture) or cover (fills the box, cropping); \"alt\" describes it. A box in the picture's own proportions (its width and height from list_images, scaled) shows it uncropped. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. \"chartValues\": true prints each mark's number on the chart (a pie's as percentages when its values add up to 100; a column chart also names each column under it, so \"chartLegend\": false can drop the key). \"chartAxis\": true draws the value axis, round tick values and gridlines (not on a pie). A \"lineSeries\" entry with \"axis\": \"right\" is drawn against a scale of its own, labelled on the right, so a series in the thousands and one in the tens both read. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is quickest as a graph with style \"tree\" and a \"role\" on each node (see the graph tool). shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."
  6. Changed1 schema field changed
    • changedInput schema / properties / theme / description
      Previous value: -"Preset theme id that paints the whole diagram + canvas. One of: brand, slate, forest, sunset, lavender, mono, ocean, sky, midnight, cream, rose, sand, olive, indigo, pine, steel, mocha, plum, abyss, espresso, rainbow, pastel, tropical, uml. Omit per-element colours and let the theme own them. Defaults to \"brand\"."New value: +"Preset theme id that paints the whole diagram + canvas. One of: brand, slate, forest, sunset, lavender, mono, ocean, sky, midnight, cream, rose, sand, olive, indigo, pine, steel, mocha, plum, abyss, espresso, rainbow, pastel, tropical, uml, sparkle, spring, pumpkin, yuletide, frost, evergreen. Omit per-element colours and let the theme own them. Defaults to \"brand\"."
  7. Changed3 schema fields changed
    • changedInput schema / properties / elements / description
      Previous value: -"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\" (an ER line’s ends: one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (the start’s, when it differs: a one at one table, a many at the other). A Mermaid erDiagram draws these ends itself. A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. \"chartValues\": true prints each mark's number on the chart (a pie's as percentages when its values add up to 100; a column chart also names each column under it, so \"chartLegend\": false can drop the key). A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is quickest as a graph with style \"tree\" and a \"role\" on each node (see the graph tool). shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."New value: +"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, final-state, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\" (an ER line’s ends: one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (the start’s, when it differs: a one at one table, a many at the other). A Mermaid erDiagram draws these ends itself. A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. A sticky with \"esKind\" (domain-event, command, actor, policy, read-model, external-system, aggregate, hotspot) is an event-storming note of that kind (its paper, size and lane on a storm board): add one to a board with the edit `add sticky label=\"Courier\" esKind=actor`. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. \"chartValues\": true prints each mark's number on the chart (a pie's as percentages when its values add up to 100; a column chart also names each column under it, so \"chartLegend\": false can drop the key). \"chartAxis\": true draws the value axis, round tick values and gridlines (not on a pie). A \"lineSeries\" entry with \"axis\": \"right\" is drawn against a scale of its own, labelled on the right, so a series in the thousands and one in the tens both read. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is quickest as a graph with style \"tree\" and a \"role\" on each node (see the graph tool). shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."
    • changedInput schema / properties / graph / properties / groups / items / properties / id / description
      Previous value: -"Unique id (an edge may point at a group)."New value: +"Unique id, never also a node's (an edge may point at a group)."
    • changedInput schema / properties / graph / properties / nodes / items / properties / shape / description
      Previous value: -"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. A \"circle\" with no label is a small solid dot, a state machine's start or end."New value: +"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, final-state, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. A \"circle\" with no label is a small solid dot, a state machine's start; \"final-state\" is its end, a bullseye."
  8. Changed6 schema fields changed
    • changedInput schema / properties / elements / description
      Previous value: -"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\". A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is mind nodes with \"mindLook\" person: \"label\" the name, \"pageSubtitle\" the role, \"mindParentId\" the manager, \"mindFlow\" downward on the root. shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."New value: +"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\" (an ER line’s ends: one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (the start’s, when it differs: a one at one table, a many at the other). A Mermaid erDiagram draws these ends itself. A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. \"chartValues\": true prints each mark's number on the chart (a pie's as percentages when its values add up to 100; a column chart also names each column under it, so \"chartLegend\": false can drop the key). A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is quickest as a graph with style \"tree\" and a \"role\" on each node (see the graph tool). shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."
    • addedInput schema / properties / graph / properties / edges / items / properties / ends
      Added value: +{
      +  "description": "Which ends carry an arrowhead. Default: \"to\", except in a tree, whose lines show belonging and carry none.",
      +  "enum": [
      +    "to",
      +    "none",
      +    "both",
      +    "from"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / graph / properties / nodes / items / properties / role
      Added value: +{
      +  "description": "A person's role: the node draws as the org-chart template's person card, the label (their name) in bold over the role, with a person icon unless \"icon\" names another.",
      +  "type": "string"
      +}
    • changedInput schema / properties / graph / properties / nodes / items / properties / shape / description
      Previous value: -"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."New value: +"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. A \"circle\" with no label is a small solid dot, a state machine's start or end."
    • changedInput schema / properties / mermaid / description
      Previous value: -"The diagram as Mermaid text: a flowchart (graph / flowchart, with subgraphs), a state diagram (stateDiagram), an ER diagram (erDiagram) or a sequence diagram (sequenceDiagram: participant / actor, ->> calls, -) async, -->> replies, +/- activations, Note over, alt/else, loop, opt, par, autonumber, title). Parsed into the same graph as the \"graph\" input: subgraphs become groups, the direction is kept, and the same label limit applies; a sequence diagram is drawn with lifelines, activation bars, notes and fragments. Front matter (---, title: Text, ---) titles any of them. Provide one of graph, mermaid, elements or template."New value: +"The diagram as Mermaid text: a flowchart (graph / flowchart, with subgraphs), a state diagram (stateDiagram), an ER diagram (erDiagram: crow's-foot ends from the cardinality tokens, an entity alias in brackets is its title, BOOK_AUTHOR[Book author]) or a sequence diagram (sequenceDiagram: participant / actor, ->> calls, -) async, -->> replies, +/- activations, Note over, alt/else, loop, opt, par, autonumber, title). Parsed into the same graph as the \"graph\" input: subgraphs become groups, the direction is kept, and the same label limit applies; a sequence diagram is drawn with lifelines, activation bars, notes and fragments. Front matter (---, title: Text, ---) titles any of them. Provide one of graph, mermaid, elements or template."
    • addedOutput schema / properties / notes
      Added value: +{
      +  "description": "What the graph or Mermaid could not keep of what it asked (a nested subgraph folded).",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  9. Changed2 schema fields changed
    • changedInput schema / properties / elements / description
      Previous value: -"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\". A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is mind nodes with \"mindLook\" person: \"label\" the name, \"pageSubtitle\" the role, \"mindParentId\" the manager, \"mindFlow\" downward on the root. shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."New value: +"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\". A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is mind nodes with \"mindLook\" person: \"label\" the name, \"pageSubtitle\" the role, \"mindParentId\" the manager, \"mindFlow\" downward on the root. shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."
    • changedInput schema / properties / graph / properties / nodes / items / properties / shape / description
      Previous value: -"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."New value: +"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."
  10. Changed2 schema fields changed
    • changedInput schema / properties / elements / description
      Previous value: -"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, boundary, layer-stack, pyramid, cycle, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\". A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre). They draw their own rows in the colour ramp; do not draw them from separate shapes."New value: +"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\". A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is mind nodes with \"mindLook\" person: \"label\" the name, \"pageSubtitle\" the role, \"mindParentId\" the manager, \"mindFlow\" downward on the root. shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."
    • changedInput schema / properties / graph / properties / nodes / items / properties / shape / description
      Previous value: -"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, boundary, layer-stack, pyramid, cycle, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."New value: +"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."
  11. Changed1 schema field changed
    • changedInput schema / properties / elements / description
      Previous value: -"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, boundary, layer-stack, pyramid, cycle, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\". A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre). They draw their own rows in the colour ramp; do not draw them from separate shapes."New value: +"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, boundary, layer-stack, pyramid, cycle, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\". A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre). They draw their own rows in the colour ramp; do not draw them from separate shapes."
  12. Changed2 schema fields changed
    • changedInput schema / properties / elements / description
      Previous value: -"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\". A field a type does not have, or a value off its list, is refused naming what it takes. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title."New value: +"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, boundary, layer-stack, pyramid, cycle, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\". A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre). They draw their own rows in the colour ramp; do not draw them from separate shapes."
    • changedInput schema / properties / graph / properties / nodes / items / properties / shape / description
      Previous value: -"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."New value: +"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, boundary, layer-stack, pyramid, cycle, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."
  13. Changed13 schema fields changed
    • addedInput schema / properties / dashboard
      Added value: +{
      +  "description": "Make the tab a Plan Dashboard instead of a canvas: rows of the tabs it shows, then metrics, Gantts, other charts and notes, each drawn live from the cards; up to 12 rows. Give it in place of graph, mermaid, elements or template.",
      +  "properties": {
      +    "charts": {
      +      "description": "Charts, two to a row; a Gantt takes a row of its own.",
      +      "items": {
      +        "properties": {
      +          "groupBy": {
      +            "description": "workload only: assignee (default), type, priority, status, or a field by name.",
      +            "type": "string"
      +          },
      +          "types": {
      +            "description": "Only these card types, by name.",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "view": {
      +            "description": "gantt, calendar (by due date), start-calendar, workload (cards by a field), priority-matrix (priority by status), search.",
      +            "enum": [
      +              "gantt",
      +              "calendar",
      +              "start-calendar",
      +              "workload",
      +              "priority-matrix",
      +              "search"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "view"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "metrics": {
      +      "description": "Metric tiles, four to a row: count (cards), progress (percent done), people, types, priorities, due (overdue and due soon), unassigned, points (estimates), top-voted, stale.",
      +      "items": {
      +        "enum": [
      +          "count",
      +          "progress",
      +          "people",
      +          "types",
      +          "priorities",
      +          "due",
      +          "unassigned",
      +          "points",
      +          "top-voted",
      +          "stale"
      +        ],
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "notes": {
      +      "description": "Notes, three to a row.",
      +      "items": {
      +        "properties": {
      +          "text": {
      +            "description": "Its text; a line each.",
      +            "type": "string"
      +          },
      +          "title": {
      +            "description": "The note’s heading.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "title",
      +          "text"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "tabs": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "const": "every",
      +          "type": "string"
      +        }
      +      ],
      +      "description": "The Board and Sheet tabs it shows, by name (in create_document, other tabs of the same call), or \"every\"; two to a row."
      +    }
      +  },
      +  "type": "object"
      +}
    • changedInput schema / properties / elements / description
      Previous value: -"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title."New value: +"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\". A field a type does not have, or a value off its list, is refused naming what it takes. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title."
    • addedInput schema / properties / graph / properties / edges / items / properties / line
      Added value: +{
      +  "description": "The stroke: solid (default), dashed (an event, a reply, an optional path) or thick.",
      +  "enum": [
      +    "solid",
      +    "dashed",
      +    "thick"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / graph / properties / key
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "additionalProperties": {
      +        "maxLength": 40,
      +        "type": "string"
      +      },
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    }
      +  ],
      +  "description": "A key beside the diagram: one miniature per shape kind it uses with what that shape means. true names them by default (a flowchart’s Start or end, Step, Decision...; else Component, Data store, Hub or bus, External system...); an object names them yourself by shape ({\"hexagon\": \"Event bus\", \"cylinder\": \"Database\"}), the rest by default."
      +}
    • changedInput schema / properties / graph / properties / lines / description
      Previous value: -"Arrow routing. Default: straight for flow, angled for tree, curved for mindmap."New value: +"Arrow routing. Default: angled (elbows) for flow, tree and lanes; curved for mindmap and cycle."
    • addedInput schema / properties / graph / properties / nodes / items / properties / esKind
      Added value: +{
      +  "description": "style \"storm\" only: the workshop note this node is (default domain-event). Its label is the note’s text, kept whole.",
      +  "enum": [
      +    "domain-event",
      +    "command",
      +    "actor",
      +    "policy",
      +    "read-model",
      +    "external-system",
      +    "aggregate",
      +    "hotspot"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / graph / properties / nodes / items / properties / icon
      Added value: +{
      +  "description": "An icon on the box: an id from search_icons (\"database\", \"aws-lambda\").",
      +  "type": "string"
      +}
    • addedInput schema / properties / graph / properties / nodes / items / properties / tone
      Added value: +{
      +  "description": "How the box stands out: strong (filled in the accent), soft (tinted), muted (outlined and dashed: an exception or an optional step) or plain. Unset in a flowchart, a stadium the flow starts from is strong, one it ends on soft, and a diamond soft.",
      +  "enum": [
      +    "strong",
      +    "soft",
      +    "muted",
      +    "plain"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / graph / properties / style / description
      Previous value: -"Layout: \"flow\" (layered, the default; the layout for processes and systems), \"tree\" (a tidy hierarchy, the layout for org charts), \"mindmap\" (radial around the first node). With groups the layout is flow."New value: +"Layout: \"flow\" (layered, the default; the layout for processes and systems: a decision’s side exit sits level beside it and a loop back runs round the outside), \"tree\" (a tidy hierarchy, the layout for org charts), \"mindmap\" (radial around the first node), \"lanes\" (a swimlane diagram: each group a lane, the flow left to right across them) or \"cycle\" (a ring in node order, clockwise from the top; a node with no edge sits at its centre) or \"storm\" (an event-storming board: each node a workshop note of its esKind, one column per domain event in the order the edges imply, each kind on its own lane, no arrows; a new tab becomes an event-storming board) or \"sequence\" (a sequence diagram: the nodes the participants, a node shaped actor a stick figure; the edges the messages in order, a dashed edge a reply; Mermaid sequenceDiagram text says more: activations, notes, alt/loop fragments). With groups the layout is flow unless it is lanes."
    • changedInput schema / properties / graph / properties / style / enum
      Previous value: -[
      -  "flow",
      -  "tree",
      -  "mindmap"
      -]New value: +[
      +  "flow",
      +  "tree",
      +  "mindmap",
      +  "lanes",
      +  "cycle",
      +  "storm",
      +  "sequence"
      +]
    • addedInput schema / properties / graph / properties / subtitle
      Added value: +{
      +  "description": "A muted caption under the title: what the diagram shows and how to read it.",
      +  "maxLength": 300,
      +  "type": "string"
      +}
    • addedInput schema / properties / graph / properties / title
      Added value: +{
      +  "description": "A heading above the diagram, left aligned, as every template has.",
      +  "maxLength": 120,
      +  "type": "string"
      +}
    • changedInput schema / properties / mermaid / description
      Previous value: -"The diagram as Mermaid text: a flowchart (graph / flowchart, with subgraphs), a state diagram (stateDiagram) or an ER diagram (erDiagram). Parsed into the same graph as the \"graph\" input: subgraphs become groups, the direction is kept, and the same label limit applies. Provide one of graph, mermaid, elements or template."New value: +"The diagram as Mermaid text: a flowchart (graph / flowchart, with subgraphs), a state diagram (stateDiagram), an ER diagram (erDiagram) or a sequence diagram (sequenceDiagram: participant / actor, ->> calls, -) async, -->> replies, +/- activations, Note over, alt/else, loop, opt, par, autonumber, title). Parsed into the same graph as the \"graph\" input: subgraphs become groups, the direction is kept, and the same label limit applies; a sequence diagram is drawn with lifelines, activation bars, notes and fragments. Front matter (---, title: Text, ---) titles any of them. Provide one of graph, mermaid, elements or template."
  14. Changed4 schema fields changed
    • changedInput schema / properties / elements / description
      Previous value: -"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty."New value: +"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title."
    • addedInput schema / properties / finish
      Added value: +{
      +  "description": "How the tab is drawn (docs/specs/008-canvas/finish.md): \"flexible\" (the default), \"professional\" (crisp corners, thin lines, no shadows) or \"sketch\" (hand-drawn lines, hatched fills, a handwriting font). An element can carry its own \"finish\" too.",
      +  "enum": [
      +    "flexible",
      +    "professional",
      +    "sketch"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / graph / properties / nodes / items / properties / shape / description
      Previous value: -"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."New value: +"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."
    • changedInput schema / properties / theme / description
      Previous value: -"Preset theme id that paints the whole diagram + canvas. One of: brand, slate, forest, sunset, lavender, mono, ocean, sky, midnight, cream, rose, sand, olive, indigo, pine, steel, mocha, plum, abyss, espresso, rainbow, pastel, tropical, autumn, jewel, uml. Omit per-element colours and let the theme own them. Defaults to \"brand\"."New value: +"Preset theme id that paints the whole diagram + canvas. One of: brand, slate, forest, sunset, lavender, mono, ocean, sky, midnight, cream, rose, sand, olive, indigo, pine, steel, mocha, plum, abyss, espresso, rainbow, pastel, tropical, uml. Omit per-element colours and let the theme own them. Defaults to \"brand\"."
  15. Changed1 schema field changed
    • changedInput schema / properties / elements / description
      Previous value: -"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty."New value: +"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty."
  16. Changed4 schema fields changed
    • changedInput schema / properties / graph / properties / edges / description
      Previous value: -"Directed connections between ids. An edge to an unknown id is dropped."New value: +"Directed connections between ids, at most 1000. An edge to an unknown id is dropped."
    • addedInput schema / properties / graph / properties / edges / maxItems
      Added value: +1000
    • changedInput schema / properties / graph / properties / nodes / description
      Previous value: -"The nodes (boxes). Each needs a unique id."New value: +"The nodes (boxes), at most 500. Each needs a unique id. A larger diagram is better split into several."
    • addedInput schema / properties / graph / properties / nodes / maxItems
      Added value: +500
  17. Changed2 schema fields changed
    • changedInput schema / properties / elements / description
      Previous value: -"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker, plan-board, plan-card, plan-view. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty."New value: +"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty."
    • changedInput schema / properties / graph / properties / nodes / items / properties / shape / description
      Previous value: -"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker, plan-board, plan-card, plan-view); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."New value: +"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."
  18. Changed1 schema field changed
    • addedOutput schema / properties / note
      Added value: +{
      +  "description": "Said when a template has more tabs than add_tab adds.",
      +  "type": "string"
      +}
  19. Changed2 schema fields changed
    • changedInput schema / properties / elements / description
      Previous value: -"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty."New value: +"An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker, plan-board, plan-card, plan-view. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty."
    • changedInput schema / properties / graph / properties / nodes / items / properties / shape / description
      Previous value: -"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."New value: +"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker, plan-board, plan-card, plan-view); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."
  20. Changed2 schema fields changed
    • changedOutput schema / properties / lint / description
      Previous value: -"The diagram lint report; null while the lint is unavailable."New value: +"The diagram lint summary line of the tab as written."
    • changedOutput schema / properties / lint / type
      Previous value: -"null"New value: +"string"
  21. Changed5 schema fields changed
    • addedOutput schema / properties / changesetId
      Added value: +{
      +  "description": "The changeset written; null when nothing changed.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / lint
      Added value: +{
      +  "description": "The diagram lint report; null while the lint is unavailable.",
      +  "type": "null"
      +}
    • addedOutput schema / properties / rev
      Added value: +{
      +  "description": "The tab revision now, to pass as rev on the next update_document.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / text
      Added value: +{
      +  "description": "What the changeset did, one line per element, and how to revert it.",
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "documentId",
      -  "tabId",
      -  "name",
      -  "url"
      -]New value: +[
      +  "documentId",
      +  "tabId",
      +  "name",
      +  "url",
      +  "changesetId",
      +  "rev",
      +  "text",
      +  "lint"
      +]
  22. Changed8 schema fields changed
    • removedInput schema / properties / diagramId
      Removed value: -{
      -  "description": "The diagram to add a tab to (from find_diagrams / read_diagram).",
      -  "type": "string"
      -}
    • addedInput schema / properties / documentId
      Added value: +{
      +  "description": "The document to add a tab to (from find_documents / read_document).",
      +  "type": "string"
      +}
    • changedInput schema / properties / template / description
      Previous value: -"Start from a hand-tuned template scaffold instead of providing elements: a template kind from list_templates (e.g. \"kanban\", \"flowchart\", \"gantt\"). The server materialises its curated layout (\"layout\" is ignored for a template tab) and paints it with the chosen theme. Personalise the placeholder labels afterwards with update_diagram mode \"ops\". Provide template OR elements, not both."New value: +"Start from a hand-tuned template scaffold instead of providing elements: a template kind from list_templates (e.g. \"kanban\", \"flowchart\", \"gantt\"). The server materialises its curated layout (\"layout\" is ignored for a template tab) and paints it with the chosen theme. Personalise the placeholder labels afterwards with update_document mode \"ops\". Provide template OR elements, not both."
    • changedInput schema / required
      Previous value: -[
      -  "diagramId",
      -  "name"
      -]New value: +[
      +  "documentId",
      +  "name"
      +]
    • removedOutput schema / properties / diagramId
      Removed value: -{
      -  "description": "The diagram id.",
      -  "type": "string"
      -}
    • addedOutput schema / properties / documentId
      Added value: +{
      +  "description": "The document id.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / url / description
      Previous value: -"Link that opens the diagram in the livediagram editor."New value: +"Link that opens the document in the livediagram editor."
    • changedOutput schema / required
      Previous value: -[
      -  "diagramId",
      -  "tabId",
      -  "name",
      -  "url"
      -]New value: +[
      +  "documentId",
      +  "tabId",
      +  "name",
      +  "url"
      +]
  23. First observed

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (readOnly false, destructive false, openWorld false), so the description adds real value by disclosing the server pipeline ("validates, lays out per the layout arg, appends the tab, and returns an inline PNG"). It still omits failure modes (e.g. what happens on invalid elements or a missing documentId), so it stops short of full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and its scope, followed by the input choice, server behavior, output, and the read-first tip. Every clause carries information; no filler or restatement of the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter, deeply nested tool this is a thin wrapper, but the input schema is exhaustively documented at 100% coverage and an output schema exists, so the description needn't re-explain parameters or return values. The prerequisite and append/return behavior round it out adequately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across 10 parameters, so the schema already carries the semantics and a baseline of 3 applies. The description references the template/elements and layout inputs but adds no syntax, defaults, or constraints beyond what the schema already documents in depth.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Add a NEW tab (its own canvas) to an existing document") and distinguishes itself from create_document by scoping to an existing document. The example ("a detail view zooming into one part of an architecture") and the tab-vs-document framing let an agent separate it from siblings like add_board/add_sheet.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear prerequisite ("Run read_document first to see the document and its existing tabs") and an explicit either/or on inputs (pass "template" instead of elements). However, it never names the adjacent alternatives (add_board, add_sheet, add_form) nor when a caller should prefer them, so a sibling-selection gap remains.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources