Examples: deployment-editorial-platform
Examples: deployment-editorial-platform
Copy and paste, or save a file and hand it over. For a machine with no network, one “Everything” file is enough.
Everything in this panel, including the contents behind each URL, in one Markdown file — Large, so it goes as a file (copy is for 32 KB and under)
I need a "Deployment / Network" diagram. It is published as text and vectors, so taking the published one and editing it beats redrawing it. ## What this diagram says Shows which cloud, region, network and subnet each running thing sits in. ## When it fits - Making the public/private split and the entry points from outside explicit. - Settling protocols and ports on the drawing. ## When it does not - Listing one vendor's product names: this profile is deliberately vendor-neutral. - When the logical split of responsibility is the subject — use C4 Container. ## What this kind validates - Validates the provider, region, network and subnet hierarchy, public classification, placement, reachability from an entry point, protocols and ports, and boundary crossings. ## What it does not - Does not check agreement with the real infrastructure. The diagram is not Terraform. ## What you can take - https://design-vault.pages.dev/designs/diagram-deployment/samples/deployment-editorial-platform/deployment.drawio - https://design-vault.pages.dev/designs/diagram-deployment/samples/deployment-editorial-platform/deployment.png - https://design-vault.pages.dev/designs/diagram-deployment/samples/deployment-editorial-platform/deployment.svg - https://design-vault.pages.dev/designs/diagram-deployment/samples/deployment-editorial-platform/diagram-spec.json - https://design-vault.pages.dev/designs/diagram-deployment/samples/deployment-editorial-platform/layout.json - https://design-vault.pages.dev/ai/assets/diagram-deployment.json ## What you can edit The published `.drawio` is uncompressed XML. Open it in draw.io and edit it, or diff it as text. Operations this kind accepts through the engine: alignNodes, distributeNodes, moveBoundary, moveNode, resizeBoundary, resizeNode This kind accepts only geometry operations — it has none that change meaning. ## Writing a new one A `diagram-spec.json` can be written against the schema below. - https://design-vault.pages.dev/schemas/diagram-spec.schema.json - https://design-vault.pages.dev/schemas/layout.schema.json ## What cannot be done here **A spec you write cannot be validated here, and `layout.json` cannot be computed here.** The generator that does both is not published; what is published is the artifacts, the inputs and the schemas. Place the geometry yourself, or hand the spec to someone who has the engine. ## Licence The diagram and its inputs are CC BY 4.0 — carry the credit when you use them. > "Deployment / Network" by zawa, licensed under CC BY 4.0. https://creativecommons.org/licenses/by/4.0/ The schemas are MIT.
/designs/diagram-deployment/samples/deployment-editorial-platform/deployment.drawio
<?xml version="1.0" encoding="UTF-8"?> <mxfile host="app.diagrams.net" compressed="false"> <diagram id="deployment-editorial-platform" name="Deployment" syncFormat="1.0" diagramKind="deployment" inputHash="c8d2358753551318ac69843df1c053e696d199d62a96d0cac26dcf5b811cffb5" generatorVersion="0.5.0"> <mxGraphModel dx="1200" dy="820" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1920" pageHeight="1080" math="0" shadow="0"> <root> <mxCell id="0"/> <mxCell id="1" parent="0"/> <mxCell id="diagram-title" value="Editorial Platform Deployment · production" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=23;fontStyle=1;fontColor=#292E35;spacing=0;align=left;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="32" y="22" width="720" height="42" as="geometry"/></mxCell> <mxCell id="legend-0-mark" value="" style="ellipse;html=1;aspect=fixed;fillColor=#FFFFFF;strokeColor=#69717D;strokeWidth=1.6;" vertex="1" parent="1"><mxGeometry x="32" y="85" width="10" height="10" as="geometry"/></mxCell> <mxCell id="legend-0-text" value="Public" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=13;fontStyle=0;fontColor=#292E35;spacing=0;align=left;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="49" y="77" width="170" height="28" as="geometry"/></mxCell> <mxCell id="legend-1-mark" value="" style="ellipse;html=1;aspect=fixed;fillColor=#FFFFFF;strokeColor=#59697D;strokeWidth=1.6;" vertex="1" parent="1"><mxGeometry x="254" y="85" width="10" height="10" as="geometry"/></mxCell> <mxCell id="legend-1-text" value="Private" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=13;fontStyle=0;fontColor=#292E35;spacing=0;align=left;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="271" y="77" width="170" height="28" as="geometry"/></mxCell> <mxCell id="legend-2-mark" value="" style="ellipse;html=1;aspect=fixed;fillColor=#FFFFFF;strokeColor=#B44343;strokeWidth=1.6;" vertex="1" parent="1"><mxGeometry x="476" y="85" width="10" height="10" as="geometry"/></mxCell> <mxCell id="legend-2-text" value="Restricted" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=13;fontStyle=0;fontColor=#292E35;spacing=0;align=left;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="493" y="77" width="170" height="28" as="geometry"/></mxCell> <mxCell id="legend-3-mark" value="" style="ellipse;html=1;aspect=fixed;fillColor=#FFFFFF;strokeColor=#C58A21;strokeWidth=1.6;" vertex="1" parent="1"><mxGeometry x="698" y="85" width="10" height="10" as="geometry"/></mxCell> <mxCell id="legend-3-text" value="Network hierarchy" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=13;fontStyle=0;fontColor=#292E35;spacing=0;align=left;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="715" y="77" width="170" height="28" as="geometry"/></mxCell> <object id="managed-cloud" label="" componentId="managed-cloud" deploymentType="boundary" deploymentBoundaryType="cloud-provider" variant="warning"><mxCell style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#C58A21;strokeWidth=1.4;dashed=1;dashPattern=8 5;connectable=0;" vertex="1" parent="1"><mxGeometry x="270" y="130" width="1600" height="900" as="geometry"/></mxCell></object> <mxCell id="managed-cloud--title" value="MANAGED CLOUD [cloud provider]" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=12;fontStyle=1;fontColor=#C58A21;spacing=0;align=left;verticalAlign=middle;labelBackgroundColor=#FFFFFF;" vertex="1" parent="managed-cloud" syncRole="boundary-title" ownerId="managed-cloud"><mxGeometry x="9" y="4" width="229.48" height="22" as="geometry"/></mxCell> <object id="primary-region" label="" componentId="primary-region" deploymentType="boundary" deploymentBoundaryType="region" variant="delegated" parentId="managed-cloud"><mxCell style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#59697D;strokeWidth=1.4;dashed=1;dashPattern=8 5;connectable=0;" vertex="1" parent="1"><mxGeometry x="310" y="180" width="1520" height="810" as="geometry"/></mxCell></object> <mxCell id="primary-region--title" value="PRIMARY REGION [region]" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=12;fontStyle=1;fontColor=#59697D;spacing=0;align=left;verticalAlign=middle;labelBackgroundColor=#FFFFFF;" vertex="1" parent="primary-region" syncRole="boundary-title" ownerId="primary-region"><mxGeometry x="9" y="4" width="180.64" height="22" as="geometry"/></mxCell> <object id="workload-network" label="" componentId="workload-network" deploymentType="boundary" deploymentBoundaryType="network" variant="external" parentId="primary-region" exposure="public"><mxCell style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#69717D;strokeWidth=1.4;dashed=1;dashPattern=7 5;connectable=0;" vertex="1" parent="1"><mxGeometry x="350" y="230" width="1440" height="720" as="geometry"/></mxCell></object> <mxCell id="workload-network--title" value="EDITORIAL WORKLOAD NETWORK [network · public]" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=12;fontStyle=1;fontColor=#69717D;spacing=0;align=left;verticalAlign=middle;labelBackgroundColor=#FFFFFF;" vertex="1" parent="workload-network" syncRole="boundary-title" ownerId="workload-network"><mxGeometry x="9" y="4" width="334.6" height="22" as="geometry"/></mxCell> <object id="public-subnet" label="" componentId="public-subnet" deploymentType="boundary" deploymentBoundaryType="subnet" variant="external" parentId="workload-network" exposure="public"><mxCell style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#69717D;strokeWidth=1.4;dashed=1;dashPattern=7 5;connectable=0;" vertex="1" parent="1"><mxGeometry x="390" y="300" width="370" height="580" as="geometry"/></mxCell></object> <mxCell id="public-subnet--title" value="PUBLIC EDGE [subnet · public]" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=12;fontStyle=1;fontColor=#69717D;spacing=0;align=left;verticalAlign=middle;labelBackgroundColor=#FFFFFF;" vertex="1" parent="public-subnet" syncRole="boundary-title" ownerId="public-subnet"><mxGeometry x="9" y="4" width="218.8" height="22" as="geometry"/></mxCell> <object id="private-subnet" label="" componentId="private-subnet" deploymentType="boundary" deploymentBoundaryType="subnet" variant="delegated" parentId="workload-network" exposure="private"><mxCell style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#59697D;strokeWidth=1.4;dashed=1;dashPattern=8 5;connectable=0;" vertex="1" parent="1"><mxGeometry x="810" y="300" width="500" height="580" as="geometry"/></mxCell></object> <mxCell id="private-subnet--title" value="PRIVATE APPLICATION [subnet · private]" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=12;fontStyle=1;fontColor=#59697D;spacing=0;align=left;verticalAlign=middle;labelBackgroundColor=#FFFFFF;" vertex="1" parent="private-subnet" syncRole="boundary-title" ownerId="private-subnet"><mxGeometry x="9" y="4" width="285.76" height="22" as="geometry"/></mxCell> <object id="restricted-subnet" label="" componentId="restricted-subnet" deploymentType="boundary" deploymentBoundaryType="subnet" variant="critical" parentId="workload-network" exposure="restricted"><mxCell style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#B44343;strokeWidth=1.4;dashed=1;dashPattern=8 5;connectable=0;" vertex="1" parent="1"><mxGeometry x="1360" y="300" width="380" height="580" as="geometry"/></mxCell></object> <mxCell id="restricted-subnet--title" value="RESTRICTED DATA [subnet · restricted]" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=12;fontStyle=1;fontColor=#B44343;spacing=0;align=left;verticalAlign=middle;labelBackgroundColor=#FFFFFF;" vertex="1" parent="restricted-subnet" syncRole="boundary-title" ownerId="restricted-subnet"><mxGeometry x="9" y="4" width="278.32" height="22" as="geometry"/></mxCell> <object id="client-to-gateway" label="" componentId="client-to-gateway" deploymentType="edge" communicationType="communication" variant="external" direction="forward" protocol="HTTPS" port="443" boundaryIds="managed-cloud,primary-region,workload-network,public-subnet"><mxCell style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#69717D;strokeWidth=1.6;endArrow=open;endFill=0;endSize=8;startArrow=none;dashed=1;dashPattern=7 5;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=1;" edge="1" parent="1" source="public-client" target="edge-gateway"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell></object> <mxCell id="client-to-gateway--label" value="Submits a publishing request<br>[HTTPS:443]" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=12;fontStyle=1;fontColor=#292E35;spacing=0;labelBackgroundColor=#FFFFFF;" vertex="1" parent="1" syncRole="edge-label" ownerId="client-to-gateway"><mxGeometry x="228.7" y="403" width="212.6" height="34" as="geometry"/></mxCell> <object id="gateway-to-balancer" label="" componentId="gateway-to-balancer" deploymentType="edge" communicationType="communication" variant="external" direction="forward" protocol="HTTPS" port="443"><mxCell style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#69717D;strokeWidth=1.6;endArrow=open;endFill=0;endSize=8;startArrow=none;dashed=1;dashPattern=7 5;exitX=0.5;exitY=1;exitDx=0;exitDy=0;exitPerimeter=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;entryPerimeter=1;" edge="1" parent="1" source="edge-gateway" target="public-balancer"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell></object> <mxCell id="gateway-to-balancer--label" value="Forwards an accepted request<br>[HTTPS:443]" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=12;fontStyle=1;fontColor=#292E35;spacing=0;labelBackgroundColor=#FFFFFF;" vertex="1" parent="1" syncRole="edge-label" ownerId="gateway-to-balancer"><mxGeometry x="423.7" y="573" width="212.6" height="34" as="geometry"/></mxCell> <object id="balancer-to-firewall" label="" componentId="balancer-to-firewall" deploymentType="edge" communicationType="communication" variant="delegated" direction="forward" protocol="HTTPS" port="443" boundaryIds="public-subnet,private-subnet"><mxCell style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#59697D;strokeWidth=1.6;endArrow=open;endFill=0;endSize=8;startArrow=none;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=1;" edge="1" parent="1" source="public-balancer" target="ingress-firewall"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="785" y="725"/><mxPoint x="785" y="455"/></Array></mxGeometry></mxCell></object> <mxCell id="balancer-to-firewall--label" value="Routes traffic for inspection<br>[HTTPS:443]" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=12;fontStyle=1;fontColor=#292E35;spacing=0;labelBackgroundColor=#FFFFFF;" vertex="1" parent="1" syncRole="edge-label" ownerId="balancer-to-firewall"><mxGeometry x="674.98" y="818" width="220.04" height="34" as="geometry"/></mxCell> <object id="firewall-to-host" label="" componentId="firewall-to-host" deploymentType="edge" communicationType="communication" variant="delegated" direction="forward" protocol="HTTPS" port="8443"><mxCell style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#59697D;strokeWidth=1.6;endArrow=open;endFill=0;endSize=8;startArrow=none;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=1;" edge="1" parent="1" source="ingress-firewall" target="application-host"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell></object> <mxCell id="firewall-to-host--label" value="Forwards inspected traffic<br>[HTTPS:8443]" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=12;fontStyle=1;fontColor=#292E35;spacing=0;labelBackgroundColor=#FFFFFF;" vertex="1" parent="1" syncRole="edge-label" ownerId="firewall-to-host"><mxGeometry x="964.52" y="318" width="200.96" height="34" as="geometry"/></mxCell> <object id="host-to-service" label="" componentId="host-to-service" deploymentType="edge" communicationType="communication" variant="delegated" direction="forward" protocol="HTTP" port="8080"><mxCell style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#59697D;strokeWidth=1.6;endArrow=open;endFill=0;endSize=8;startArrow=none;exitX=0.5;exitY=1;exitDx=0;exitDy=0;exitPerimeter=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;entryPerimeter=1;" edge="1" parent="1" source="application-host" target="editorial-service"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell></object> <mxCell id="host-to-service--label" value="Invokes the editorial runtime<br>[HTTP:8080]" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=12;fontStyle=1;fontColor=#292E35;spacing=0;labelBackgroundColor=#FFFFFF;" vertex="1" parent="1" syncRole="edge-label" ownerId="host-to-service"><mxGeometry x="1169.98" y="573" width="220.04" height="34" as="geometry"/></mxCell> <object id="service-to-database" label="" componentId="service-to-database" deploymentType="edge" communicationType="communication" variant="critical" direction="forward" protocol="TLS" port="5432" boundaryIds="private-subnet,restricted-subnet"><mxCell style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#B44343;strokeWidth=1.6;endArrow=open;endFill=0;endSize=8;startArrow=none;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=1;" edge="1" parent="1" source="editorial-service" target="diagram-database"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell></object> <mxCell id="service-to-database--label" value="Reads and writes managed sources<br>[TLS:5432]" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=12;fontStyle=1;fontColor=#292E35;spacing=0;labelBackgroundColor=#FFFFFF;" vertex="1" parent="1" syncRole="edge-label" ownerId="service-to-database"><mxGeometry x="1240.44" y="903" width="239.12" height="34" as="geometry"/></mxCell> <object id="public-client" label="" componentId="public-client" deploymentType="external-system" variant="external" technology="HTTPS client" exposure="public"><mxCell style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#69717D;strokeWidth=1.6;dashed=1;dashPattern=7 5;" vertex="1" parent="1"><mxGeometry x="30" y="380" width="200" height="150" as="geometry"/></mxCell></object> <mxCell id="public-client--stereotype" value="[External System · public: HTTPS client]" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=10;fontStyle=1;fontColor=#58616C;spacing=0;align=center;verticalAlign=middle;" vertex="1" parent="public-client" syncRole="stereotype" ownerId="public-client"><mxGeometry x="10" y="9" width="180" height="18" as="geometry"/></mxCell> <mxCell id="public-client--title" value="Publishing Client" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=15;fontStyle=1;fontColor=#292E35;spacing=0;align=center;verticalAlign=middle;" vertex="1" parent="public-client" syncRole="title" ownerId="public-client"><mxGeometry x="10" y="31" width="180" height="28" as="geometry"/></mxCell> <mxCell id="public-client--description" value="Starts an authenticated editorial publishing request." style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=12;fontStyle=0;fontColor=#58616C;spacing=0;align=center;verticalAlign=top;" vertex="1" parent="public-client" syncRole="description" ownerId="public-client"><mxGeometry x="14" y="65" width="172" height="75" as="geometry"/></mxCell> <object id="edge-gateway" label="" componentId="edge-gateway" deploymentType="gateway" variant="external" technology="API gateway" exposure="public" boundaryId="public-subnet"><mxCell style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#69717D;strokeWidth=1.6;dashed=1;dashPattern=7 5;" vertex="1" parent="1"><mxGeometry x="450" y="380" width="240" height="150" as="geometry"/></mxCell></object> <mxCell id="edge-gateway--stereotype" value="[Gateway · public: API gateway]" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=10;fontStyle=1;fontColor=#58616C;spacing=0;align=center;verticalAlign=middle;" vertex="1" parent="edge-gateway" syncRole="stereotype" ownerId="edge-gateway"><mxGeometry x="10" y="9" width="220" height="18" as="geometry"/></mxCell> <mxCell id="edge-gateway--title" value="Edge Gateway" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=15;fontStyle=1;fontColor=#292E35;spacing=0;align=center;verticalAlign=middle;" vertex="1" parent="edge-gateway" syncRole="title" ownerId="edge-gateway"><mxGeometry x="10" y="31" width="220" height="28" as="geometry"/></mxCell> <mxCell id="edge-gateway--description" value="Terminates public ingress and applies request policy." style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=12;fontStyle=0;fontColor=#58616C;spacing=0;align=center;verticalAlign=top;" vertex="1" parent="edge-gateway" syncRole="description" ownerId="edge-gateway"><mxGeometry x="14" y="65" width="212" height="75" as="geometry"/></mxCell> <object id="public-balancer" label="" componentId="public-balancer" deploymentType="load-balancer" variant="external" technology="L7 balancer" exposure="public" boundaryId="public-subnet"><mxCell style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#69717D;strokeWidth=1.6;dashed=1;dashPattern=7 5;" vertex="1" parent="1"><mxGeometry x="450" y="650" width="240" height="150" as="geometry"/></mxCell></object> <mxCell id="public-balancer--stereotype" value="[Load Balancer · public: L7 balancer]" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=10;fontStyle=1;fontColor=#58616C;spacing=0;align=center;verticalAlign=middle;" vertex="1" parent="public-balancer" syncRole="stereotype" ownerId="public-balancer"><mxGeometry x="10" y="9" width="220" height="18" as="geometry"/></mxCell> <mxCell id="public-balancer--title" value="Public Load Balancer" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=15;fontStyle=1;fontColor=#292E35;spacing=0;align=center;verticalAlign=middle;" vertex="1" parent="public-balancer" syncRole="title" ownerId="public-balancer"><mxGeometry x="10" y="31" width="220" height="28" as="geometry"/></mxCell> <mxCell id="public-balancer--description" value="Distributes accepted requests to the inspection tier." style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=12;fontStyle=0;fontColor=#58616C;spacing=0;align=center;verticalAlign=top;" vertex="1" parent="public-balancer" syncRole="description" ownerId="public-balancer"><mxGeometry x="14" y="65" width="212" height="75" as="geometry"/></mxCell> <object id="ingress-firewall" label="" componentId="ingress-firewall" deploymentType="firewall" variant="delegated" technology="WAF" exposure="private" boundaryId="private-subnet"><mxCell style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#EDF3FF;strokeColor=#59697D;strokeWidth=1.6;" vertex="1" parent="1"><mxGeometry x="850" y="380" width="200" height="150" as="geometry"/></mxCell></object> <mxCell id="ingress-firewall--stereotype" value="[Firewall · private: WAF]" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=10;fontStyle=1;fontColor=#58616C;spacing=0;align=center;verticalAlign=middle;" vertex="1" parent="ingress-firewall" syncRole="stereotype" ownerId="ingress-firewall"><mxGeometry x="10" y="9" width="180" height="18" as="geometry"/></mxCell> <mxCell id="ingress-firewall--title" value="Ingress Firewall" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=15;fontStyle=1;fontColor=#292E35;spacing=0;align=center;verticalAlign=middle;" vertex="1" parent="ingress-firewall" syncRole="title" ownerId="ingress-firewall"><mxGeometry x="10" y="31" width="180" height="28" as="geometry"/></mxCell> <mxCell id="ingress-firewall--description" value="Inspects traffic entering the private application tier." style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=12;fontStyle=0;fontColor=#58616C;spacing=0;align=center;verticalAlign=top;" vertex="1" parent="ingress-firewall" syncRole="description" ownerId="ingress-firewall"><mxGeometry x="14" y="65" width="172" height="75" as="geometry"/></mxCell> <object id="application-host" label="" componentId="application-host" deploymentType="host" variant="delegated" technology="Linux host" exposure="private" boundaryId="private-subnet"><mxCell style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#EDF3FF;strokeColor=#59697D;strokeWidth=1.6;" vertex="1" parent="1"><mxGeometry x="1080" y="380" width="190" height="150" as="geometry"/></mxCell></object> <mxCell id="application-host--stereotype" value="[Host · private: Linux host]" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=10;fontStyle=1;fontColor=#58616C;spacing=0;align=center;verticalAlign=middle;" vertex="1" parent="application-host" syncRole="stereotype" ownerId="application-host"><mxGeometry x="10" y="9" width="170" height="18" as="geometry"/></mxCell> <mxCell id="application-host--title" value="Application Host" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=15;fontStyle=1;fontColor=#292E35;spacing=0;align=center;verticalAlign=middle;" vertex="1" parent="application-host" syncRole="title" ownerId="application-host"><mxGeometry x="10" y="31" width="170" height="28" as="geometry"/></mxCell> <mxCell id="application-host--description" value="Provides the managed execution environment." style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=12;fontStyle=0;fontColor=#58616C;spacing=0;align=center;verticalAlign=top;" vertex="1" parent="application-host" syncRole="description" ownerId="application-host"><mxGeometry x="14" y="65" width="162" height="75" as="geometry"/></mxCell> <object id="editorial-service" label="" componentId="editorial-service" deploymentType="service" variant="delegated" technology="Node.js 22" exposure="private" boundaryId="private-subnet"><mxCell style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#EDF3FF;strokeColor=#59697D;strokeWidth=1.6;" vertex="1" parent="1"><mxGeometry x="1060" y="650" width="230" height="150" as="geometry"/></mxCell></object> <mxCell id="editorial-service--stereotype" value="[Service · private: Node.js 22]" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=10;fontStyle=1;fontColor=#58616C;spacing=0;align=center;verticalAlign=middle;" vertex="1" parent="editorial-service" syncRole="stereotype" ownerId="editorial-service"><mxGeometry x="10" y="9" width="210" height="18" as="geometry"/></mxCell> <mxCell id="editorial-service--title" value="Editorial Service" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=15;fontStyle=1;fontColor=#292E35;spacing=0;align=center;verticalAlign=middle;" vertex="1" parent="editorial-service" syncRole="title" ownerId="editorial-service"><mxGeometry x="10" y="31" width="210" height="28" as="geometry"/></mxCell> <mxCell id="editorial-service--description" value="Validates sources and renders deterministic artifacts." style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=12;fontStyle=0;fontColor=#58616C;spacing=0;align=center;verticalAlign=top;" vertex="1" parent="editorial-service" syncRole="description" ownerId="editorial-service"><mxGeometry x="14" y="65" width="202" height="75" as="geometry"/></mxCell> <object id="diagram-database" label="" componentId="diagram-database" deploymentType="database" variant="critical" technology="PostgreSQL 16" exposure="restricted" boundaryId="restricted-subnet"><mxCell style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFF0F0;strokeColor=#B44343;strokeWidth=1.6;" vertex="1" parent="1"><mxGeometry x="1430" y="650" width="240" height="150" as="geometry"/></mxCell></object> <mxCell id="diagram-database--stereotype" value="[Database · restricted: PostgreSQL 16]" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=10;fontStyle=1;fontColor=#58616C;spacing=0;align=center;verticalAlign=middle;" vertex="1" parent="diagram-database" syncRole="stereotype" ownerId="diagram-database"><mxGeometry x="10" y="9" width="220" height="18" as="geometry"/></mxCell> <mxCell id="diagram-database--title" value="Diagram Database" style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=15;fontStyle=1;fontColor=#292E35;spacing=0;align=center;verticalAlign=middle;" vertex="1" parent="diagram-database" syncRole="title" ownerId="diagram-database"><mxGeometry x="10" y="31" width="220" height="28" as="geometry"/></mxCell> <mxCell id="diagram-database--description" value="Stores managed sources, hashes, and review state." style="text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;rounded=0;fontFamily=Meiryo UI;fontSize=12;fontStyle=0;fontColor=#58616C;spacing=0;align=center;verticalAlign=top;" vertex="1" parent="diagram-database" syncRole="description" ownerId="diagram-database"><mxGeometry x="14" y="65" width="212" height="75" as="geometry"/></mxCell> </root> </mxGraphModel> </diagram> </mxfile>
/designs/diagram-deployment/samples/deployment-editorial-platform/diagram-spec.json
{
"$schema": "../../../../schemas/diagram-spec.schema.json",
"schemaVersion": "2.0",
"diagramKind": "deployment",
"id": "deployment-editorial-platform",
"title": "Editorial Platform Deployment",
"description": "Vendor-neutral production topology from public ingress through a private runtime to restricted data.",
"language": "en",
"environment": "production",
"entryNodeIds": [
"public-client"
],
"boundaries": [
{
"id": "managed-cloud",
"type": "cloud-provider",
"title": "MANAGED CLOUD"
},
{
"id": "primary-region",
"type": "region",
"title": "PRIMARY REGION",
"parentId": "managed-cloud"
},
{
"id": "workload-network",
"type": "network",
"title": "EDITORIAL WORKLOAD NETWORK",
"parentId": "primary-region",
"exposure": "public"
},
{
"id": "public-subnet",
"type": "subnet",
"title": "PUBLIC EDGE",
"parentId": "workload-network",
"exposure": "public"
},
{
"id": "private-subnet",
"type": "subnet",
"title": "PRIVATE APPLICATION",
"parentId": "workload-network",
"exposure": "private"
},
{
"id": "restricted-subnet",
"type": "subnet",
"title": "RESTRICTED DATA",
"parentId": "workload-network",
"exposure": "restricted"
}
],
"nodes": [
{
"id": "public-client",
"type": "external-system",
"title": "Publishing Client",
"description": "Starts an authenticated editorial publishing request.",
"technology": "HTTPS client",
"exposure": "public"
},
{
"id": "edge-gateway",
"type": "gateway",
"title": "Edge Gateway",
"description": "Terminates public ingress and applies request policy.",
"technology": "API gateway",
"exposure": "public",
"boundaryId": "public-subnet"
},
{
"id": "public-balancer",
"type": "load-balancer",
"title": "Public Load Balancer",
"description": "Distributes accepted requests to the inspection tier.",
"technology": "L7 balancer",
"exposure": "public",
"boundaryId": "public-subnet"
},
{
"id": "ingress-firewall",
"type": "firewall",
"title": "Ingress Firewall",
"description": "Inspects traffic entering the private application tier.",
"technology": "WAF",
"exposure": "private",
"boundaryId": "private-subnet"
},
{
"id": "application-host",
"type": "host",
"title": "Application Host",
"description": "Provides the managed execution environment.",
"technology": "Linux host",
"exposure": "private",
"boundaryId": "private-subnet"
},
{
"id": "editorial-service",
"type": "service",
"title": "Editorial Service",
"description": "Validates sources and renders deterministic artifacts.",
"technology": "Node.js 22",
"exposure": "private",
"boundaryId": "private-subnet"
},
{
"id": "diagram-database",
"type": "database",
"title": "Diagram Database",
"description": "Stores managed sources, hashes, and review state.",
"technology": "PostgreSQL 16",
"exposure": "restricted",
"boundaryId": "restricted-subnet"
}
],
"edges": [
{
"id": "client-to-gateway",
"from": "public-client",
"to": "edge-gateway",
"type": "communication",
"description": "Submits a publishing request",
"protocol": "HTTPS",
"port": 443,
"boundaryIds": [
"managed-cloud",
"primary-region",
"workload-network",
"public-subnet"
]
},
{
"id": "gateway-to-balancer",
"from": "edge-gateway",
"to": "public-balancer",
"type": "communication",
"description": "Forwards an accepted request",
"protocol": "HTTPS",
"port": 443
},
{
"id": "balancer-to-firewall",
"from": "public-balancer",
"to": "ingress-firewall",
"type": "communication",
"description": "Routes traffic for inspection",
"protocol": "HTTPS",
"port": 443,
"boundaryIds": [
"public-subnet",
"private-subnet"
]
},
{
"id": "firewall-to-host",
"from": "ingress-firewall",
"to": "application-host",
"type": "communication",
"description": "Forwards inspected traffic",
"protocol": "HTTPS",
"port": 8443
},
{
"id": "host-to-service",
"from": "application-host",
"to": "editorial-service",
"type": "communication",
"description": "Invokes the editorial runtime",
"protocol": "HTTP",
"port": 8080
},
{
"id": "service-to-database",
"from": "editorial-service",
"to": "diagram-database",
"type": "communication",
"description": "Reads and writes managed sources",
"protocol": "TLS",
"port": 5432,
"boundaryIds": [
"private-subnet",
"restricted-subnet"
]
}
]
}
/designs/diagram-deployment/samples/deployment-editorial-platform/layout.json
{
"$schema": "../../../../schemas/layout.schema.json",
"schemaVersion": "1.0",
"canvas": {
"width": 1920,
"height": 1080
},
"boundaries": {
"managed-cloud": {
"x": 270,
"y": 130,
"width": 1600,
"height": 900
},
"primary-region": {
"x": 310,
"y": 180,
"width": 1520,
"height": 810
},
"workload-network": {
"x": 350,
"y": 230,
"width": 1440,
"height": 720
},
"public-subnet": {
"x": 390,
"y": 300,
"width": 370,
"height": 580
},
"private-subnet": {
"x": 810,
"y": 300,
"width": 500,
"height": 580
},
"restricted-subnet": {
"x": 1360,
"y": 300,
"width": 380,
"height": 580
}
},
"nodes": {
"public-client": {
"x": 30,
"y": 380,
"width": 200,
"height": 150
},
"edge-gateway": {
"x": 450,
"y": 380,
"width": 240,
"height": 150
},
"public-balancer": {
"x": 450,
"y": 650,
"width": 240,
"height": 150
},
"ingress-firewall": {
"x": 850,
"y": 380,
"width": 200,
"height": 150
},
"application-host": {
"x": 1080,
"y": 380,
"width": 190,
"height": 150
},
"editorial-service": {
"x": 1060,
"y": 650,
"width": 230,
"height": 150
},
"diagram-database": {
"x": 1430,
"y": 650,
"width": 240,
"height": 150
}
},
"edges": {
"client-to-gateway": {
"source": {
"side": "right",
"offset": 0.5
},
"target": {
"side": "left",
"offset": 0.5
},
"label": {
"x": 335,
"y": 420
}
},
"gateway-to-balancer": {
"source": {
"side": "bottom",
"offset": 0.5
},
"target": {
"side": "top",
"offset": 0.5
},
"label": {
"x": 530,
"y": 590
}
},
"balancer-to-firewall": {
"source": {
"side": "right",
"offset": 0.5
},
"target": {
"side": "left",
"offset": 0.5
},
"waypoints": [
{
"x": 785,
"y": 725
},
{
"x": 785,
"y": 455
}
],
"label": {
"x": 785,
"y": 835
}
},
"firewall-to-host": {
"source": {
"side": "right",
"offset": 0.5
},
"target": {
"side": "left",
"offset": 0.5
},
"label": {
"x": 1065,
"y": 335
}
},
"host-to-service": {
"source": {
"side": "bottom",
"offset": 0.5
},
"target": {
"side": "top",
"offset": 0.5
},
"label": {
"x": 1280,
"y": 590
}
},
"service-to-database": {
"source": {
"side": "right",
"offset": 0.5
},
"target": {
"side": "left",
"offset": 0.5
},
"label": {
"x": 1360,
"y": 920
}
}
}
}
/schemas/diagram-spec.schema.json — Large, so it goes as a file (copy is for 32 KB and under)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.local/schemas/diagram-spec.schema.json",
"title": "Editorial diagram semantic specification",
"oneOf": [
{ "$ref": "#/$defs/legacyArchitectureSpec" },
{ "$ref": "#/$defs/architectureSpec" },
{ "$ref": "#/$defs/c4SystemContextSpec" },
{ "$ref": "#/$defs/c4ContainerSpec" },
{ "$ref": "#/$defs/dataFlowSpec" },
{ "$ref": "#/$defs/deploymentSpec" },
{ "$ref": "#/$defs/bpmnLiteSpec" },
{ "$ref": "#/$defs/sequenceSpec" },
{ "$ref": "#/$defs/erSpec" },
{ "$ref": "#/$defs/stateSpec" },
{ "$ref": "#/$defs/decisionTreeSpec" },
{ "$ref": "#/$defs/timelineSpec" },
{ "$ref": "#/$defs/roadmapSpec" },
{ "$ref": "#/$defs/capabilityMapSpec" },
{ "$ref": "#/$defs/executiveViewSpec" }
],
"$defs": {
"baseSpec": {
"type": "object",
"required": ["schemaVersion", "id", "title", "language", "legend", "nodes", "edges"],
"properties": {
"$schema": { "type": "string" },
"schemaVersion": { "type": "string" },
"id": { "$ref": "#/$defs/id" },
"title": { "type": "string", "minLength": 1, "maxLength": 120 },
"description": { "type": "string", "maxLength": 500 },
"language": { "enum": ["en", "ja", "mixed"] },
"metadata": { "$ref": "#/$defs/metadata" },
"legend": {
"type": "array",
"maxItems": 8,
"items": {
"type": "object",
"additionalProperties": false,
"required": ["label", "variant"],
"properties": {
"label": { "type": "string", "minLength": 1, "maxLength": 60 },
"variant": { "$ref": "#/$defs/variant" }
}
}
},
"boundaries": {
"type": "array",
"maxItems": 50,
"items": { "$ref": "#/$defs/boundary" }
},
"nodes": {
"type": "array",
"minItems": 1,
"items": { "$ref": "#/$defs/node" }
},
"edges": {
"type": "array",
"items": { "$ref": "#/$defs/edge" }
}
}
},
"legacyArchitectureSpec": {
"type": "object",
"allOf": [
{ "$ref": "#/$defs/baseSpec" },
{
"type": "object",
"properties": {
"schemaVersion": { "const": "1.0" }
}
}
],
"unevaluatedProperties": false
},
"architectureSpec": {
"type": "object",
"allOf": [
{ "$ref": "#/$defs/baseSpec" },
{
"type": "object",
"required": ["diagramKind"],
"properties": {
"schemaVersion": { "const": "2.0" },
"diagramKind": { "const": "architecture" }
}
}
],
"unevaluatedProperties": false
},
"c4SystemContextSpec": {
"type": "object",
"additionalProperties": false,
"required": [
"schemaVersion", "diagramKind", "id", "title", "language", "scopeSystemId",
"scopeBoundaryId", "boundaries", "nodes", "edges"
],
"properties": {
"$schema": { "type": "string" },
"schemaVersion": { "const": "2.0" },
"diagramKind": { "const": "c4-system-context" },
"id": { "$ref": "#/$defs/id" },
"title": { "type": "string", "minLength": 1, "maxLength": 120 },
"description": { "type": "string", "maxLength": 500 },
"language": { "enum": ["en", "ja", "mixed"] },
"metadata": { "$ref": "#/$defs/metadata" },
"scopeSystemId": { "$ref": "#/$defs/id" },
"scopeBoundaryId": { "$ref": "#/$defs/id" },
"boundaries": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": { "$ref": "#/$defs/c4SystemBoundary" }
},
"nodes": {
"type": "array",
"minItems": 2,
"maxItems": 50,
"items": { "$ref": "#/$defs/c4Element" }
},
"edges": {
"type": "array",
"minItems": 1,
"maxItems": 100,
"items": { "$ref": "#/$defs/c4Relationship" }
}
}
},
"c4SystemBoundary": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "system-boundary" },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"c4Element": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "description"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "enum": ["person", "software-system", "external-system"] },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"description": { "type": "string", "minLength": 3, "maxLength": 240 },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"c4Relationship": {
"type": "object",
"additionalProperties": false,
"required": ["id", "from", "to", "type", "description"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"from": { "$ref": "#/$defs/id" },
"to": { "$ref": "#/$defs/id" },
"type": { "const": "relationship" },
"description": { "type": "string", "minLength": 3, "maxLength": 160 },
"technology": { "type": "string", "minLength": 1, "maxLength": 64 },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"c4ContainerSpec": {
"type": "object",
"additionalProperties": false,
"required": [
"schemaVersion", "diagramKind", "id", "title", "language", "contextDiagramId",
"scopeSystemId", "scopeBoundaryId", "boundaries", "nodes", "edges"
],
"properties": {
"$schema": { "type": "string" },
"schemaVersion": { "const": "2.0" },
"diagramKind": { "const": "c4-container" },
"id": { "$ref": "#/$defs/id" },
"title": { "type": "string", "minLength": 1, "maxLength": 120 },
"description": { "type": "string", "maxLength": 500 },
"language": { "enum": ["en", "ja", "mixed"] },
"metadata": { "$ref": "#/$defs/metadata" },
"contextDiagramId": { "$ref": "#/$defs/id" },
"scopeSystemId": { "$ref": "#/$defs/id" },
"scopeBoundaryId": { "$ref": "#/$defs/id" },
"boundaries": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": { "$ref": "#/$defs/c4SystemBoundary" }
},
"nodes": {
"type": "array",
"minItems": 1,
"maxItems": 80,
"items": { "$ref": "#/$defs/c4ContainerElement" }
},
"edges": {
"type": "array",
"minItems": 1,
"maxItems": 160,
"items": { "$ref": "#/$defs/c4Relationship" }
}
}
},
"c4ContainerElement": {
"oneOf": [
{ "$ref": "#/$defs/c4ContainerPrimary" },
{ "$ref": "#/$defs/c4ContainerSupportingElement" }
]
},
"c4ContainerPrimary": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "containerKind", "title", "description", "technology"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "container" },
"containerKind": { "enum": ["application", "data-store"] },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"description": { "type": "string", "minLength": 3, "maxLength": 240 },
"technology": { "type": "string", "minLength": 1, "maxLength": 80 },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"c4ContainerSupportingElement": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "description"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "enum": ["person", "external-system"] },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"description": { "type": "string", "minLength": 3, "maxLength": 240 },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"bpmnLiteSpec": {
"type": "object",
"additionalProperties": false,
"required": ["schemaVersion", "diagramKind", "id", "title", "language", "pool", "lanes", "nodes", "edges"],
"properties": {
"$schema": { "type": "string" },
"schemaVersion": { "const": "2.0" },
"diagramKind": { "const": "bpmn-lite" },
"id": { "$ref": "#/$defs/id" },
"title": { "type": "string", "minLength": 1, "maxLength": 120 },
"description": { "type": "string", "maxLength": 500 },
"language": { "enum": ["en", "ja", "mixed"] },
"metadata": { "$ref": "#/$defs/metadata" },
"pool": { "$ref": "#/$defs/bpmnPool" },
"lanes": {
"type": "array",
"minItems": 2,
"maxItems": 16,
"items": { "$ref": "#/$defs/bpmnLane" }
},
"nodes": {
"type": "array",
"minItems": 4,
"maxItems": 160,
"items": { "$ref": "#/$defs/bpmnFlowNode" }
},
"edges": {
"type": "array",
"minItems": 3,
"maxItems": 320,
"items": { "$ref": "#/$defs/bpmnSequenceFlow" }
}
}
},
"bpmnPool": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "pool" },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"bpmnLane": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "lane" },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"bpmnFlowNode": {
"oneOf": [
{ "$ref": "#/$defs/bpmnSimpleFlowNode" },
{ "$ref": "#/$defs/bpmnGateway" }
]
},
"bpmnSimpleFlowNode": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "laneId"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "enum": ["start-event", "end-event", "task"] },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"laneId": { "$ref": "#/$defs/id" },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"bpmnGateway": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "laneId", "gatewayRole"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "enum": ["exclusive-gateway", "parallel-gateway"] },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"laneId": { "$ref": "#/$defs/id" },
"gatewayRole": { "enum": ["split", "join"] },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"bpmnSequenceFlow": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "from", "to"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "sequence-flow" },
"from": { "$ref": "#/$defs/id" },
"to": { "$ref": "#/$defs/id" },
"condition": { "type": "string", "minLength": 1, "maxLength": 160 },
"isDefault": { "type": "boolean" },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"sequenceSpec": {
"type": "object",
"additionalProperties": false,
"required": ["schemaVersion", "diagramKind", "id", "title", "language", "nodes", "fragments", "edges"],
"properties": {
"$schema": { "type": "string" },
"schemaVersion": { "const": "2.0" },
"diagramKind": { "const": "sequence" },
"id": { "$ref": "#/$defs/id" },
"title": { "type": "string", "minLength": 1, "maxLength": 120 },
"description": { "type": "string", "maxLength": 500 },
"language": { "enum": ["en", "ja", "mixed"] },
"metadata": { "$ref": "#/$defs/metadata" },
"nodes": { "type": "array", "minItems": 2, "maxItems": 32, "items": { "$ref": "#/$defs/sequenceLifeline" } },
"fragments": { "type": "array", "maxItems": 24, "items": { "$ref": "#/$defs/sequenceFragment" } },
"edges": { "type": "array", "minItems": 1, "maxItems": 320, "items": { "$ref": "#/$defs/sequenceMessage" } }
}
},
"sequenceLifeline": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "occurrenceIds"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "lifeline" },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"occurrenceIds": { "type": "array", "minItems": 1, "maxItems": 320, "uniqueItems": true, "items": { "$ref": "#/$defs/id" } },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"sequenceFragment": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "operator", "title", "operands"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "combined-fragment" },
"operator": { "enum": ["alt", "opt", "par"] },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"operands": { "type": "array", "minItems": 1, "maxItems": 8, "items": { "$ref": "#/$defs/sequenceOperand" } },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"sequenceOperand": {
"type": "object",
"additionalProperties": false,
"required": ["id", "occurrenceIds"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"guard": { "type": "string", "minLength": 1, "maxLength": 120 },
"occurrenceIds": { "type": "array", "minItems": 1, "maxItems": 160, "uniqueItems": true, "items": { "$ref": "#/$defs/id" } }
}
},
"sequenceMessage": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "from", "to", "title", "sendOccurrenceId", "receiveOccurrenceId"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "enum": ["sync-message", "async-message", "return-message"] },
"from": { "$ref": "#/$defs/id" },
"to": { "$ref": "#/$defs/id" },
"title": { "type": "string", "minLength": 1, "maxLength": 120 },
"sendOccurrenceId": { "$ref": "#/$defs/id" },
"receiveOccurrenceId": { "$ref": "#/$defs/id" },
"replyTo": { "$ref": "#/$defs/id" },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"erSpec": {
"type": "object",
"additionalProperties": false,
"required": ["schemaVersion", "diagramKind", "id", "title", "language", "nodes", "edges"],
"properties": {
"$schema": { "type": "string" },
"schemaVersion": { "const": "2.0" },
"diagramKind": { "const": "er" },
"id": { "$ref": "#/$defs/id" },
"title": { "type": "string", "minLength": 1, "maxLength": 120 },
"description": { "type": "string", "maxLength": 500 },
"language": { "enum": ["en", "ja", "mixed"] },
"metadata": { "$ref": "#/$defs/metadata" },
"nodes": { "type": "array", "minItems": 2, "maxItems": 120, "items": { "$ref": "#/$defs/erEntity" } },
"edges": { "type": "array", "maxItems": 240, "items": { "$ref": "#/$defs/erForeignKey" } }
}
},
"erEntity": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "description", "attributes", "primaryKey", "uniqueKeys"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "entity" },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"description": { "type": "string", "minLength": 3, "maxLength": 240 },
"attributes": { "type": "array", "minItems": 1, "maxItems": 80, "items": { "$ref": "#/$defs/erAttribute" } },
"primaryKey": { "$ref": "#/$defs/erKey" },
"uniqueKeys": { "type": "array", "maxItems": 24, "items": { "$ref": "#/$defs/erKey" } },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"erAttribute": {
"type": "object",
"additionalProperties": false,
"required": ["id", "name", "dataType", "nullable"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"name": { "type": "string", "minLength": 1, "maxLength": 80 },
"dataType": { "type": "string", "minLength": 1, "maxLength": 80 },
"nullable": { "type": "boolean" }
}
},
"erKey": {
"type": "object",
"additionalProperties": false,
"required": ["id", "attributeIds"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"attributeIds": { "type": "array", "maxItems": 16, "items": { "$ref": "#/$defs/id" } }
}
},
"erForeignKey": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "from", "to", "fromAttributeIds", "toAttributeIds", "fromCardinality", "toCardinality", "identifying"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "foreign-key" },
"from": { "$ref": "#/$defs/id" },
"to": { "$ref": "#/$defs/id" },
"title": { "type": "string", "minLength": 1, "maxLength": 120 },
"fromAttributeIds": { "type": "array", "maxItems": 16, "items": { "$ref": "#/$defs/id" } },
"toAttributeIds": { "type": "array", "maxItems": 16, "items": { "$ref": "#/$defs/id" } },
"fromCardinality": { "$ref": "#/$defs/erCardinality" },
"toCardinality": { "$ref": "#/$defs/erCardinality" },
"identifying": { "type": "boolean" },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"erCardinality": { "enum": ["zero-or-one", "one", "zero-or-many", "one-or-many"] },
"stateSpec": {
"type": "object",
"additionalProperties": false,
"required": ["schemaVersion", "diagramKind", "id", "title", "language", "initialStateId", "nodes", "edges"],
"properties": {
"$schema": { "type": "string" },
"schemaVersion": { "const": "2.0" },
"diagramKind": { "const": "state" },
"id": { "$ref": "#/$defs/id" },
"title": { "type": "string", "minLength": 1, "maxLength": 120 },
"description": { "type": "string", "maxLength": 500 },
"language": { "enum": ["en", "ja", "mixed"] },
"metadata": { "$ref": "#/$defs/metadata" },
"initialStateId": { "$ref": "#/$defs/id" },
"nodes": { "type": "array", "minItems": 2, "maxItems": 120, "items": { "$ref": "#/$defs/stateNode" } },
"edges": { "type": "array", "minItems": 1, "maxItems": 240, "items": { "$ref": "#/$defs/stateTransition" } }
}
},
"stateNode": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "description"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "enum": ["state", "final-state"] },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"description": { "type": "string", "minLength": 3, "maxLength": 240 },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"stateTransition": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "from", "to", "event"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "transition" },
"from": { "$ref": "#/$defs/id" },
"to": { "$ref": "#/$defs/id" },
"event": { "type": "string", "minLength": 1, "maxLength": 120 },
"guard": { "type": "string", "minLength": 1, "maxLength": 160 },
"action": { "type": "string", "minLength": 1, "maxLength": 160 },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"decisionTreeSpec": {
"type": "object",
"additionalProperties": false,
"required": ["schemaVersion", "diagramKind", "id", "title", "language", "rootNodeId", "nodes", "edges"],
"properties": {
"$schema": { "type": "string" },
"schemaVersion": { "const": "2.0" },
"diagramKind": { "const": "decision-tree" },
"id": { "$ref": "#/$defs/id" },
"title": { "type": "string", "minLength": 1, "maxLength": 120 },
"description": { "type": "string", "maxLength": 500 },
"language": { "enum": ["en", "ja", "mixed"] },
"metadata": { "$ref": "#/$defs/metadata" },
"rootNodeId": { "$ref": "#/$defs/id" },
"nodes": { "type": "array", "minItems": 3, "maxItems": 160, "items": { "$ref": "#/$defs/decisionTreeNode" } },
"edges": { "type": "array", "minItems": 2, "maxItems": 320, "items": { "$ref": "#/$defs/decisionBranch" } }
}
},
"decisionTreeNode": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "description"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "enum": ["decision", "outcome"] },
"title": { "type": "string", "minLength": 1, "maxLength": 120 },
"description": { "type": "string", "minLength": 3, "maxLength": 240 },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"decisionBranch": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "from", "to", "isDefault"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "branch" },
"from": { "$ref": "#/$defs/id" },
"to": { "$ref": "#/$defs/id" },
"condition": { "type": "string", "minLength": 1, "maxLength": 160 },
"isDefault": { "type": "boolean" },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"timelineSpec": {
"type": "object",
"additionalProperties": false,
"required": ["schemaVersion", "diagramKind", "id", "title", "language", "windowStart", "windowEnd", "workstreams", "nodes", "edges"],
"properties": {
"$schema": { "type": "string" },
"schemaVersion": { "const": "2.0" },
"diagramKind": { "const": "timeline" },
"id": { "$ref": "#/$defs/id" },
"title": { "type": "string", "minLength": 1, "maxLength": 120 },
"description": { "type": "string", "maxLength": 500 },
"language": { "enum": ["en", "ja", "mixed"] },
"metadata": { "$ref": "#/$defs/metadata" },
"windowStart": { "$ref": "#/$defs/isoDate" },
"windowEnd": { "$ref": "#/$defs/isoDate" },
"workstreams": { "type": "array", "minItems": 1, "maxItems": 6, "items": { "$ref": "#/$defs/timelineWorkstream" } },
"nodes": { "type": "array", "minItems": 1, "maxItems": 40, "items": { "$ref": "#/$defs/timelineItem" } },
"edges": { "type": "array", "maxItems": 80, "items": { "$ref": "#/$defs/timelineDependency" } }
}
},
"timelineWorkstream": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "workstream" },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"timelineItem": {
"oneOf": [
{ "$ref": "#/$defs/timelineTask" },
{ "$ref": "#/$defs/timelineMilestone" }
]
},
"timelineTask": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "description", "workstreamId", "startDate", "endDate", "status"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "task" },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"description": { "type": "string", "minLength": 3, "maxLength": 240 },
"workstreamId": { "$ref": "#/$defs/id" },
"startDate": { "$ref": "#/$defs/isoDate" },
"endDate": { "$ref": "#/$defs/isoDate" },
"status": { "$ref": "#/$defs/timelineStatus" },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"timelineMilestone": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "description", "workstreamId", "date", "status"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "milestone" },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"description": { "type": "string", "minLength": 3, "maxLength": 240 },
"workstreamId": { "$ref": "#/$defs/id" },
"date": { "$ref": "#/$defs/isoDate" },
"status": { "$ref": "#/$defs/timelineStatus" },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"timelineDependency": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "from", "to"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "finish-to-start" },
"from": { "$ref": "#/$defs/id" },
"to": { "$ref": "#/$defs/id" },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"timelineStatus": { "enum": ["planned", "active", "blocked", "done"] },
"isoDate": { "type": "string", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" },
"roadmapSpec": {
"type": "object",
"additionalProperties": false,
"required": ["schemaVersion", "diagramKind", "id", "title", "language", "vision", "horizons", "themes", "nodes", "edges"],
"properties": {
"$schema": { "type": "string" },
"schemaVersion": { "const": "2.0" },
"diagramKind": { "const": "roadmap" },
"id": { "$ref": "#/$defs/id" },
"title": { "type": "string", "minLength": 1, "maxLength": 120 },
"description": { "type": "string", "maxLength": 500 },
"language": { "enum": ["en", "ja", "mixed"] },
"metadata": { "$ref": "#/$defs/metadata" },
"vision": { "type": "string", "minLength": 8, "maxLength": 180 },
"horizons": { "type": "array", "minItems": 3, "maxItems": 3, "items": { "$ref": "#/$defs/roadmapHorizon" } },
"themes": { "type": "array", "minItems": 1, "maxItems": 5, "items": { "$ref": "#/$defs/roadmapTheme" } },
"nodes": { "type": "array", "minItems": 1, "maxItems": 24, "items": { "$ref": "#/$defs/roadmapInitiative" } },
"edges": { "type": "array", "maxItems": 0 }
}
},
"roadmapHorizon": {
"type": "object",
"additionalProperties": false,
"required": ["id", "kind", "title", "description"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"kind": { "enum": ["now", "next", "later"] },
"title": { "type": "string", "minLength": 1, "maxLength": 40 },
"description": { "type": "string", "minLength": 3, "maxLength": 120 },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"roadmapTheme": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "description"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "theme" },
"title": { "type": "string", "minLength": 1, "maxLength": 60 },
"description": { "type": "string", "minLength": 3, "maxLength": 160 },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"roadmapInitiative": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "description", "outcome", "themeId", "horizonId", "status"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "initiative" },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"description": { "type": "string", "minLength": 3, "maxLength": 200 },
"outcome": { "type": "string", "minLength": 8, "maxLength": 220 },
"themeId": { "$ref": "#/$defs/id" },
"horizonId": { "$ref": "#/$defs/id" },
"status": { "enum": ["exploring", "planned", "active", "delivered"] },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"capabilityMapSpec": {
"type": "object",
"additionalProperties": false,
"required": ["schemaVersion", "diagramKind", "id", "title", "language", "scope", "domains", "nodes", "edges"],
"properties": {
"$schema": { "type": "string" },
"schemaVersion": { "const": "2.0" },
"diagramKind": { "const": "capability-map" },
"id": { "$ref": "#/$defs/id" },
"title": { "type": "string", "minLength": 1, "maxLength": 120 },
"description": { "type": "string", "maxLength": 500 },
"language": { "enum": ["en", "ja", "mixed"] },
"metadata": { "$ref": "#/$defs/metadata" },
"scope": { "type": "string", "minLength": 8, "maxLength": 220 },
"domains": { "type": "array", "minItems": 2, "maxItems": 6, "items": { "$ref": "#/$defs/capabilityDomain" } },
"nodes": { "type": "array", "minItems": 2, "maxItems": 30, "items": { "$ref": "#/$defs/capability" } },
"edges": { "type": "array", "maxItems": 0 }
}
},
"capabilityDomain": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "description"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "domain" },
"title": { "type": "string", "minLength": 1, "maxLength": 60 },
"description": { "type": "string", "minLength": 3, "maxLength": 160 },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"capability": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "description", "domainId", "strategicImportance"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "capability" },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"description": { "type": "string", "minLength": 3, "maxLength": 200 },
"domainId": { "$ref": "#/$defs/id" },
"strategicImportance": { "enum": ["low", "medium", "high"] },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"executiveViewSpec": {
"type": "object",
"additionalProperties": false,
"required": ["schemaVersion", "diagramKind", "id", "title", "language", "asOfDate", "objective", "recommendation", "nodes", "edges"],
"properties": {
"$schema": { "type": "string" },
"schemaVersion": { "const": "2.0" },
"diagramKind": { "const": "executive-view" },
"id": { "$ref": "#/$defs/id" },
"title": { "type": "string", "minLength": 1, "maxLength": 120 },
"description": { "type": "string", "maxLength": 500 },
"language": { "enum": ["en", "ja", "mixed"] },
"metadata": { "$ref": "#/$defs/metadata" },
"asOfDate": { "$ref": "#/$defs/isoDate" },
"objective": { "type": "string", "minLength": 8, "maxLength": 220 },
"recommendation": { "type": "string", "minLength": 8, "maxLength": 240 },
"nodes": { "type": "array", "minItems": 4, "maxItems": 13, "items": { "$ref": "#/$defs/executiveItem" } },
"edges": { "type": "array", "maxItems": 0 }
}
},
"executiveItem": {
"oneOf": [
{ "$ref": "#/$defs/executiveIndicator" },
{ "$ref": "#/$defs/executiveRisk" },
{ "$ref": "#/$defs/executiveDecision" }
]
},
"executiveIndicator": {
"type": "object", "additionalProperties": false,
"required": ["id", "type", "title", "description", "value", "target", "trend", "status"],
"properties": {
"id": { "$ref": "#/$defs/id" }, "type": { "const": "indicator" },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"description": { "type": "string", "minLength": 3, "maxLength": 200 },
"value": { "type": "string", "minLength": 1, "maxLength": 60 },
"target": { "type": "string", "minLength": 1, "maxLength": 60 },
"trend": { "enum": ["improving", "steady", "declining"] },
"status": { "enum": ["on-track", "at-risk", "off-track"] },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"executiveRisk": {
"type": "object", "additionalProperties": false,
"required": ["id", "type", "title", "description", "impact", "response", "status"],
"properties": {
"id": { "$ref": "#/$defs/id" }, "type": { "const": "risk" },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"description": { "type": "string", "minLength": 3, "maxLength": 200 },
"impact": { "enum": ["low", "medium", "high"] },
"response": { "type": "string", "minLength": 3, "maxLength": 220 },
"status": { "enum": ["open", "watch", "mitigated"] },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"executiveDecision": {
"type": "object", "additionalProperties": false,
"required": ["id", "type", "title", "description", "recommendation", "status"],
"properties": {
"id": { "$ref": "#/$defs/id" }, "type": { "const": "decision" },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"description": { "type": "string", "minLength": 3, "maxLength": 200 },
"recommendation": { "type": "string", "minLength": 3, "maxLength": 220 },
"status": { "enum": ["open", "approved", "deferred"] },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"dataFlowSpec": {
"type": "object",
"additionalProperties": false,
"required": ["schemaVersion", "diagramKind", "id", "title", "language", "boundaries", "nodes", "edges"],
"properties": {
"$schema": { "type": "string" },
"schemaVersion": { "const": "2.0" },
"diagramKind": { "const": "data-flow" },
"id": { "$ref": "#/$defs/id" },
"title": { "type": "string", "minLength": 1, "maxLength": 120 },
"description": { "type": "string", "maxLength": 500 },
"language": { "enum": ["en", "ja", "mixed"] },
"metadata": { "$ref": "#/$defs/metadata" },
"boundaries": {
"type": "array",
"maxItems": 32,
"items": { "$ref": "#/$defs/dataFlowTrustBoundary" }
},
"nodes": {
"type": "array",
"minItems": 2,
"maxItems": 120,
"items": { "$ref": "#/$defs/dataFlowNode" }
},
"edges": {
"type": "array",
"minItems": 1,
"maxItems": 240,
"items": { "$ref": "#/$defs/dataFlowEdge" }
}
}
},
"dataFlowTrustBoundary": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "trustLevel"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "trust-boundary" },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"trustLevel": { "enum": ["external", "controlled", "restricted"] },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"dataFlowNode": {
"oneOf": [
{ "$ref": "#/$defs/dataFlowSimpleNode" },
{ "$ref": "#/$defs/dataFlowProcess" },
{ "$ref": "#/$defs/dataFlowDataStore" }
]
},
"dataFlowSimpleNode": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "description"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "enum": ["source", "sink", "external-system"] },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"description": { "type": "string", "minLength": 3, "maxLength": 240 },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"dataFlowProcess": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "description", "transformation"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "process" },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"description": { "type": "string", "minLength": 3, "maxLength": 240 },
"transformation": { "type": "string", "minLength": 3, "maxLength": 160 },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"dataFlowDataStore": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "description", "classification"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "data-store" },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"description": { "type": "string", "minLength": 3, "maxLength": 240 },
"classification": { "$ref": "#/$defs/dataClassification" },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"dataFlowEdge": {
"type": "object",
"additionalProperties": false,
"required": ["id", "from", "to", "type", "dataName", "format", "frequency", "mode", "classification"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"from": { "$ref": "#/$defs/id" },
"to": { "$ref": "#/$defs/id" },
"type": { "const": "data-flow" },
"dataName": { "type": "string", "minLength": 1, "maxLength": 100 },
"format": { "type": "string", "minLength": 1, "maxLength": 80 },
"frequency": { "type": "string", "minLength": 1, "maxLength": 80 },
"mode": { "enum": ["batch", "streaming", "request-response"] },
"classification": { "$ref": "#/$defs/dataClassification" },
"trustBoundaryIds": {
"type": "array",
"maxItems": 32,
"uniqueItems": true,
"items": { "$ref": "#/$defs/id" }
},
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"dataClassification": { "enum": ["public", "internal", "confidential", "restricted"] },
"deploymentSpec": {
"type": "object",
"additionalProperties": false,
"required": [
"schemaVersion", "diagramKind", "id", "title", "language", "environment",
"entryNodeIds", "boundaries", "nodes", "edges"
],
"properties": {
"$schema": { "type": "string" },
"schemaVersion": { "const": "2.0" },
"diagramKind": { "const": "deployment" },
"id": { "$ref": "#/$defs/id" },
"title": { "type": "string", "minLength": 1, "maxLength": 120 },
"description": { "type": "string", "maxLength": 500 },
"language": { "enum": ["en", "ja", "mixed"] },
"metadata": { "$ref": "#/$defs/metadata" },
"environment": { "type": "string", "minLength": 1, "maxLength": 80 },
"entryNodeIds": {
"type": "array",
"minItems": 1,
"maxItems": 32,
"uniqueItems": true,
"items": { "$ref": "#/$defs/id" }
},
"boundaries": {
"type": "array",
"minItems": 4,
"maxItems": 64,
"items": { "$ref": "#/$defs/deploymentBoundary" }
},
"nodes": {
"type": "array",
"minItems": 2,
"maxItems": 160,
"items": { "$ref": "#/$defs/deploymentNode" }
},
"edges": {
"type": "array",
"minItems": 1,
"maxItems": 320,
"items": { "$ref": "#/$defs/deploymentCommunication" }
}
}
},
"deploymentBoundary": {
"oneOf": [
{ "$ref": "#/$defs/deploymentCloudProvider" },
{ "$ref": "#/$defs/deploymentRegion" },
{ "$ref": "#/$defs/deploymentNetworkBoundary" }
]
},
"deploymentCloudProvider": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "cloud-provider" },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"deploymentRegion": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "parentId"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "region" },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"parentId": { "$ref": "#/$defs/id" },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"deploymentNetworkBoundary": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "parentId", "exposure"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "enum": ["network", "subnet"] },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"parentId": { "$ref": "#/$defs/id" },
"exposure": { "$ref": "#/$defs/networkExposure" },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"deploymentNode": {
"oneOf": [
{ "$ref": "#/$defs/deploymentExternalSystem" },
{ "$ref": "#/$defs/deploymentManagedNode" }
]
},
"deploymentExternalSystem": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "description", "technology", "exposure"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "const": "external-system" },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"description": { "type": "string", "minLength": 3, "maxLength": 240 },
"technology": { "type": "string", "minLength": 1, "maxLength": 100 },
"exposure": { "const": "public" },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"deploymentManagedNode": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "title", "description", "technology", "exposure", "boundaryId"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "enum": ["gateway", "load-balancer", "firewall", "host", "service", "database"] },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"description": { "type": "string", "minLength": 3, "maxLength": 240 },
"technology": { "type": "string", "minLength": 1, "maxLength": 100 },
"exposure": { "$ref": "#/$defs/networkExposure" },
"boundaryId": { "$ref": "#/$defs/id" },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"deploymentCommunication": {
"type": "object",
"additionalProperties": false,
"required": ["id", "from", "to", "type", "description", "protocol", "port"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"from": { "$ref": "#/$defs/id" },
"to": { "$ref": "#/$defs/id" },
"type": { "const": "communication" },
"description": { "type": "string", "minLength": 3, "maxLength": 160 },
"protocol": { "type": "string", "minLength": 1, "maxLength": 40 },
"port": { "type": "integer", "minimum": 1, "maximum": 65535 },
"boundaryIds": {
"type": "array",
"maxItems": 64,
"uniqueItems": true,
"items": { "$ref": "#/$defs/id" }
},
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"networkExposure": { "enum": ["public", "private", "restricted"] },
"id": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,63}$" },
"variant": { "enum": ["realtime", "delegated", "external", "warning", "critical"] },
"status": { "enum": ["planned", "experimental", "beta", "stable", "deprecated", "retired"] },
"metadata": {
"type": "object",
"additionalProperties": { "type": "string", "maxLength": 200 }
},
"boundary": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "variant", "title"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": { "enum": ["system", "network", "trust", "organization", "runtime"] },
"variant": { "$ref": "#/$defs/variant" },
"title": { "type": "string", "minLength": 1, "maxLength": 80 },
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"node": {
"type": "object",
"additionalProperties": false,
"required": ["id", "type", "variant", "status", "title"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"type": {
"enum": [
"actor", "client", "frontend", "backend", "api", "service", "model", "agent",
"tool", "database", "cache", "queue", "event-bus", "storage", "batch-job",
"external-service", "observability", "security", "network", "note"
]
},
"variant": { "$ref": "#/$defs/variant" },
"status": { "$ref": "#/$defs/status" },
"title": { "type": "string", "minLength": 1, "maxLength": 60 },
"subtitle": { "type": "string", "maxLength": 100 },
"icon": { "$ref": "#/$defs/id" },
"controls": {
"type": "array",
"maxItems": 8,
"items": { "type": "string", "minLength": 1, "maxLength": 32 }
},
"metadata": { "$ref": "#/$defs/metadata" }
}
},
"edge": {
"type": "object",
"additionalProperties": false,
"required": ["id", "from", "to", "type", "variant", "direction"],
"properties": {
"id": { "$ref": "#/$defs/id" },
"from": { "$ref": "#/$defs/id" },
"to": { "$ref": "#/$defs/id" },
"type": {
"enum": [
"sync-request", "async-request", "realtime-stream", "event", "batch", "data-read",
"data-write", "control", "monitoring", "authentication"
]
},
"variant": { "$ref": "#/$defs/variant" },
"label": { "type": "string", "maxLength": 80 },
"direction": { "enum": ["forward", "bidirectional"] },
"protocol": { "type": "string", "maxLength": 32 },
"metadata": { "$ref": "#/$defs/metadata" }
}
}
}
}
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.local/schemas/layout.schema.json",
"title": "Architecture diagram layout",
"type": "object",
"additionalProperties": false,
"required": ["schemaVersion", "canvas", "nodes", "edges"],
"properties": {
"$schema": { "type": "string" },
"schemaVersion": { "const": "1.0" },
"canvas": {
"type": "object",
"additionalProperties": false,
"required": ["width", "height"],
"properties": {
"width": { "type": "integer", "minimum": 320, "maximum": 10000 },
"height": { "type": "integer", "minimum": 240, "maximum": 10000 }
}
},
"boundaries": {
"type": "object",
"additionalProperties": { "$ref": "#/$defs/boundaryGeometry" }
},
"nodes": {
"type": "object",
"additionalProperties": { "$ref": "#/$defs/nodeGeometry" }
},
"edges": {
"type": "object",
"additionalProperties": { "$ref": "#/$defs/edgeGeometry" }
}
},
"$defs": {
"point": {
"type": "object",
"additionalProperties": false,
"required": ["x", "y"],
"properties": {
"x": { "type": "number", "minimum": 0, "maximum": 10000 },
"y": { "type": "number", "minimum": 0, "maximum": 10000 }
}
},
"port": {
"type": "object",
"additionalProperties": false,
"required": ["side", "offset"],
"properties": {
"side": { "enum": ["top", "right", "bottom", "left"] },
"offset": { "type": "number", "minimum": 0, "maximum": 1 }
}
},
"nodeGeometry": {
"type": "object",
"additionalProperties": false,
"required": ["x", "y", "width", "height"],
"properties": {
"x": { "type": "number", "minimum": 0, "maximum": 10000 },
"y": { "type": "number", "minimum": 0, "maximum": 10000 },
"width": { "type": "number", "minimum": 40, "maximum": 3000 },
"height": { "type": "number", "minimum": 30, "maximum": 3000 }
}
},
"boundaryGeometry": {
"type": "object",
"additionalProperties": false,
"required": ["x", "y", "width", "height"],
"properties": {
"x": { "type": "number", "minimum": 0, "maximum": 10000 },
"y": { "type": "number", "minimum": 0, "maximum": 10000 },
"width": { "type": "number", "minimum": 120, "maximum": 10000 },
"height": { "type": "number", "minimum": 80, "maximum": 10000 }
}
},
"edgeGeometry": {
"type": "object",
"additionalProperties": false,
"required": ["source", "target"],
"properties": {
"source": { "$ref": "#/$defs/port" },
"target": { "$ref": "#/$defs/port" },
"waypoints": {
"type": "array",
"maxItems": 20,
"items": { "$ref": "#/$defs/point" }
},
"label": { "$ref": "#/$defs/point" }
}
}
}
}