Every diagram library Kroki supports, with what it outputs and a working example for each.
Every diagram library Kroki supports, with what it outputs and a working example for each.
Filter by what you're building, then click a card to see its formats and a working example.
blockdiag.diag
blockdiag {
blockdiag -> generates -> "block-diagrams";
blockdiag -> is -> "very easy!";
blockdiag [color = "greenyellow"];
"block-diagrams" [color = "pink"];
"very easy!" [color = "orange"];
}
GET https://kroki.io/blockdiag/svg/eNpdzEEKgzAQheF9TzHN3hNIexHpYtRHCKYZmYgSpHdvU0Wiy8f7-Fsv3dA7trTeiNpjVU-yCFCeEPMw_6vKn_I7mvqq3cZmaCJwTPcfOZmmEy9KDzJWgZDgvSzmlUPXeGFHF4YdFekCiHKwyOTzBVntQRE=
bpmn.xml
<?xml version="1.0" encoding="UTF-8"?>
<semantic:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:semantic="http://www.omg.org/spec/BPMN/20100524/MODEL" id="_1275940932088" targetNamespace="http://www.trisotech.com/definitions/_1275940932088" exporter="Camunda Modeler" exporterVersion="1.16.0">
<semantic:message id="_1275940932310" />
<semantic:message id="_1275940932433" />
<semantic:process id="_6-1" isExecutable="false">
<semantic:laneSet id="ls_6-438">
<semantic:lane id="_6-650" name="clerk">
<semantic:flowNodeRef>OrderReceivedEvent</semantic:flowNodeRef>
<semantic:flowNodeRef>_6-652</semantic:flowNodeRef>
<semantic:flowNodeRef>_6-674</semantic:flowNodeRef>
<semantic:flowNodeRef>CalmCustomerTask</semantic:flowNodeRef>
</semantic:lane>
<semantic:lane id="_6-446" name="pizza chef">
<semantic:flowNodeRef>_6-463</semantic:flowNodeRef>
</semantic:lane>
<semantic:lane id="_6-448" name="delivery boy">
<semantic:flowNodeRef>_6-514</semantic:flowNodeRef>
<semantic:flowNodeRef>_6-565</semantic:flowNodeRef>
<semantic:flowNodeRef>_6-616</semantic:flowNodeRef>
</semantic:lane>
</semantic:laneSet>
<semantic:startEvent id="OrderReceivedEvent" name="Order received">
<semantic:outgoing>_6-630</semantic:outgoing>
<semantic:messageEventDefinition messageRef="_1275940932310" />
</semantic:startEvent>
<semantic:parallelGateway id="_6-652" name="">
<semantic:incoming>_6-630</semantic:incoming>
<semantic:outgoing>_6-691</semantic:outgoing>
<semantic:outgoing>_6-693</semantic:outgoing>
</semantic:parallelGateway>
<semantic:intermediateCatchEvent id="_6-674" name="„where is my pizza?“">
<semantic:incoming>_6-691</semantic:incoming>
<semantic:incoming>_6-746</semantic:incoming>
<semantic:outgoing>_6-748</semantic:outgoing>
<semantic:messageEventDefinition messageRef="_1275940932433" />
</semantic:intermediateCatchEvent>
<semantic:task id="CalmCustomerTask" name="Calm customer">
<semantic:incoming>_6-748</semantic:incoming>
<semantic:outgoing>_6-746</semantic:outgoing>
</semantic:task>
<semantic:task id="_6-463" name="Bake the pizza">
<semantic:incoming>_6-693</semantic:incoming>
<semantic:outgoing>_6-632</semantic:outgoing>
</semantic:task>
<semantic:task id="_6-514" name="Deliver the pizza">
<semantic:incoming>_6-632</semantic:incoming>
<semantic:outgoing>_6-634</semantic:outgoing>
</semantic:task>
<semantic:task id="_6-565" name="Receive payment">
<semantic:incoming>_6-634</semantic:incoming>
<semantic:outgoing>_6-636</semantic:outgoing>
</semantic:task>
<semantic:endEvent id="_6-616" name="">
<semantic:incoming>_6-636</semantic:incoming>
<semantic:terminateEventDefinition />
</semantic:endEvent>
<semantic:sequenceFlow id="_6-630" name="" sourceRef="OrderReceivedEvent" targetRef="_6-652" />
<semantic:sequenceFlow id="_6-632" name="" sourceRef="_6-463" targetRef="_6-514" />
<semantic:sequenceFlow id="_6-634" name="" sourceRef="_6-514" targetRef="_6-565" />
<semantic:sequenceFlow id="_6-636" name="" sourceRef="_6-565" targetRef="_6-616" />
<semantic:sequenceFlow id="_6-691" name="" sourceRef="_6-652" targetRef="_6-674" />
<semantic:sequenceFlow id="_6-693" name="" sourceRef="_6-652" targetRef="_6-463" />
<semantic:sequenceFlow id="_6-746" name="" sourceRef="CalmCustomerTask" targetRef="_6-674" />
<semantic:sequenceFlow id="_6-748" name="" sourceRef="_6-674" targetRef="CalmCustomerTask" />
</semantic:process>
<semantic:message id="_1275940932198" />
<semantic:process id="_6-2" isExecutable="false">
<semantic:startEvent id="_6-61" name="Hungry for pizza">
<semantic:outgoing>_6-125</semantic:outgoing>
</semantic:startEvent>
<semantic:task id="SelectAPizzaTask" name="Select a pizza">
<semantic:incoming>_6-125</semantic:incoming>
<semantic:outgoing>_6-178</semantic:outgoing>
</semantic:task>
<semantic:task id="_6-127" name="Order a pizza">
<semantic:incoming>_6-178</semantic:incoming>
<semantic:outgoing>_6-420</semantic:outgoing>
</semantic:task>
<semantic:eventBasedGateway id="_6-180" name="">
<semantic:incoming>_6-420</semantic:incoming>
<semantic:incoming>_6-430</semantic:incoming>
<semantic:outgoing>_6-422</semantic:outgoing>
<semantic:outgoing>_6-424</semantic:outgoing>
</semantic:eventBasedGateway>
<semantic:intermediateCatchEvent id="_6-202" name="pizza received">
<semantic:incoming>_6-422</semantic:incoming>
<semantic:outgoing>_6-428</semantic:outgoing>
<semantic:messageEventDefinition messageRef="_1275940932198" />
</semantic:intermediateCatchEvent>
<semantic:intermediateCatchEvent id="_6-219" name="60 minutes">
<semantic:incoming>_6-424</semantic:incoming>
<semantic:outgoing>_6-426</semantic:outgoing>
<semantic:timerEventDefinition>
<semantic:timeDate />
</semantic:timerEventDefinition>
</semantic:intermediateCatchEvent>
<semantic:task id="_6-236" name="Ask for the pizza">
<semantic:incoming>_6-426</semantic:incoming>
<semantic:outgoing>_6-430</semantic:outgoing>
</semantic:task>
<semantic:task id="_6-304" name="Pay the pizza">
<semantic:incoming>_6-428</semantic:incoming>
<semantic:outgoing>_6-434</semantic:outgoing>
</semantic:task>
<semantic:task id="_6-355" name="Eat the pizza">
<semantic:incoming>_6-434</semantic:incoming>
<semantic:outgoing>_6-436</semantic:outgoing>
</semantic:task>
<semantic:endEvent id="_6-406" name="Hunger satisfied">
<semantic:incoming>_6-436</semantic:incoming>
</semantic:endEvent>
<semantic:sequenceFlow id="_6-125" name="" sourceRef="_6-61" targetRef="SelectAPizzaTask" />
<semantic:sequenceFlow id="_6-178" name="" sourceRef="SelectAPizzaTask" targetRef="_6-127" />
<semantic:sequenceFlow id="_6-420" name="" sourceRef="_6-127" targetRef="_6-180" />
<semantic:sequenceFlow id="_6-422" name="" sourceRef="_6-180" targetRef="_6-202" />
<semantic:sequenceFlow id="_6-424" name="" sourceRef="_6-180" targetRef="_6-219" />
<semantic:sequenceFlow id="_6-426" name="" sourceRef="_6-219" targetRef="_6-236" />
<semantic:sequenceFlow id="_6-428" name="" sourceRef="_6-202" targetRef="_6-304" />
<semantic:sequenceFlow id="_6-430" name="" sourceRef="_6-236" targetRef="_6-180" />
<semantic:sequenceFlow id="_6-434" name="" sourceRef="_6-304" targetRef="_6-355" />
<semantic:sequenceFlow id="_6-436" name="" sourceRef="_6-355" targetRef="_6-406" />
</semantic:process>
<semantic:collaboration id="C1275940932557">
<semantic:participant id="_6-53" name="Pizza Customer" processRef="_6-2" />
<semantic:participant id="_6-438" name="Pizza vendor" processRef="_6-1" />
<semantic:messageFlow id="_6-638" name="pizza order" sourceRef="_6-127" targetRef="OrderReceivedEvent" />
<semantic:messageFlow id="_6-642" name="" sourceRef="_6-236" targetRef="_6-674" />
<semantic:messageFlow id="_6-646" name="receipt" sourceRef="_6-565" targetRef="_6-304" />
<semantic:messageFlow id="_6-648" name="money" sourceRef="_6-304" targetRef="_6-565" />
<semantic:messageFlow id="_6-640" name="pizza" sourceRef="_6-514" targetRef="_6-202" />
<semantic:messageFlow id="_6-750" name="" sourceRef="CalmCustomerTask" targetRef="_6-236" />
</semantic:collaboration>
<bpmndi:BPMNDiagram id="Trisotech.Visio-_6" name="Untitled Diagram" documentation="" resolution="96.00000267028808">
<bpmndi:BPMNPlane bpmnElement="C1275940932557">
<bpmndi:BPMNShape id="Trisotech.Visio__6-53" bpmnElement="_6-53" isHorizontal="true">
<dc:Bounds x="12" y="12" width="1044" height="294" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6-438" bpmnElement="_6-438" isHorizontal="true">
<dc:Bounds x="12" y="372" width="905" height="337" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6__6-650" bpmnElement="_6-650" isHorizontal="true">
<dc:Bounds x="42" y="372" width="875" height="114" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6__6-446" bpmnElement="_6-446" isHorizontal="true">
<dc:Bounds x="42" y="486" width="875" height="114" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6__6-448" bpmnElement="_6-448" isHorizontal="true">
<dc:Bounds x="42" y="600" width="875" height="109" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6_OrderReceivedEvent" bpmnElement="OrderReceivedEvent">
<dc:Bounds x="79" y="405" width="30" height="30" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6__6-652" bpmnElement="_6-652">
<dc:Bounds x="140" y="399" width="42" height="42" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6__6-674" bpmnElement="_6-674">
<dc:Bounds x="218" y="404" width="32" height="32" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6_CalmCustomerTask" bpmnElement="CalmCustomerTask">
<dc:Bounds x="286" y="386" width="83" height="68" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6__6-463" bpmnElement="_6-463">
<dc:Bounds x="252" y="521" width="83" height="68" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6__6-514" bpmnElement="_6-514">
<dc:Bounds x="464" y="629" width="83" height="68" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6__6-565" bpmnElement="_6-565">
<dc:Bounds x="603" y="629" width="83" height="68" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6__6-616" bpmnElement="_6-616">
<dc:Bounds x="722" y="647" width="32" height="32" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6__6-61" bpmnElement="_6-61">
<dc:Bounds x="66" y="96" width="30" height="30" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6__6-74" bpmnElement="SelectAPizzaTask">
<dc:Bounds x="145" y="77" width="83" height="68" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6__6-127" bpmnElement="_6-127">
<dc:Bounds x="265" y="77" width="83" height="68" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6__6-180" bpmnElement="_6-180">
<dc:Bounds x="378" y="90" width="42" height="42" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6__6-202" bpmnElement="_6-202">
<dc:Bounds x="647" y="95" width="32" height="32" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6__6-219" bpmnElement="_6-219">
<dc:Bounds x="448" y="184" width="32" height="32" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6__6-236" bpmnElement="_6-236">
<dc:Bounds x="517" y="166" width="83" height="68" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6__6-304" bpmnElement="_6-304">
<dc:Bounds x="726" y="77" width="83" height="68" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6__6-355" bpmnElement="_6-355">
<dc:Bounds x="834" y="77" width="83" height="68" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Trisotech.Visio__6__6-406" bpmnElement="_6-406">
<dc:Bounds x="956" y="95" width="32" height="32" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-640" bpmnElement="_6-640">
<di:waypoint x="506" y="629" />
<di:waypoint x="506" y="384" />
<di:waypoint x="663" y="384" />
<di:waypoint x="663" y="127" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-630" bpmnElement="_6-630">
<di:waypoint x="109" y="420" />
<di:waypoint x="140" y="420" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-691" bpmnElement="_6-691">
<di:waypoint x="182" y="420" />
<di:waypoint x="200" y="420" />
<di:waypoint x="218" y="420" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-648" bpmnElement="_6-648">
<di:waypoint x="754" y="145" />
<di:waypoint x="754" y="408" />
<di:waypoint x="630" y="408" />
<di:waypoint x="631" y="629" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-422" bpmnElement="_6-422">
<di:waypoint x="420" y="111" />
<di:waypoint x="438" y="111" />
<di:waypoint x="647" y="111" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-646" bpmnElement="_6-646" messageVisibleKind="non_initiating">
<di:waypoint x="658" y="629" />
<di:waypoint x="658" y="432" />
<di:waypoint x="782" y="432" />
<di:waypoint x="782" y="145" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-428" bpmnElement="_6-428">
<di:waypoint x="679" y="111" />
<di:waypoint x="726" y="111" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-748" bpmnElement="_6-748">
<di:waypoint x="250" y="420" />
<di:waypoint x="268" y="420" />
<di:waypoint x="286" y="420" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-420" bpmnElement="_6-420">
<di:waypoint x="348" y="111" />
<di:waypoint x="366" y="111" />
<di:waypoint x="378" y="111" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-636" bpmnElement="_6-636">
<di:waypoint x="686" y="663" />
<di:waypoint x="704" y="663" />
<di:waypoint x="722" y="663" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-750" bpmnElement="_6-750">
<di:waypoint x="328" y="386" />
<di:waypoint x="328" y="348" />
<di:waypoint x="572" y="348" />
<di:waypoint x="572" y="234" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-436" bpmnElement="_6-436">
<di:waypoint x="918" y="111" />
<di:waypoint x="936" y="111" />
<di:waypoint x="956" y="111" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-632" bpmnElement="_6-632">
<di:waypoint x="335" y="555" />
<di:waypoint x="353" y="555" />
<di:waypoint x="353" y="663" />
<di:waypoint x="464" y="663" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-634" bpmnElement="_6-634">
<di:waypoint x="548" y="663" />
<di:waypoint x="603" y="663" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-125" bpmnElement="_6-125">
<di:waypoint x="96" y="111" />
<di:waypoint x="114" y="111" />
<di:waypoint x="145" y="111" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-430" bpmnElement="_6-430">
<di:waypoint x="600" y="200" />
<di:waypoint x="618" y="200" />
<di:waypoint x="618" y="252" />
<di:waypoint x="576" y="252" />
<di:waypoint x="549" y="252" />
<di:waypoint x="360" y="252" />
<di:waypoint x="360" y="111" />
<di:waypoint x="378" y="111" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-642" bpmnElement="_6-642">
<di:waypoint x="545" y="234" />
<di:waypoint x="545" y="324" />
<di:waypoint x="234" y="324" />
<di:waypoint x="234" y="404" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-424" bpmnElement="_6-424">
<di:waypoint x="399" y="132" />
<di:waypoint x="399" y="200" />
<di:waypoint x="448" y="200" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-638" bpmnElement="_6-638">
<di:waypoint x="306" y="145" />
<di:waypoint x="306" y="252" />
<di:waypoint x="94" y="252" />
<di:waypoint x="94" y="405" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-426" bpmnElement="_6-426">
<di:waypoint x="480" y="200" />
<di:waypoint x="498" y="200" />
<di:waypoint x="517" y="200" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-693" bpmnElement="_6-693">
<di:waypoint x="161" y="441" />
<di:waypoint x="161" y="556" />
<di:waypoint x="252" y="555" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-178" bpmnElement="_6-178">
<di:waypoint x="228" y="111" />
<di:waypoint x="265" y="111" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-746" bpmnElement="_6-746">
<di:waypoint x="370" y="420" />
<di:waypoint x="386" y="420" />
<di:waypoint x="386" y="474" />
<di:waypoint x="191" y="474" />
<di:waypoint x="191" y="420" />
<di:waypoint x="218" y="420" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Trisotech.Visio__6__6-434" bpmnElement="_6-434">
<di:waypoint x="810" y="111" />
<di:waypoint x="834" y="111" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</semantic:definitions>
GET https://kroki.io/bpmn/svg/eNrNXF9znLYWf8-nYPY9XiEJAZ7YmSZ2b-_cJPU0aadvHgzyLpNd2AtsbOepH6RzP1w_yZXEf5BAUJtuX9KKo6PzO_-PtM2bt4_7nfGNJmkYRxcr8wysDBr5cRBGm4vVr19-fO2s3l6-epPSvRdloX8e0PswCjNGnRpsa5SeP6bhxWqbZYfz9frh4eHsAZ3FyWYNATDXv3_88Nnfsr2vwyjNvMinq2JX0N4U7zdiV3qg_vrqiu02AbAgXl_9u9xxd9hHQ7ve3Xz8JNsX-JonvS93lGB1z_r489X1h5URBherWxPalouBiyBwnJWRecmGZp-8PU0Pnk9bHLMkTOOM-tszP96vG4pdd7nQx0OcZDS5WL339sco8IyPcUB3NKk__Vab0CTMipevDKO2Gjs-9Ta0KyIymbnXWqQYoR7pIYl9Rp2TktcmU0F6_Uj9Y-bd7RjWe2-XUiFJc9fOi-hnmoldu5Ttw8gpiLpkJWdiMTkjpsSLlc9Qf63Imxvud_HDJ6aWX-j95c9JQJNfqE_DbzS4_kaj7M1aSjjCR5wN5--18by9773d_v0xzeI9Tb546ddhLo2vXGvDusSYlLo8hN-_ewaLz_uVBhhM0LOK4ZRiME9mZkqejLv4SUcQy8SzLWIRa741TTJDAZ1F5vndgGCJMcmEkwrl9H23VJT4YiTFJ0nMxMdsE7PMLaRFoHF09aW3p4h3cdBVlYOMYpmhU2SMFrIaQhfcwUu83Y7u_uVl9MF7qiMalqgkOEJWgfZSHNWXYeyuqYW9vQcp9zQ-dPB04YYRy8V7GoTs83sv87e1XfN8UKL-64__PWxpwuIhNfZPhgjFt3_98eeYNlrI1Npo7rExmaxBGzsv4D11EWnpVK60rmozlgeFIrvJsVQpXzf84sNqTCfODJ0QHQ_hciplz_NoKfE77ys1si3NzT9qejQ9EBB8DpFZxi1FvsqTtb7ULQl0pcbPIjWxSqmLdGocvKc9T6hjMuMZMs92DhoF7SxhEu3cqBfZPLzCiEVXN077sVgK0ytS9L9HNhjQH1nZqwRFVVu2MtL4mPh5xMsqWN4I5wmhSP9rvTOg9IwykNp8haNq8sUqvoJJhy93JU2-RMmXM-nogZtaj69rqvgKZXb42tp6cNEEvkLlWnxtLNdDP3nPldyuO8ie5Hbbgv1D80lm3R1ltEYh03XGRiGoNwp1Oj_hECWmn47RhvXE93GizLPN_GNCSyf_qBu1KnN-ZoOln_1www9tltd83fC00n5bHL0UatrOc6R9Zqh2w6wpsT29I8AQzE763AbvvJQGnc7YdIBm9m-frtcL4hndNIZwcjeNoVYJ72lhWj8NAWzPsgOzUVtzcIYWXqIjrnPJjI54RDmmWyqHAIMBPGY0HVUMnqEYoqWYLGTZt6MW2dTN6a4YolIt7VBSMpk_T3Bd1VX7B7bKk65ug9uGr6kyBJ4j0yFQ9TA3LIHoSzwj0z1PS46sqiW_9jJ9iWc05Pj5GnIMSLMqs5KSelmY3ofjiWagQZ_ZdLPKqmx7zFbX0y_kWn0VK4TSA_rs2p2bqLtaJ7DCpYIgmHT4OkCbr3JWEEzafEXx0OSLp_DleVeTr3JWEEw6fBHR5qvsjAXoNl-RRfT4IqXdhHCz7aaexYRwHXktS5uvUr-CSWe2AURzLvDj3c67ixNPVHZxJVVXdMuyV5JLUPZHePDqnGJVY5cIKKMcT1ZGcWSlWQlYCT_-iNJiyPJJEPfZmRJ2RW_SHmOddmcV81Z6LFplg7_WaRhOcCz5iChlW9lfNIaHTGMkl4eDlHulon0c0ScN15VfI0h5g5b6Na4o5OlMwtu2wKzJvM4_jfhohYL4lj_TnvMX0qvQ2yTeXhz8pXrs_C1Mw_j1bWWaXxmjbEcDoyBfGUHsH_k1nWDKpUxoGu-O-X-55AzwfyCxAXQcUL4dNg--ES9NfOF6RzknRYS2d33eegcqE_a2iNcWw2ItTH-Kk_B7zKTdXayy5EibT1iBf_4uPkZBajxerExmoKf8j4cwyLbsXwFmdtzScLNlHKFbe15Xtg_eHd01O-Ku3JMBiYTRRSQWp0NCdo3JBVYNCSF7OUi35UtxF5VYnIAK91E5dgOVaeJlUYk3256t-OJ0VNghJ4NK5oHYmYOKAKBABdwFUckKYAuhhECFzHZze_F4KpDx_qsKLbB0ZEFZZEF1buA1jIeR61YAuLVKABguDIC3DT0AbFEFAJpOYQFcW6ABAC0JoF-d2-Wt-1kJioc_t0ozDaAaFHEWTgJEUlj5ohKAlUe8Bc2TACBasV5nYKrdChOcpyzongYA3pT2ALBFFQAC0EkBEI9ovcBmi8rMCouige1_PrCLe5u-_Gr95xHskpOoC72s2rsnUhcISwCx7ZNwIzHMds3AF5WZiJyW_I6k9eWLKvmRndc3F5xEfRYDbFd-vqiMAx6-XH7rJKJYXNn15GeLykKAc_2bDj4NAEiSR_miCoBl5gYwyWn0EuLGpQuAL6oLATmlCBaXkj35LXUldhA-JfnFDWqvlwNqB3ItsmQEXwebwTKMZXcHuJ1Aw_MH7-kQh1EmIgCQuhVaj9MhBw_SEYIm0TXfXKaoiGtijoaQTENoSENi_uZDFASDiMppsUf3wohcWe_lmkOIHKiFCAKgR1eOmQsjl92-8EW1pLaVpxvRuK3H6TBwhr0YAU06Ux5lL6sh8ZzYS2cQDmhI2JBryDQHEYl7Vg26ssXp0b20b8gmKr5YvCdw4rsd_U8YMR5RHN2Kn2J4WRhtBrRDLEcrW5Z0uFsAun5WRqImXc9vX9p_ZPebcCjCSHHpN-YXZeOysF_YspxhD-YMaGlmQeLo0RX3VwtnS3Fc35ZDlQ9hvRhHhOjR2c4_kgtkUwHpTAUdLy5sRBq_FpZ6McB6dOV9TZfuhb1d9pbEFwdsBJ36dnWtQYeHK59lw0l0EOFFo0LmG3jQN1xTLypcpBcV5QixeFTIXkPQUG-AUH5dZFnD3ROy0CS6seip7puXjR7xP1j0NYSHpqkiY44hqi6gl0UkfnnXvyC0hrxdz4nF06sOXXFjurCzY9nYhwfHPlIMP2IIGjJlkQ606Sw4kgiJHh12tegQAZPoTrWIY1m6wnAwGC15SVHQIThMB4u7Kl06DJYtZRDLGryhdCUetrktR8aPkm7Mx8v74B7dSydq2UUAGmrqUXGdNXYRUNKNRY-Lp5CJX0Qs6RmyJgcONTnY0ct-2NXLfuVF-9Ke4SLZ5Rgauhwj-VUNxiOVrKCzrOFGuXrttxa1ufgNfK_U24ODLtRrbMtXw8VHdyIb3Ye8GNl6oztSjeQqOnu4ApiuOY3uNC9YsawBxoMNsGPqdRHlu8_f96HW8k35t5a0Vouf5V6-avzst_GXFV2--j9LkrJU
bytefield.clojure
(defattrs :bg-green {:fill "#a0ffa0"})
(defattrs :bg-yellow {:fill "#ffffa0"})
(defattrs :bg-pink {:fill "#ffb0a0"})
(defattrs :bg-cyan {:fill "#a0fafa"})
(defattrs :bg-purple {:fill "#e4b5f7"})
(defn draw-group-label-header
"Creates a small borderless box used to draw the textual label headers
used below the byte labels for remotedb message diagrams.
Arguments are the number of columns to span and the text of the
label."
[span label]
(draw-box (text label [:math {:font-size 12}]) {:span span
:borders #{}
:height 14}))
(defn draw-remotedb-header
"Generates the byte and field labels and standard header fields of a
request or response message for the remotedb database server with
the specified kind and args values."
[kind args]
(draw-column-headers)
(draw-group-label-header 5 "start")
(draw-group-label-header 5 "TxID")
(draw-group-label-header 3 "type")
(draw-group-label-header 2 "args")
(draw-group-label-header 1 "tags")
(next-row 18)
(draw-box 0x11 :bg-green)
(draw-box 0x872349ae [{:span 4} :bg-green])
(draw-box 0x11 :bg-yellow)
(draw-box (text "TxID" :math) [{:span 4} :bg-yellow])
(draw-box 0x10 :bg-pink)
(draw-box (hex-text kind 4 :bold) [{:span 2} :bg-pink])
(draw-box 0x0f :bg-cyan)
(draw-box (hex-text args 2 :bold) :bg-cyan)
(draw-box 0x14 :bg-purple)
(draw-box (text "0000000c" :hex [[:plain {:font-weight "light" :font-size 16}] " (12)"])
[{:span 4} :bg-purple])
(draw-box (hex-text 6 2 :bold) [:box-first :bg-purple])
(doseq [val [6 6 3 6 6 6 6 3]]
(draw-box (hex-text val 2 :bold) [:box-related :bg-purple]))
(doseq [val [0 0]]
(draw-box val [:box-related :bg-purple]))
(draw-box 0 [:box-last :bg-purple]))
(draw-remotedb-header 0x4702 9)
(draw-box 0x11)
(draw-box 0x2104 {:span 4})
(draw-box 0x11)
(draw-box 0 {:span 4})
(draw-box 0x11)
(draw-box (text "length" [:math] [:sub 1]) {:span 4})
(draw-box 0x14)
(draw-box (text "length" [:math] [:sub 1]) {:span 4})
(draw-gap "Cue and loop point bytes")
(draw-box nil :box-below)
(draw-box 0x11)
(draw-box 0x36 {:span 4})
(draw-box 0x11)
(draw-box (text "num" [:math] [:sub "hot"]) {:span 4})
(draw-box 0x11)
(draw-box (text "num" [:math] [:sub "cue"]) {:span 4})
(draw-box 0x11)
(draw-box (text "length" [:math] [:sub 2]) {:span 4})
(draw-box 0x14)
(draw-box (text "length" [:math] [:sub 2]) {:span 4})
(draw-gap "Unknown bytes" {:min-label-columns 6})
(draw-bottom)
GET https://kroki.io/bytefield/svg/eNqlVk1vozAQvfdXjOglHFIBoWmb22pXWu199xTlYMLwoRqb2qZJt8p_37EhkJA0_VhXqsF-88YzbzxkkmLGjFEaFkk-zRWigNdFVnIO3jULsowF3s6_mhzBXpBzuRlwWXYeV5fi8RCVBOdQ6xd27JNl7AxXo2qOAw7j5Da7szgHFJAqtqEAZFNPOUuQTwtkKaorAO-7QmZQAwNdMbJOpKIdjlrT4xYajSkY6RjAFAgGt6ZhHBwPtDyaiByQlmQLS14MthgNmVSgsJIG0wQqYmY5QlqyXLFK35DtN5U3FQpDp1DozEVTJahAZrCWvKmEtmfQNSWDibQ_h92nZ2Jwnm48elo6lHtf0evEhW4jmTiL9tjLRcVMYRMmhZnq8i9CGO1WPq04cxp2voJPj0WbPw3Xr7uvmBdY5oUBCOOdfyzfPoMH2v1Egcqp16fcpicrkaf75NsFbeg_U2knVwvQNnuMaBQ-NagpmVYlXUuhsVfJSme5e_lSZljCCKFRPRPVpjQFcViMrnFdEnUKjyU5tY6ZyjU8M078rTjtDq0O2rQCd1Fpv18_LVe4BY9CUcZ7D_V7--vHZdAMPPNS42VQBJ4962VQSExsDxJUY1NFdyC8J_UOyy_YhuHQR_zR3v1dNIsfGMKyq8B4N4BX_nmmttX4Z6q8TQC4KvfHnK3ZKWnQ96URZYHbqaN16sW2xnk60Ea73vCENMj6NvYWqauRaE96Hk2niw863Si1XcxBO9aevUVbWC4XNWel2N_yTXuzPG4nwhxc_fluBR5Mwsj3XATDGKWudb96K5T5EMeS5u00KxVdrBNLqfEJlnQvYDknoxnMu7_ZauXcnyO38BG9Qk63Pz1ycOIhgOCE1W28Q9HnvkNyNgrFtacznYnUiu-CCB56wL5q_aP3KAxi6PPrX8J-DNbVAUeRm8LrmvyKZt0kEA7d_YQlPjrp52lyVtOHtGm7L5eyhlqWwriObBvDAbkoObh0uk_lxaC3s_mn4qZv5vi0XiGNdyHwj9KsGxzRfFWG6LIM_8PiVPgjHoXciC71BKpK0fXr_S-J-YFfY2TlX_0D9xYXHQ==
seqdiag.diag
seqdiag {
browser -> webserver [label = "GET /index.html"];
browser <-- webserver;
browser -> webserver [label = "POST /blog/comment"];
webserver -> database [label = "INSERT comment"];
webserver <-- database;
browser <-- webserver;
}
GET https://kroki.io/seqdiag/svg/eNorTi1MyUxMV6jmUlBIKsovL04tUlDQtVMoT00CMsuAvOicxKTUHAVbBSV31xAF_cy8lNQKvYyS3BylWGskTTa6ughN1kSYFuAfDDQuKSc_XT85Pzc3Na8EYiBCLUhnSmJJYlJicSqSRk-_YNegEAUcmkDugGnC475aAIB9ULI=
actdiag.diag
actdiag {
write -> convert -> image
lane user {
label = "User"
write [label = "Writing reST"];
image [label = "Get diagram IMAGE"];
}
lane actdiag {
convert [label = "Convert reST to Image"];
}
}
GET https://kroki.io/actdiag/svg/eNpLTC5JyUxMV6jmUlAoL8osSVXQtVNIzs8rSy0qATEzcxPTU7mAkjmJeakKpcWpRWClIH5Sao6CrYJSKFBMCSwE0R8NlwkH8jPz0hWKUoNDlGKtwWrA5iGpcU8tUQA5oCgxV8HT19HdFaKwFmZjIpL7FOAOQ-h3hoqA7FAoyVfwBJkPM6MWADfrQv8=
nwdiag.diag
nwdiag {
network dmz {
address = "210.x.x.x/24"
web01 [address = "210.x.x.1"];
web02 [address = "210.x.x.2"];
}
network internal {
address = "172.x.x.x/24";
web01 [address = "172.x.x.1"];
web02 [address = "172.x.x.2"];
db01;
db02;
}
}
GET https://kroki.io/nwdiag/svg/eNrLK0_JTExXqOZSUMhLLSnPL8pWSMmtAvMVFBJTUopSi4sVbBWUjAwN9CpAUN_IRIkLLFuemmRgqBCNRZGhUqw1XIkRViVGECW1SPZm5pWkFuUl5mBabmhuhLDcGpftMFV4bIcpMYIpSQEaAmcZQVxUCwBCbklM
packetdiag.diag
packetdiag {
colwidth = 32;
node_height = 72;
0-15: Source Port;
16-31: Destination Port;
32-63: Sequence Number;
64-95: Acknowledgment Number;
96-99: Data Offset;
100-103: Reserved;
104: CWR [rotate = 270];
105: ECE [rotate = 270];
106: URG [rotate = 270];
107: ACK [rotate = 270];
108: PSH [rotate = 270];
109: RST [rotate = 270];
110: SYN [rotate = 270];
111: FIN [rotate = 270];
112-127: Window;
128-143: Checksum;
144-159: Urgent Pointer;
160-191: (Options and Padding);
192-223: data [colheight = 3];
}
GET https://kroki.io/packetdiag/svg/eNptkstOwzAQRfd8xSxhYSl2QtoEsUChPITURilVhSqETDxNrLZ2SRy6QPw7k0SqWHh7zzyu7_goyx06pWUFPxcApd2ftHI13EIobkgwVuFHjbqqHWkT0kgMGL9OYWm7pkTIbeP6Sh6zkKdwj63TRjptzRmFgsUhNeBXh4Za5t3hE5uexBFLaNRduTP2tEdVHdC4fzyJWZLQUOkkLLbbFsdVATkIaGKBLTbfqEYxSiFbF7BprJMOya6YBO8joh2zbOZFcQqr4tGLJuQse_GiaQr58smLyG-xfPUhHlAIb3Mvougenv1IMC7IylobZU-DJKaMR_T-rMZy13aHQYwiOgstXzVVH2JutXFjijymvBLacLk49odpQRoFuVRKm-pqqEgEE4Imqj7pDX2D881DcvH7B-DBllc=
rackdiag.diag
rackdiag {
16U;
1: UPS [2U];
3: DB Server;
4: Web Server;
5: Web Server;
6: Web Server;
7: Load Balancer;
8: L3 Switch;
}
GET https://kroki.io/rackdiag/svg/eNorSkzOTslMTFeo5lJQMDQLtQZRVgqhAcEK0UahsSCusZWCi5NCcGpRWWoRiG9ipRCemoQkYIouYIYuYG6l4JOfmKLglJiTmJcMEbMAihkrBJdnliRnWHPVAgDhXSWB
c4-context.plantuml
@startuml
!include C4_Context.puml
skinparam backgroundColor transparent
LAYOUT_WITH_LEGEND()
title System Context diagram for Internet Banking System
Person(customer, "Personal Banking Customer", "A customer of the bank, with personal bank accounts.")
System(banking_system, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.")
System_Ext(mail_system, "E-mail system", "The internal Microsoft Exchange e-mail system.")
System_Ext(mainframe, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
Rel(customer, banking_system, "Uses")
Rel_Back(customer, mail_system, "Sends e-mails to")
Rel_Neighbor(banking_system, mail_system, "Sends e-mails", "SMTP")
Rel(banking_system, mainframe, "Uses")
@enduml
GET https://kroki.io/c4plantuml/svg/eNp9U8FOwkAQvfcrRk6QoCc_QMFGTQCNQIynZtgOZcN2l-xOBf_eadkWjOitO_PmzXtvt3eB0XNVmuRKW2WqnGB8m42dZTrwza5uhK22O_RYwgrVtvCusvnYGeeBPdogLbKcJJP7j5flInt_Xjxlk_QxnT30B0nCmg3B_CswlRBpIddY1Hxr4XiWkrfEMEIri4qITZJX8sHZvqoCu5L8EHrHCpoOOo69njTvoUWCWwNvSNTa7RD2mjewayfrGqBS4oHDTW-QHLf1V0fGLDRHoftDVrPJGLcP3boA7OBT0x60FUMlsnYWcOUqrmVo_3PpENDmUOKWYIdfJUUdUUiWHrhfojYnJel1fYbQ7V-IN93IE0NTrbwLbs2QHtQGbUFA5wMnjy21XUv0JDzT9vuCxzk7TwHQmDZNJQWIMV1w2qUxPHPavA9UNUxOxKpx-kbm7FZ_Jb8MFAQmqGwk7-0M-jOXOdk8RLP1HcSZGelis3L-15X-M904ni5ejxSXJrvQoro7Ga__jW_dFiXJ
c4-container.plantuml
@startuml
!include C4_Container.puml
skinparam backgroundColor transparent
LAYOUT_TOP_DOWN()
LAYOUT_WITH_LEGEND()
title Container diagram for Internet Banking System
Person(customer, Customer, "A customer of the bank, with personal bank accounts")
System_Boundary(c1, "Internet Banking") {
Container(web_app, "Web Application", "Java, Spring MVC", "Delivers the static content and the Internet banking SPA")
Container(spa, "Single-Page App", "JavaScript, Angular", "Provides all the Internet banking functionality to cutomers via their web browser")
Container(mobile_app, "Mobile App", "C#, Xamarin", "Provides a limited subset of the Internet banking functionality to customers via their mobile device")
ContainerDb(database, "Database", "SQL Database", "Stores user registraion information, hased auth credentials, access logs, etc.")
Container(backend_api, "API Application", "Java, Docker Container", "Provides Internet banking functionality via API")
}
System_Ext(email_system, "E-Mail System", "The internal Microsoft Exchange system")
System_Ext(banking_system, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
Rel(customer, web_app, "Uses", "HTTPS")
Rel(customer, spa, "Uses", "HTTPS")
Rel(customer, mobile_app, "Uses")
Rel_Neighbor(web_app, spa, "Delivers")
Rel(spa, backend_api, "Uses", "async, JSON/HTTPS")
Rel(mobile_app, backend_api, "Uses", "async, JSON/HTTPS")
Rel_Back_Neighbor(database, backend_api, "Reads from and writes to", "sync, JDBC")
Rel_Back(customer, email_system, "Sends e-mails to")
Rel_Back(email_system, backend_api, "Sends e-mails using", "sync, SMTP")
Rel_Neighbor(backend_api, banking_system, "Uses", "sync/async, XML/HTTPS")
@enduml
GET https://kroki.io/c4plantuml/svg/eNqVVdtu2kAQfecrpvSFSk6iSv2AEEBNIkhoTJr0yRqvB1hlvWvtriGo6r931tgGk6gXnuzxzDlnzs4sl86j9WWueh-kFqrMCEZfkpHRHqUme16ET-5F6gIt5pCieFlZU-psZJSx4C1qx59I-15vOvxx_7hIFvfzZHz_dDf41ESebhbXyXTydXI35mDPS6-YpuGATOIqgC8Z8EZ7spo8XKFm1hXEO-cp7_XmZJ3RA1E6b3KyEYzap_4QmjCYJfg1sU79EsFW-jUUVSGqKgYoBKv3rs869tDJVWgH7W4gPjPWqYD-J_jZA_61egdbShMsCk5-ohSGRaGkQC-N7nPoFjcYQVzYIH72fRRiY1JywzIqaWy4lwIEw7FrgDqrwi1v2jQ-H7LILjNbzXAxf1Z0NscVBfaGNRZWFj6CoV6VCm0Iz63ZyIwcoFLvsyxLLYJ0VNLvwBt2sjLSwUZiKJEWuF9Irdk6sm8U5SaVimo7ZtVLo2n0MYJnzJGd6GoBJXPpKQNXpo611Gf2L9rcG3F7AZDRRgo6lTdOBxl6TNFROIb6MaiJv02h8-6NZW0l9wiWVtLxZDM1SM1TmVenG8GakzPAkqdKWMr4-CQqF4WhIudAmRW_kBfnb2wKe0M6Y59kmNf5zftjMzacZg91Hd_-4k-whIGZ-lc72pNXP6AcpUpcFWC4ydmM3-u1CvgLtl5W0LwjMymscWbpYfIq1qh5wvaVDHuEWSs4oDKmXvIO08neHlkbRrA-acGBtosjhwFTU_rDMUftukb7mwarfg8m9x5IHV0Jh8V8dOQC9_ViMY85sZu3X6M_53QGu0rd0yV3JFfr1BxdA3u4ZslrpCrYPfaGEN1Oiwhu4_u7i2PyY8r_qkyuOPsg7DDyXZQHwszB0pq8unW2lpeQ7yQTkGvg8dWo6TNgHvlxMkYxwzqgsxCtMA5CTiauq6FbV7pww7b08Wwxr4HaZjrlb-auMSbUX9TuPM-mrTmXXBr-wX4DrfBY3g==
c4-component.plantuml
@startuml
!include C4_Component.puml
skinparam backgroundColor transparent
LAYOUT_WITH_LEGEND()
title Component diagram for Internet Banking System - API Application
Container(spa, "Single Page Application", "javascript and angular", "Provides all the internet banking functionality to customers via their web browser.")
Container(ma, "Mobile App", "Xamarin", "Provides a limited subset ot the internet banking functionality to customers via their mobile mobile device.")
ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
System_Ext(mbs, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
Container_Boundary(api, "API Application") {
Component(sign, "Sign In Controller", "MVC Rest Controlle", "Allows users to sign in to the internet banking system")
Component(accounts, "Accounts Summary Controller", "MVC Rest Controlle", "Provides customers with a summary of their bank accounts")
Component(security, "Security Component", "Spring Bean", "Provides functionality related to singing in, changing passwords, etc.")
Component(mbsfacade, "Mainframe Banking System Facade", "Spring Bean", "A facade onto the mainframe banking system.")
Rel(sign, security, "Uses")
Rel(accounts, mbsfacade, "Uses")
Rel(security, db, "Read & write to", "JDBC")
Rel(mbsfacade, mbs, "Uses", "XML/HTTPS")
}
Rel(spa, sign, "Uses", "JSON/HTTPS")
Rel(spa, accounts, "Uses", "JSON/HTTPS")
Rel(ma, sign, "Uses", "JSON/HTTPS")
Rel(ma, accounts, "Uses", "JSON/HTTPS")
@enduml
GET https://kroki.io/c4plantuml/svg/eNqlVduO2jAQfc9XTHmoQKLbl35AuWy7u9oLWthentDEGYK7vkS2A0VV_71jB0igq2qlIiEce3zm-Jzj8NEHdKHWKnsjjVB1QTD5sJxYXVlDJlxUcck_S1OhQw05iufS2doUE6usg-DQeF7i0iy7HX1_eFosv14vrpa3l58v76f9QZYFGRSDHhChkFhGqBVvvzaBnKEAYzTco4T5zgfS8A5Gs2sYVZWSAoO0Jssm1gSUhlyf-w2hN-dyxp1hSd3CHi_9wA164WQVAE3B37JW6OLKzNmNLMgDKgVhTSAPBPI9gVVtRMRBJcMOggVR-2A1OQ8biXGPdLClHHJnt57cRW_QoaYjszubS5VIxZbfUKOT5rQ7KKlloAJ8nXvubsN_sNFNv_1PQRsp6ITWNO8XOfefYsAcPUUuj6SwQYbDNMzFmjTG1XmwjnnWfEBwVErPPsdqZsi26TQewhr9ms-ANfMwYW8ACEdFfETlh4BCkPegbMkPFETk1Xi8vPwZ-jr3UTBmueJI0FkMOkyiX3aVRBI8cRSowwcwt3VoFUrNOamBRymmmKRsebQCLccx0eh2fawkNz0LX28AvzLgzzHEfS9Lk0JYGg4xRCRnlaKUsrsvE3gkH9rpODtSihOTNPXRygjB_OPwRe99o8HgrHN7qN5oP4R5rTlku1fROIawjdJWhjVn0u9RGp05WJHJUcS_iHgSteNYRhn2w3Y1WVe5eI4x4Wn6T0PtYhA5RUkRUzamDkGssXmo0PutdUXr2ykNjtAKBRb0jyDBp1TxAqkRNJuBJWp80EeMUyNSYmJrvjl7-zsKPHk6KBTXW5O69M6K2u3pdj4SFvAWtjxFrEZkdzMdTzobOljNxUmA8R1zd_v-arGYzbn4d5Yl8PiS3Kf0UHYzf7g_1h2LOoF6sTBV6leg6VeAfSRTxH-UP5hnL2o=
d2.d2
style: {
fill: transparent
}
Client -> Kroki: request
Kroki -> Client: svg
GET https://kroki.io/d2/svg/eNorLqnMSbVSqOZSUEjLzMmxUigpSswrLkgsSs0r4arl4nLOyQSyFHTtFLyL8rMzrRSKUgtLU4tLuMBckDhEhZVCcVk6AO29Gco=
dbml.dbml
Table users {
id integer [primary key]
name varchar
}
Table posts {
id integer [primary key]
user_id integer
title varchar
}
Ref: posts.user_id > users.id
GET https://kroki.io/dbml/svg/eNoLSUzKSVUoLU4tKlao5lJQyExRyMwrSU1PLVKILijKzE0sqlTITq2MBUrlJeamKpQlFiVnJBZx1XJxhYC1FuQXlxDUCjI_HiEPFCnJLMlBMS0oNc0KYpgeTLUdxF16mSkAdqw42A==
conjugate.ascii
+-------------+
| |
| Exponential |
| |
+-------------+
|
lambda |
v
+-------------+ +-------------+ +-------------+
| | tau | | lambda | |
| Lognormal |---------->| Gamma |<----------| Poisson |
| | | |---+ | |
+-------------+ +-------------+ | +-------------+
| ^ ^ | beta
| tau | | |
| tau | +---------+
| +-------------+
+------------------>| |
| Normal |
| |----+
+-------------+ |
^ | mu
| |
+-------+
GET https://kroki.io/ditaa/svg/eNqVU80OwiAMvvMU3IlvYLwZL8b4BCZdXMySAcYx46EPL24ijL_Vcir9Wr5-LZyXTGxCE6wI5Lj0qsj9665Vq0wH_QqSWpPOk1CsB9lcoQr52pNFD5cpVchi0rSBMSeA55ZIY_2jvin9kFZTjr78bkIeQEqYkFsfQn7W3TBo5WsUxI8iQT8xj3_0wOrwsKj6xR7PrGkNVFJmKTGI4Q_tZE73TpDo5Ikvb4MhEH_Hx05ukPTfsbb4mckQNnzW2z0oR1oGEhrNUBPsDVjpvmQ=
erd.erd
[Person]
*name
height
weight
+birth_location_id
[Location]
*id
city
state
country
Person *--1 Location
GET https://kroki.io/erd/svg/eNqLDkgtKs7Pi-XSykvMTeXKSM1MzyjhKodQ2kmZRSUZ8Tn5yYklmfl58ZkpXFzRPlAeUAuQn5xZUslVXJJYksqVnF-aV1JUycUFMVJBS1fXUAGmGgCFAiQX
excalidraw.json
{
"type": "excalidraw",
"version": 2,
"source": "https://excalidraw.com",
"elements": [
{
"type": "rectangle",
"version": 175,
"versionNonce": 279344008,
"isDeleted": false,
"id": "2ZYh24ed28FJ0yE-S3YNY",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 580,
"y": 140,
"strokeColor": "#000000",
"backgroundColor": "#15aabf",
"width": 80,
"height": 19.999999999999996,
"seed": 521916552,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElementIds": [
"Be1y2yzhV3Zd4nwCro__8"
]
},
{
"type": "rectangle",
"version": 180,
"versionNonce": 164784376,
"isDeleted": false,
"id": "bO0OVt6m7LowYpq22ePCA",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 660,
"y": 140,
"strokeColor": "#000000",
"backgroundColor": "#4c6ef5",
"width": 120,
"height": 19.999999999999996,
"seed": 1303206904,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElementIds": [
"KaCO9-QjUenSyCuuanoTo"
]
},
{
"type": "rectangle",
"version": 183,
"versionNonce": 27181704,
"isDeleted": false,
"id": "jz0Huq9-s6pNxDw0RqHcR",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 780,
"y": 140,
"strokeColor": "#000000",
"backgroundColor": "#fab005",
"width": 180,
"height": 19.999999999999996,
"seed": 861962120,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElementIds": [
"74ifmqmu0vN0NK0_0FwPm"
]
},
{
"type": "rectangle",
"version": 192,
"versionNonce": 2123008504,
"isDeleted": false,
"id": "UnmNTmwJtm6moubcGtSgB",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 960,
"y": 140,
"strokeColor": "#000000",
"backgroundColor": "#fa5252",
"width": 80,
"height": 19.999999999999996,
"seed": 277814520,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElementIds": [
"1v60NED2criGG-wo9-oQL"
]
},
{
"type": "rectangle",
"version": 202,
"versionNonce": 1823814024,
"isDeleted": false,
"id": "of76J4WOJHnHi0L61Vst_",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1040,
"y": 140,
"strokeColor": "#000000",
"backgroundColor": "#be4bdb",
"width": 180,
"height": 19.999999999999996,
"seed": 1496796808,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElementIds": [
"jjuPzyRneMv3f65lps_6a"
]
},
{
"type": "rectangle",
"version": 193,
"versionNonce": 1234602744,
"isDeleted": false,
"id": "SlvbjeV-9lXbcrlKib-hj",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1220,
"y": 140,
"strokeColor": "#000000",
"backgroundColor": "#868e96",
"width": 60,
"height": 19.999999999999996,
"seed": 1938865656,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElementIds": [
"5QQzhw_uqk_rBaW2wMriT"
]
},
{
"type": "text",
"version": 81,
"versionNonce": 1188901129,
"isDeleted": false,
"id": "vrdt3JfbD2Xwz4K4TWScI",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 840,
"y": -60,
"strokeColor": "#000000",
"backgroundColor": "#868e96",
"width": 190,
"height": 45,
"seed": 1499217288,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElementIds": [],
"fontSize": 36,
"fontFamily": 1,
"text": "JavaScript",
"baseline": 32,
"textAlign": "left",
"verticalAlign": "top"
},
{
"type": "arrow",
"version": 343,
"versionNonce": 1369065096,
"isDeleted": false,
"id": "Be1y2yzhV3Zd4nwCro__8",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 597.5075333823274,
"y": 299,
"strokeColor": "#000000",
"backgroundColor": "#868e96",
"width": 40,
"height": 139,
"seed": 666255096,
"groupIds": [],
"strokeSharpness": "round",
"boundElementIds": [],
"startBinding": {
"focus": -0.41953339688473495,
"gap": 1,
"elementId": "UxgtvUBaIPnDWJZ9kUQH8"
},
"endBinding": {
"focus": -0.11111111111111113,
"gap": 1,
"elementId": "2ZYh24ed28FJ0yE-S3YNY"
},
"points": [
[
0,
0
],
[
-17.507533382327438,
-59
],
[
22.492466617672562,
-139
]
],
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": "arrow"
},
{
"type": "text",
"version": 81,
"versionNonce": 690339976,
"isDeleted": false,
"id": "UxgtvUBaIPnDWJZ9kUQH8",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 580,
"y": 300,
"strokeColor": "#000000",
"backgroundColor": "#868e96",
"width": 94,
"height": 45,
"seed": 84626568,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElementIds": [
"Be1y2yzhV3Zd4nwCro__8"
],
"fontSize": 36,
"fontFamily": 1,
"text": "Fetch",
"baseline": 32,
"textAlign": "left",
"verticalAlign": "top"
},
{
"type": "rectangle",
"version": 60,
"versionNonce": 897215480,
"isDeleted": false,
"id": "-Lq0agjWQ31TR_Av5Z4HW",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 520,
"y": -60,
"strokeColor": "#000000",
"backgroundColor": "transparent",
"width": 820,
"height": 540,
"seed": 495165432,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElementIds": [
"jjuPzyRneMv3f65lps_6a"
]
},
{
"type": "arrow",
"version": 537,
"versionNonce": 1626949112,
"isDeleted": false,
"id": "KaCO9-QjUenSyCuuanoTo",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 721.0588599991052,
"y": 60.17790458606555,
"strokeColor": "#000000",
"backgroundColor": "#868e96",
"width": 1.0588599991051524,
"height": 79.82209541393445,
"seed": 637565832,
"groupIds": [],
"strokeSharpness": "round",
"boundElementIds": [],
"startBinding": null,
"endBinding": {
"focus": 0,
"gap": 1,
"elementId": "bO0OVt6m7LowYpq22ePCA"
},
"points": [
[
0,
0
],
[
-1.0588599991051524,
39.82209541393445
],
[
-1.0588599991051524,
79.82209541393445
]
],
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": "arrow"
},
{
"type": "text",
"version": 112,
"versionNonce": 358083143,
"isDeleted": false,
"id": "4hEOdlcwK6AHyVhjc-MXS",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 660,
"y": 20,
"strokeColor": "#000000",
"backgroundColor": "#868e96",
"width": 103,
"height": 45,
"seed": 352116984,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElementIds": [],
"fontSize": 36,
"fontFamily": 1,
"text": "Parse",
"baseline": 32,
"textAlign": "left",
"verticalAlign": "top"
},
{
"type": "arrow",
"version": 534,
"versionNonce": 983577992,
"isDeleted": false,
"id": "74ifmqmu0vN0NK0_0FwPm",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 841.6574209245741,
"y": 219,
"strokeColor": "#000000",
"backgroundColor": "#868e96",
"width": 43.15128973100309,
"height": 59.174989629909305,
"seed": 1853344392,
"groupIds": [],
"strokeSharpness": "round",
"boundElementIds": [],
"startBinding": {
"focus": 0.09211398277003865,
"gap": 1,
"elementId": "K4so-arfr0JX0NJx8vd7T"
},
"endBinding": {
"focus": -0.2163077865936296,
"gap": 1,
"elementId": "jz0Huq9-s6pNxDw0RqHcR"
},
"points": [
[
0,
0
],
[
-1.6574209245741258,
1
],
[
41.493868806428964,
-58.174989629909305
]
],
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": "arrow"
},
{
"type": "text",
"version": 118,
"versionNonce": 1185705864,
"isDeleted": false,
"id": "K4so-arfr0JX0NJx8vd7T",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 640,
"y": 220,
"strokeColor": "#000000",
"backgroundColor": "#868e96",
"width": 366,
"height": 45,
"seed": 765854200,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElementIds": [
"74ifmqmu0vN0NK0_0FwPm"
],
"fontSize": 36,
"fontFamily": 1,
"text": "Compile and Optimize",
"baseline": 32,
"textAlign": "left",
"verticalAlign": "top"
},
{
"type": "arrow",
"version": 791,
"versionNonce": 1724761848,
"isDeleted": false,
"id": "1v60NED2criGG-wo9-oQL",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 960,
"y": 320,
"strokeColor": "#000000",
"backgroundColor": "#868e96",
"width": 80,
"height": 160,
"seed": 1764571528,
"groupIds": [],
"strokeSharpness": "round",
"boundElementIds": [],
"startBinding": {
"focus": -0.1637630662020906,
"gap": 1,
"elementId": "dviXudWNxiHYQMZfqHWsH"
},
"endBinding": {
"focus": 0.07692307692307691,
"gap": 1,
"elementId": "UnmNTmwJtm6moubcGtSgB"
},
"points": [
[
0,
0
],
[
80,
-40
],
[
40,
-160
]
],
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": "arrow"
},
{
"type": "text",
"version": 194,
"versionNonce": 473574648,
"isDeleted": false,
"id": "dviXudWNxiHYQMZfqHWsH",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 720,
"y": 320,
"strokeColor": "#000000",
"backgroundColor": "#868e96",
"width": 484,
"height": 45,
"seed": 1988297464,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElementIds": [
"1v60NED2criGG-wo9-oQL"
],
"fontSize": 36,
"fontFamily": 1,
"text": "Re-optimize and Deoptimize",
"baseline": 32,
"textAlign": "left",
"verticalAlign": "top"
},
{
"type": "arrow",
"version": 708,
"versionNonce": 185615496,
"isDeleted": false,
"id": "jjuPzyRneMv3f65lps_6a",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1140,
"y": 80,
"strokeColor": "#000000",
"backgroundColor": "#868e96",
"width": 20,
"height": 60,
"seed": 1767688328,
"groupIds": [],
"strokeSharpness": "round",
"boundElementIds": [],
"startBinding": {
"focus": -0.3021784319542362,
"gap": 14.800415739789742,
"elementId": "qhkjvI1VmWZdnKvU5QKZK"
},
"endBinding": {
"focus": 0.15789473684210528,
"gap": 1,
"elementId": "of76J4WOJHnHi0L61Vst_"
},
"points": [
[
0,
0
],
[
-20,
20
],
[
0,
60
]
],
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": "arrow"
},
{
"type": "text",
"version": 213,
"versionNonce": 2105884296,
"isDeleted": false,
"id": "qhkjvI1VmWZdnKvU5QKZK",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1080,
"y": 20.19958426021026,
"strokeColor": "#000000",
"backgroundColor": "#868e96",
"width": 139,
"height": 45,
"seed": 2115494904,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElementIds": [
"jjuPzyRneMv3f65lps_6a"
],
"fontSize": 36,
"fontFamily": 1,
"text": "Execute",
"baseline": 32,
"textAlign": "left",
"verticalAlign": "top"
},
{
"type": "arrow",
"version": 707,
"versionNonce": 543827960,
"isDeleted": false,
"id": "5QQzhw_uqk_rBaW2wMriT",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1220,
"y": 240,
"strokeColor": "#000000",
"backgroundColor": "#868e96",
"width": 20,
"height": 80,
"seed": 2059564936,
"groupIds": [],
"strokeSharpness": "round",
"boundElementIds": [],
"startBinding": {
"focus": 0.7391304347826086,
"gap": 2,
"elementId": "C6fyzTg2FHAmrRYfC_THm"
},
"endBinding": {
"focus": 0.3333333333333333,
"gap": 1,
"elementId": "SlvbjeV-9lXbcrlKib-hj"
},
"points": [
[
0,
0
],
[
20,
-40
],
[
20,
-80
]
],
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": "arrow"
},
{
"type": "text",
"version": 227,
"versionNonce": 2002374136,
"isDeleted": false,
"id": "C6fyzTg2FHAmrRYfC_THm",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1160,
"y": 220,
"strokeColor": "#000000",
"backgroundColor": "#868e96",
"width": 58,
"height": 45,
"seed": 1651025144,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElementIds": [
"5QQzhw_uqk_rBaW2wMriT"
],
"fontSize": 36,
"fontFamily": 1,
"text": "GC",
"baseline": 32,
"textAlign": "left",
"verticalAlign": "top"
}
],
"appState": {
"viewBackgroundColor": "#ffffff",
"gridSize": 20
}
}
GET https://kroki.io/excalidraw/svg/eNrVm1tT4koXhu_nV1h8twO7z4e58zioM3hARd01ZQUSIBoSTAKIU_Pfv05kk4OJBiVjjFVi0t3pTudhvWutbn9_2dio-fOxUfu2UTMeeppl6q42q30Nrk8N1zMdWxWh8NxzJm4vrDn0_bH37Z9_ohaNnjN6amVYxsiwfU_V-1edb2z8Dn_H-nGNnq_ZA8sIG4RFUVeQ0_TVlmOH3SIuMSEAiGUF09tR3fmGrkr7muUZUUlwqYaur4aIGDoSewdgvltv46vWVdRr37Sstj-3np5J6w0nbmxMnu86d0bH1P1hMK7U9WU7z1EzELVynclgaBuel2jjjLWe6c-DawAsrz5NwreN6MqDOqMiOg9bEJDqe9uxHDfo-38gPKLeu1rvbqCGYOtRHUg1rduP6swWTxTrZmiYg6Ef9CUbMnGwqGsjnGaKoISMUrQsCPob7-vhC_-VnqWh5o4Xs1HzgpPYWINh7j7Rsmi-KFKFWwaco_nj8AJf68SebbvOzY2oLcp_hZ9_vr4Fr9hTp_CCjHBBMGeF8eoegaMLn434D2d2Nb5HyDje3qw6XoytFy_SY0afPscLojfxBTHACDAJSLmAHWrbR7J-cntu2O359mSi2c6ZsxbAcL79ggLy2IO9xtftI2hO7mXdY-PWw84MnN43e6dV54uv2Xz1tS4AWXy9zX4JBiVDcThLwYsTsz-6H03AtAVah-AG7M2OR-vAS6JcvCDCShzpCoCd26PW2Wh24I_YyJl0e9_99mCr6oBJtm7AKKJoXfqIOBeQ0LL5glMGWrs7qOea37_XZ46sOyc_1sAXArl8QYGwejSAivPl9Dk7IJ2jg6bdNMEPBi88_6bqfEFA1gtY1yBdvbs2CwaJZFwyEfODS0Hs9nZy_Dg_tY2fU9xn1Bp7N0xbiwnLVUhlwQgDiJPiiLWtaffWuKhL67Lbc61Ds1sf3lYeMYTWi5hgwpDsOWLsbYRJLASj6qdcwujJyeNwdjO5v7txt7QOmv10zbNihPnGg58Fl4C5bEEhJIAQycJsTV3dxwf97g66nD2SQ3LWaff2q86WSFmvOisHLSgz2CI0w1pJBDkSpVirqHnfsf22-RjMB2aJq3vayLTmifkM6VEdHGhTra0kdOzH58AzLNMOb4QSLTYtcxAwVrOMfhI-3-xp1rLYd8a1F-HVXNeZZdGLSb5pxComYhTI4uFpdgxd9eyH5A0KOMUYK39DSUECZiRlKTCTLDuJZRpmxhiiiXdQmOVwIAVZ9nzN9bdMWzftgSr5HVnMvtObBJXroEGgDCZJOQKCcEzk8psXjEobx19AlJXbf3L7Hwb-9HxL2z-2dzoH1_Lu_KS5TK78WQ7DsPXXBgFTBy4-iOzc3LNBjB0znkwMjuivjQie8GT596-vmbXrMAUXFvH2dSpfuwNCDSIRUSBAzjiiDCVuoJiJ7vAldaeapXn-tjMamb760h4HD6aey55YVvLNbwbmYWhoerpUvZB42cKOrFknlZlRVMkV0mDZOH2yLCsG5cikJEVUUhCGlLslPjKp-j4p3TP83vCvquiLQQbLTfMKyRGkJPb6X-O7_uMeaIPbzgmGZ6c3m1N6TZqdyvON1uoG-q5me2PNVVhlZEqyUr00HtI8Ua5ECjJKMKps4JrrmVHM89cNEJNEqsiiMFHZyeeqJ3YRbAAqBA1iRghiK0Dz8AvXgJxLQKhgyk-ltJygIzECSFGGdeWyIVR8LSlRaozJc2PLMFexrXgLhu_w4tJK_qJrBYr7UdmLUGX7UbnvIThw-g288348_35V9rHiFiFlM7ByPwSGsXDvNZNBhrtHutWbHbLN5vxieNur_7xsf7a1RlRSKgLgIk4WpghCJgWpYCbiWHM9oxpJCIpJHrZSYKqMvCyudNnrYJVPocEGo5wok4OI-oRJiGFJOQjcgBQi5Z9iNUQMZIZPJZXIEikkQ1ICicHzdJtQwS0hWKKPTlGAhpo9qAy2QJyr5xFshQzFIfGcuub2XXBwCVoHD2Kq87M3ZSgQZBhwrnqXWM0aKz6G7NX30oU1AR6iiQQFfK29ApdINdVCAEYUSowk8xsizc9nUVLxQlqfcuU8sOJLRtlwVV1KU2l9VJKWYsaKaClXDjRVnH7oNor3Sa5ie2xaxoZm6xtHY98cBTeohAJzmb-KxRHhDApSfBNk9laBT7bJA5eEe-YSPHuWuYCcKXus4hJRgcy_UjSuRI0xBJRQgBUkTZ-alxO903owm1cnP6_7982O11xdVpW0cyYRjn7DFRYfMvcclSurIlG9Tl5tQJINFBGfRChlru9OuPLdCVvBcGTTUvks1d8xHEQUSuxDKQSSwbx_5H6w9wnlqVF3FvoYiuWO4VRLLkG-dygog5SssGienTyu-n4imPIORTnQZ-X5M8WSqwgEV0IsMUAw2NYPpXJXcXy59j-hIg0BAIGUY8lV8E1QnnLdD-9up_vwYtS51u3D6Tk9Obw-fIt6qr6EVPaYCYKCRLoorp7ZOypLDkpRoj56tUGi-meRTgTzN-7DIDtN0ApmJJuVyu98Fel8bQNKSdWjM_U1AoiVk77FsoiUIhhYclL6f4a8vHz4PindfTB6E78yupm7pkkJFojHg7DXgM_ey_nZ9uEi8veEUzwTTgSopIxIzD4-eavUEGJAMOFCffnF8yAzVya3WX_-eDZAe83NkXt61d--OWuO3iKTOHUUV8nsTeHlqiRaNcZMNRCfRSdRrtVAACDMCcTFdTIblsq72-zvJGOj7P-LMSajSpspJOQjt-u_Txi_b5ejiV8WI6tp43Hb13xjaWxqU9OYbWX9P1h4LO6uZtLUF08TOr5_vvz5PwWZbjk=
goat.goat
+-------+ +-------+
| Alice |---->| Bob |
+-------+ +-------+
GET https://kroki.io/goat/svg/eNrT1oUAbQUQ0IbxuGoUHHMyk1MVakBcuxoFBaf8JAWFGi5t7OoBAb0OLA==
oo-graph.diag
digraph "unix" {
graph [ fontname = "Helvetica-Oblique",
bgcolor = "transparent",
fontsize = 36,
label = "\n\n\n\nObject Oriented Graphs\nStephen North, 3/19/93",
size = "6,6" ];
node [ shape = polygon,
sides = 4,
distortion = "0.0",
orientation = "0.0",
skew = "0.0",
color = white,
style = filled,
fontname = "Helvetica-Outline" ];
"5th Edition" [sides=9, distortion="0.936354", orientation=28, skew="-0.126818", color=salmon2];
"6th Edition" [sides=5, distortion="0.238792", orientation=11, skew="0.995935", color=deepskyblue];
"PWB 1.0" [sides=8, distortion="0.019636", orientation=79, skew="-0.440424", color=goldenrod2];
LSX [sides=9, distortion="-0.698271", orientation=22, skew="-0.195492", color=burlywood2];
"1 BSD" [sides=7, distortion="0.265084", orientation=26, skew="0.403659", color=gold1];
"Mini Unix" [distortion="0.039386", orientation=2, skew="-0.461120", color=greenyellow];
Wollongong [sides=5, distortion="0.228564", orientation=63, skew="-0.062846", color=darkseagreen];
Interdata [distortion="0.624013", orientation=56, skew="0.101396", color=dodgerblue1];
"Unix/TS 3.0" [sides=8, distortion="0.731383", orientation=43, skew="-0.824612", color=thistle2];
"PWB 2.0" [sides=6, distortion="0.592100", orientation=34, skew="-0.719269", color=darkolivegreen3];
"7th Edition" [sides=10, distortion="0.298417", orientation=65, skew="0.310367", color=chocolate];
"8th Edition" [distortion="-0.997093", orientation=50, skew="-0.061117", color=turquoise3];
"32V" [sides=7, distortion="0.878516", orientation=19, skew="0.592905", color=steelblue3];
V7M [sides=10, distortion="-0.960249", orientation=32, skew="0.460424", color=navy];
"Ultrix-11" [sides=10, distortion="-0.633186", orientation=10, skew="0.333125", color=darkseagreen4];
Xenix [sides=8, distortion="-0.337997", orientation=52, skew="-0.760726", color=coral];
"UniPlus+" [sides=7, distortion="0.788483", orientation=39, skew="-0.526284", color=darkolivegreen3];
"9th Edition" [sides=7, distortion="0.138690", orientation=55, skew="0.554049", color=coral3];
"2 BSD" [sides=7, distortion="-0.010661", orientation=84, skew="0.179249", color=blanchedalmond];
"2.8 BSD" [distortion="-0.239422", orientation=44, skew="0.053841", color=lightskyblue1];
"2.9 BSD" [distortion="-0.843381", orientation=70, skew="-0.601395", color=aquamarine2];
"3 BSD" [sides=10, distortion="0.251820", orientation=18, skew="-0.530618", color=lemonchiffon];
"4 BSD" [sides=5, distortion="-0.772300", orientation=24, skew="-0.028475", color=darkorange1];
"4.1 BSD" [distortion="-0.226170", orientation=38, skew="0.504053", color=lightyellow1];
"4.2 BSD" [sides=10, distortion="-0.807349", orientation=50, skew="-0.908842", color=darkorchid4];
"4.3 BSD" [sides=10, distortion="-0.030619", orientation=76, skew="0.985021", color=lemonchiffon2];
"Ultrix-32" [distortion="-0.644209", orientation=21, skew="0.307836", color=goldenrod3];
"PWB 1.2" [sides=7, distortion="0.640971", orientation=84, skew="-0.768455", color=cyan];
"USG 1.0" [distortion="0.758942", orientation=42, skew="0.039886", color=blue];
"CB Unix 1" [sides=9, distortion="-0.348692", orientation=42, skew="0.767058", color=firebrick];
"USG 2.0" [distortion="0.748625", orientation=74, skew="-0.647656", color=chartreuse4];
"CB Unix 2" [sides=10, distortion="0.851818", orientation=32, skew="-0.020120", color=greenyellow];
"CB Unix 3" [sides=10, distortion="0.992237", orientation=29, skew="0.256102", color=bisque4];
"Unix/TS++" [sides=6, distortion="0.545461", orientation=16, skew="0.313589", color=mistyrose2];
"PDP-11 Sys V" [sides=9, distortion="-0.267769", orientation=40, skew="0.271226", color=cadetblue1];
"USG 3.0" [distortion="-0.848455", orientation=44, skew="0.267152", color=bisque2];
"Unix/TS 1.0" [distortion="0.305594", orientation=75, skew="0.070516", color=orangered];
"TS 4.0" [sides=10, distortion="-0.641701", orientation=50, skew="-0.952502", color=crimson];
"System V.0" [sides=9, distortion="0.021556", orientation=26, skew="-0.729938", color=darkorange1];
"System V.2" [sides=6, distortion="0.985153", orientation=33, skew="-0.399752", color=darkolivegreen4];
"System V.3" [sides=7, distortion="-0.687574", orientation=58, skew="-0.180116", color=lightsteelblue1];
"5th Edition" -> "6th Edition";
"5th Edition" -> "PWB 1.0";
"6th Edition" -> LSX;
"6th Edition" -> "1 BSD";
"6th Edition" -> "Mini Unix";
"6th Edition" -> Wollongong;
"6th Edition" -> Interdata;
Interdata -> "Unix/TS 3.0";
Interdata -> "PWB 2.0";
Interdata -> "7th Edition";
"7th Edition" -> "8th Edition";
"7th Edition" -> "32V";
"7th Edition" -> V7M;
"7th Edition" -> "Ultrix-11";
"7th Edition" -> Xenix;
"7th Edition" -> "UniPlus+";
V7M -> "Ultrix-11";
"8th Edition" -> "9th Edition";
"1 BSD" -> "2 BSD";
"2 BSD" -> "2.8 BSD";
"2.8 BSD" -> "Ultrix-11";
"2.8 BSD" -> "2.9 BSD";
"32V" -> "3 BSD";
"3 BSD" -> "4 BSD";
"4 BSD" -> "4.1 BSD";
"4.1 BSD" -> "4.2 BSD";
"4.1 BSD" -> "2.8 BSD";
"4.1 BSD" -> "8th Edition";
"4.2 BSD" -> "4.3 BSD";
"4.2 BSD" -> "Ultrix-32";
"PWB 1.0" -> "PWB 1.2";
"PWB 1.0" -> "USG 1.0";
"PWB 1.2" -> "PWB 2.0";
"USG 1.0" -> "CB Unix 1";
"USG 1.0" -> "USG 2.0";
"CB Unix 1" -> "CB Unix 2";
"CB Unix 2" -> "CB Unix 3";
"CB Unix 3" -> "Unix/TS++";
"CB Unix 3" -> "PDP-11 Sys V";
"USG 2.0" -> "USG 3.0";
"USG 3.0" -> "Unix/TS 3.0";
"PWB 2.0" -> "Unix/TS 3.0";
"Unix/TS 1.0" -> "Unix/TS 3.0";
"Unix/TS 3.0" -> "TS 4.0";
"Unix/TS++" -> "TS 4.0";
"CB Unix 3" -> "TS 4.0";
"TS 4.0" -> "System V.0";
"System V.0" -> "System V.2";
"System V.2" -> "System V.3";
}
GET https://kroki.io/graphviz/svg/eNqFWMlu3EYQvecriLlqce8LAuXgOHACxLEBxbIBOwfOsDXDiCJlkmN5EuTfU9yrm-RYugis7qrqV9srJem-jJ8O0eaYp9820b8_RFH34VN0X-R1Hj-66Cba_Oqyr65Od_HV222Wfjm6zSWcHH62-12RFWVzsC7jvHqKS5fX3pFGWZX-0yjjCguyeOuy5ubnvPt9u_3b7erobZmCDpdErxt3qs_5be2eDi6P_ijK-nAZ8RfUvrDcM9Ib2KhLtYn--hEkeZE4eEp1iJ8ayVORnfZFju5UaeIqkAj0LUmrGoykRd4oI9cEGylav-IVafXgnhc-D_A8H9La4eP1KWv8uk-zzCVIsIL9sc7S3PVv28j6EP2SpI0rm-hT-5Ibe4ncvwE_LFdcis0ldvyGmcvW1ZvNFbmmTBlq4ETr5U0VZ49FzjoTasGEDE0wbrRlgQlKBxPgg5WWy9FC4txT9XDaZkfXWXn34WVEAbHBggktEGoVV4EFbdEjhCCCidHEvsgSl5dF0r3j99uPKwDBVWUN0zREiGGErBTtAzvl22OZnZ6LQfmGRi9vX43O6xk8ShIzi4Ca4BGEK2k932mn-U2ap9H7tjI_BYhwy02ICPZZKEoZmZSWzuUnl2XFc6v6QwF_5lAL-_WwMiNV6LfiyAZRzAg1xTUuHyoXt6ZaI79BAZdJXMeh94oJQnmgWiJIKIgt0lwke1c2CdMD02Dy4s_biJ_LGs0pN6EVgR9gGMA0BbY-wP3MsSkrGdKvQv3SMkpIoJ8LpF9Ty5T1ACqy9KtrIeKdGb1QYpTMgmGNoDoMhpwQ4xSySI-mdocC_ojrvsKMZyQoAGs1sbNoEC_QlNJJeX0svxyLtHL9Ezi7W09_o42kYaZSO3kOMFoydYeqdi5rQt0pv9Nv1lBpXFeECRuGgKHaUl5fyOOvpz6DsrpMv11RujmjXnFOZ1VGCUIdDjC5WAGitfPRQaauZOhVc18D-iH0uI61IppNlbAryjgba-Bddqwu1qHXxohZAXDcNiVrSvh8gtqFBJ2ZgkpTNqwFifJTSujQ1n9Hb4Cd659N9lGiVNigjUDdAsYP0r3N4nx3cEk7yJLexrXprQTKGbeChcNLIOVEcii9UXmW7g91P73ooNsu6zaCcxM6rnFhqabPTfkTfznGj3EJM77vQdyDZqEtSGpYCDvF011yKN5pumcOMNkd0ntgGJ0J4ZmQM_S1ZnzW5RjucgRSSPtFANHN9wM-4pquYM8U1bMGalDSEAHw-9h3Q2xUzc4i1ASBaD5rEV53swTqhAX-A0aJGIzw7xkhDcqhEY0GmjWSMLoYBuY1JM7mOCkhGAm1M0SwONGGqzn74ZhfsfXqVYJYvV5hbRsyQk4x3p3iPn3e377uuVvQe6SxYlZXqDMDgzFGoaId2ODPL1vKE9HNOmfjAtrNOe1aaSKntL9PS7ct093D5DRbchrUtu3cCyPGQQmtJGrHh7isS3esnPCdZ2eKFuZhR7iXh1ZbUeQceRut8DNWrGWMh6OFobnLpKIEsdq0gr1OePzq4uIM-xFSzLoyVZiRcMiBUf8j3D6VRTXSq1fvYPpGt6cqujsTaaa0VmHuCzSCgbszPCDjxNWYKUKo-SzUbXPuM3qt8YNlKkN8mM8_lzKfEyltyJs1GoUEUpNOHne9snT9pAKtArHOJVYCTJDQsx1NMolCuyvTx2ro9wB47R6jO2RjtjRCq5JSra4sTT9gFhaQ9Z4_WmHrGQQ9kcoZPcH8nAM5kmyFnojAEj9DIZTRUocxkd4WbAhFQenG_EBF6cLCffWTvx4vnxhW2_k2DVJYSxe_9xvlsmzaCRfl02K3KB5XMn8_axTjnWouHbahuUSHIOjQZfPdE80GsSgB-r98Y-Lvi_KWd6_cHHjzsF4sqDPhJRs-oac0jYxN0WLoa884ffq5YMuTDVxy2qtaeNC36ayYvgr09Rplz0i9OglbkXi-epJZ6EbG1Wnk-B6bvRHYjP8fnqkmliQDmfBZS5h-E-doJBNdmMuGOR_yCnyPbcLBjaV8Ew5cVCoXF4tSb7L5fGNwiuOn8FESVOD0L4hFqTeEzp4YLfTDJZzxoSh4EBYN46n5jkbJbLR4craZDQVP3qD83_8yq2dD
mermaid-seqdiag.mermaid
sequenceDiagram
participant Alice
participant Bob
Alice->John: Hello John, how are you?
loop Healthcheck
John->John: Fight against hypochondria
end
Note right of John: Rational thoughts
prevail...
John-->Alice: Great!
John->Bob: How about you?
Bob-->John: Jolly good!
GET https://kroki.io/mermaid/svg/eNpljzFuwzAMRXefgtlrZzcKBymCtMjQoTegZdYiwoqqTLfw7SMrSDKEi4j_H6nPiX5nCo4OjGPCnwpyRUzGjiMGg72woyf1TfuiFbfuTupDCx8korD2L-D1HzARLDrvCimqMRMo5p0ndy7iWit_23Dk0RvgiBwmA79EdV7DkBgLTmEo76caQSqsfsN19AuNNaCAeZ2zM8Frn7ZdTPSHLE3TVPfP6q7EbuE9EdrmYXT5rHzGGr3X2R7hs17fMp5UZIFRddhUF_umY5s=
gantt.mermaid
gantt
title A Gantt Diagram
dateFormat YYYY-MM-DD
section Section
A task :a1, 2014-01-01, 30d
Another task :after a1, 20d
section Another
Task in sec :2014-01-12, 12d
another task :24d
GET https://kroki.io/mermaid/svg/eNpljb0KwzAMhPc8xT1ADLabKVvAtFOmdOkoajc1bRxw9P7UPymh9BAI3X2SZgrMDZLY89thwCU7MJ7mSEtJLLE7r3EhBm5JYhyFMSXa3J39GjDVXrwBTNsLh3pSLbRUnZAqVYuTtJUMKz9dPPieHpzmytufDztbvGvmfcjZ_uF7XekWStdN-ruuO9t8AGQKP_s=
uml-diag.nomnoml
[Pirate|eyeCount: Int|raid();pillage()|
[beard]--[parrot]
[beard]-:>[foul mouth]
]
[<abstract>Marauder]<:--[Pirate]
[Pirate]- 0..7[mischief]
[jollyness]->[Pirate]
[jollyness]->[rum]
[jollyness]->[singing]
[Pirate]-> *[rum|tastiness: Int|swig()]
[Pirate]->[singing]
[singing]<->[rum]
[<start>st]->[<state>plunder]
[plunder]->[<choice>more loot]
[more loot]->[st]
[more loot] no ->[<end>e]
[<actor>Sailor] - [<usecase>shiver me;timbers]
GET https://kroki.io/nomnoml/svg/eNpdULFqwzAQ3fUVGpOCQ7eCY7R06hAodBQazvbFVpGlcHdqCfjja2FMnIKGp3fv3eOd_fQEgjPe8T3lKLX-iDIT-P5wPN98CDDg4TgrrW2LQL2rKnsDoiRux9XGXlMOekpZRqecUraBloWgE3MBgtwjuaZezGueUxuo9Ovp9GYnz93o8boMvlMI94jMrjIP-RNLefpPsY_D8naLjX4pwlmAxRfZ2o1__XA47nU774aaLWQpwgIkhqUoy0fQ3EKOpZGyGyqzbky-QzMlQh1SuZB94BLzzOiYdLFh7A2uJ-skkfkCHxI5XWnbZMYOGA2P_gdJT3gWP7VI7NQfwwecKQ==
syntax.pikchr
$r = 0.2in
linerad = 0.75*$r
linewid = 0.25
# Start and end blocks
#
box "element" bold fit
line down 50% from last box.sw
dot rad 250% color black
X0: last.e + (0.3,0)
arrow from last dot to X0
move right 3.9in
box wid 5% ht 25% fill black
X9: last.w - (0.3,0)
arrow from X9 to last box.w
# The main rule that goes straight through from start to finish
#
box "object-definition" italic fit at 11/16 way between X0 and X9
arrow to X9
arrow from X0 to last box.w
# The LABEL: rule
#
arrow right $r from X0 then down 1.25*$r then right $r
oval " LABEL " fit
arrow 50%
oval "\":\"" fit
arrow 200%
box "position" italic fit
arrow
line right until even with X9 - ($r,0) \
then up until even with X9 then to X9
arrow from last oval.e right $r*0.5 then up $r*0.8 right $r*0.8
line up $r*0.45 right $r*0.45 then right
# The VARIABLE = rule
#
arrow right $r from X0 then down 2.5*$r then right $r
oval " VARIABLE " fit
arrow 70%
box "assignment-operator" italic fit
arrow 70%
box "expr" italic fit
line right until even with X9 - ($r,0) \
then up until even with X9 then to X9
# The PRINT rule
#
arrow right $r from X0 then down 3.75*$r then right $r
oval "\"print\"" fit
arrow
box "print-args" italic fit
line right until even with X9 - ($r,0) \
then up until even with X9 then to X9
GET https://kroki.io/pikchr/svg/eNq1VLFu2zAQ3fkVB8UB2rRWZTlqIgMdHCBDAKMo0iDw4IW2aIkNTQokbbl_3yMpOXLtABnaQSB4d3z33jtSAw3fIIlTLongkmla-P1NdjXQPtLwEEkzQi7gp6XaApUFMPyWQq1eDLkgS7WHiAm2YdJGsFSigDW3_jwUqpGQJZew1moDghqLBfvYNKRQFlzD1GVXSiiNiHT1QubJxBfGDD7BhyQef04-Eqq1anog7rRVME_IRu0YaF5WFsZxjkocHcc7uwSMpbisuRAdeN6CNzA8Bz7PHeyBZ0Oc7qeKwYZyCXorGNiKWigVM2Cspr6xrbTallWAMN4lRFlzyU3VGaSWv9jKDgvmwpYrGQG3VPCVMwsQcjT6MvoKDf0NS2YbxiSq82bP85ahE5wfsU3-ZhvIzqZ397OJp4vtw4Fg0UC_nqywhZ_PCOeLEw-Rro6oHRUQBSxc3UgDEg6sTS6iySLqp9IEc15urcyJylAULkZos5WWC2A77NtwWzn7cSwDjVOBBYHAaFufq_OpE0e8F45czA5KrpI4OyD57W0_dxsIdbnrrJ-8znqudPY-Tx8fpneze3wa77U4jd92-ADXd_KmM5Iaw0vp3tZQ1fhErdKnnr6Ws319nP_nbrcm_Hh8-P70bv3j8FM5a8AiqjWX9ugmtZfIxYdUl-a_SvoDVDiU0w==
commit-graph.pikchr
scale = 0.8
fill = white
linewid *= 0.5
circle "C0" fit
circlerad = previous.radius
arrow
circle "C1"
arrow
circle "C2"
arrow
circle "C4"
arrow
circle "C6"
circle "C3" at dist(C2,C4) heading 30 from C2
arrow
circle "C5"
arrow from C2 to C3 chop
C3P: circle "C3'" at dist(C4,C6) heading 30 from C6
arrow right from C3P.e
C5P: circle "C5'"
arrow from C6 to C3P chop
box height C3.y-C2.y \
width (C5P.e.x-C0.w.x)+linewid \
with .w at 0.5*linewid west of C0.w \
behind C0 \
fill 0xc6e2ff thin color gray
box same width previous.e.x - C2.w.x \
with .se at previous.ne \
fill 0x9accfc
"trunk" below at 2nd last box.s
"feature branch" above at last box.n
circle "C0" at 3.7cm south of C0
arrow
circle "C1"
arrow
circle "C2"
arrow
circle "C4"
arrow
circle "C6"
circle "C3" at dist(C2,C4) heading 30 from C2
arrow
circle "C5"
arrow
circle "C7"
arrow from C2 to C3 chop
arrow from C6 to C7 chop
box height C3.y-C2.y \
width (C7.e.x-C0.w.x)+1.5*C1.radius \
with .w at 0.5*linewid west of C0.w \
behind C0 \
fill 0xc6e2ff thin color gray
box same width previous.e.x - C2.w.x \
with .se at previous.ne \
fill 0x9accfc
"trunk" below at 2nd last box.s
"feature branch" above at last box.n
GET https://kroki.io/pikchr/svg/eNrlU8tygjAU3ecr7rBRW80gCLSd6So_4Ad0E2KQTJE4SRD8-14QRLTT6bIzZZX7Ouck92AFLyS8g09fSKaKAo91rpwkhSplrXbw1NYiIpQR2Ogx34NMuT42fIcDRyNPSleWYqgqS7gxuh4n1t59JnjIbB4ysTeeQw-4g52ybs6CJdssIJdIVe4h9CEz-gAsuJ-PesShDk4DC0Hk-khYuH2DEX12A79Zsvgb-LgHM2qfuz4XbqkkLLqFimZT1vjCur3QklQ3CN1BsJCeVyygZ_gggB8-tcthjnBU0mbFfFrTZvE8bGFowh5at2pxJ09DsZbWgc6gHeo7U5mrcoeZPu5W6zcilkGWgcMiCF1oA3vDz50uyw-yV3HdJyqBFb5dq2UiwcpWw7WvlFOaVy5EJojnTFV-eiim0J3oACUVHMUiIbXEyyR3lZGQGl6KHLeQ6lOHfG0qycR5WAppIg5gdYU6ujv_LbuNmeQHAz56JPm9RZKJQ9ZoBLbuf73_65MvEC93wQ==
impossible-trident.pikchr
# Impossible trident pikchr script
# https://en.wikipedia.org/wiki/Impossible_trident
# pikchr script by Kees Nuyt, license Creative Commons BY-NC-SA
# https://creativecommons.org/licenses/by-nc-sa/4.0/
scale = 1.0
eh = 0.5cm
ew = 0.2cm
ed = 2 * eh
er = 0.4cm
lws = 4.0cm
lwm = lws + er
lwl = lwm + er
ellipse height eh width ew
L1: line width lwl from last ellipse.n
line width lwm from last ellipse.s
LV: line height eh down
move right er down ed from last ellipse.n
ellipse height eh width ew
L3: line width lws right from last ellipse.n to LV.end then down eh right ew
line width lwm right from last ellipse.s then to LV.start
move right er down ed from last ellipse.n
ellipse height eh width ew
line width lwl right from last ellipse.n then to L1.end
line width lwl right from last ellipse.s then up eh
GET https://kroki.io/pikchr/svg/eNqtULFOwzAQ3f0VJ3UD4rSlLJUYoBOi6oJUiQklzlFbje3I5xL177kkrkqrUjGwvXu69969G8GLbTyRKWuEGEyFLkJjtkoHIBVME8UIdIwNzfMcnWzN1jRYmUL6sMm7KT8afCQDlpxYQLmHV0SC1W4f76A2Ch0hLAIW0Xwx8NZ6R_D8nq0W2dvTj0iVdtSw0qcmPeXlPnMqoyKfyXEuBKmCSzzCRI4FagZj-aCswLaH0w5WDKdwA6gFhp6eMV23xJhNemwZd8wtYOCx7kc7jALr2jR8u0az0ZF9oDVV1ICtWE7mXM1hYjrlZ_AW6oJ4cdBJJ05W7IUVEst1cjqmVL51QljP3woDF3oOuNKllGt33p_dScnygg9ED8u1RFdB1OhSpD7c0J63-c2IBvngRrEI8Z_KnD38SpFD_qRr81ddunvXcOg3TdEVtQ==
use-case.plantuml
@startuml
skinparam backgroundColor transparent
left to right direction
skinparam packageStyle rectangle
skinparam monochrome true
actor customer
actor clerk
rectangle checkout {
customer -- (checkout)
(checkout) .> (payment) : include
(help) .> (checkout) : extends
(checkout) -- clerk
}
@enduml
GET https://kroki.io/plantuml/svg/eNpVkEsOwjAMRPc5hZd0AQdggZA4AicwqWmjJnblOBIIcXdcVfyW9psZj3yshmqt5FCnxDMqFrhgnAaVxv1JsiiYIldHxBYyXQ1MQNMwGvRJKVoS_nHP7saBznbPBAtGHjL9CIqwxFGlkCc3ChjNj8RWzVf6HjPpFD52iCPFSZrBI8BHC9stbN6kc_AdYHeAzYz34qU72EPimFtPi2akPK_8q94D3Yy4r_8hnr8WeYaj0-VNL2D-a0Y=
wbs.plantuml
@startwbs
skinparam backgroundColor transparent
skinparam monochrome true
* Business Process Modelling WBS
** Launch the project
*** Complete Stakeholder Research
*** Initial Implementation Plan
** Design phase
*** Model of AsIs Processes Completed
**** Model of AsIs Processes Completed1
**** Model of AsIs Processes Completed2
*** Measure AsIs performance metrics
*** Identify Quick Wins
** Complete innovate phase
@endwbs
GET https://kroki.io/plantuml/svg/eNqNkcFuwzAIhu95Cs65bU_QtbtE2qSuPfRMbVJ7sSECZ9PefnYidTv2BIJP_D-ws4Javq_W2RR5RsUMV3TTTWVhf5AkCkWRrbaIyz8qC4sLKpkqsFDXw36xyGQGRxXX4rt4SinyDS77c9f38IYLuwAlEMwqn-RKrfZwkDwnKgTnghMFSZ4UTmSE6sJKDBxLxARDA3M1giUKwzEht7mvZPHGMAc0WvlVGWSEFxvufsjuSr5RD2BPD3LPmyqhLUobNZOOohnZEWQqGp1tq_hqP44_8LFEN8Elcqv_3SAyyxfWZNtmR-zbe34Blv-Szw==
mind-map.plantuml
@startmindmap
skinparam backgroundColor transparent
skinparam monochrome true
+ OS
++ Ubuntu
+++ Linux Mint
+++ Kubuntu
+++ Lubuntu
+++ KDE Neon
++ LMDE
++ SolydXK
++ SteamOS
++ Raspbian
-- Windows 95
-- Windows 98
-- Windows NT
--- Windows 8
--- Windows 10
@endmindmap
GET https://kroki.io/plantuml/svg/eNpVj0sLwkAMhO_7K3IvBT0I9VawPfUhWEWvabvo0m5S9oH6792qYD1lPjITMql1aJxW1GuchB0UTWhQQ4vdcDXsqd_xyAacQbJhJcktXJqJu5thLYPBSxHBvhFRBKfWk_NBRVAq8g-oVMjNWPjFaqGLLIdaMs3pssryeTY8PvtL8ZZOov7cPqCdWoUk4hjO4W--W9hu_ihZUn0M9MPkj9YrkcrQ_dv_BbGPVVg=
structurizr-container.structurizr
workspace "Big Bank plc" "This is an example workspace to illustrate the key features of Structurizr, via the DSL, based around a fictional online banking system." {
model {
customer = person "Personal Banking Customer" "A customer of the bank, with personal bank accounts." "Customer"
group "Big Bank plc" {
supportStaff = person "Customer Service Staff" "Customer service staff within the bank." "Bank Staff"
backoffice = person "Back Office Staff" "Administration and support staff within the bank." "Bank Staff"
mainframe = softwaresystem "Mainframe Banking System" "Stores all of the core banking information about customers, accounts, transactions, etc." "Existing System"
email = softwaresystem "E-mail System" "The internal Microsoft Exchange e-mail system." "Existing System"
atm = softwaresystem "ATM" "Allows customers to withdraw cash." "Existing System"
internetBankingSystem = softwaresystem "Internet Banking System" "Allows customers to view information about their bank accounts, and make payments." {
singlePageApplication = container "Single-Page Application" "Provides all of the Internet banking functionality to customers via their web browser." "JavaScript and Angular" "Web Browser"
mobileApp = container "Mobile App" "Provides a limited subset of the Internet banking functionality to customers via their mobile device." "Xamarin" "Mobile App"
webApplication = container "Web Application" "Delivers the static content and the Internet banking single page application." "Java and Spring MVC"
apiApplication = container "API Application" "Provides Internet banking functionality via a JSON/HTTPS API." "Java and Spring MVC" {
signinController = component "Sign In Controller" "Allows users to sign in to the Internet Banking System." "Spring MVC Rest Controller"
accountsSummaryController = component "Accounts Summary Controller" "Provides customers with a summary of their bank accounts." "Spring MVC Rest Controller"
resetPasswordController = component "Reset Password Controller" "Allows users to reset their passwords with a single use URL." "Spring MVC Rest Controller"
securityComponent = component "Security Component" "Provides functionality related to signing in, changing passwords, etc." "Spring Bean"
mainframeBankingSystemFacade = component "Mainframe Banking System Facade" "A facade onto the mainframe banking system." "Spring Bean"
emailComponent = component "E-mail Component" "Sends e-mails to users." "Spring Bean"
}
database = container "Database" "Stores user registration information, hashed authentication credentials, access logs, etc." "Oracle Database Schema" "Database"
}
}
# relationships between people and software systems
customer -> internetBankingSystem "Views account balances, and makes payments using"
internetBankingSystem -> mainframe "Gets account information from, and makes payments using"
internetBankingSystem -> email "Sends e-mail using"
email -> customer "Sends e-mails to"
customer -> supportStaff "Asks questions to" "Telephone"
supportStaff -> mainframe "Uses"
customer -> atm "Withdraws cash using"
atm -> mainframe "Uses"
backoffice -> mainframe "Uses"
# relationships to/from containers
customer -> webApplication "Visits bigbank.com/ib using" "HTTPS"
customer -> singlePageApplication "Views account balances, and makes payments using"
customer -> mobileApp "Views account balances, and makes payments using"
webApplication -> singlePageApplication "Delivers to the customer's web browser"
# relationships to/from components
singlePageApplication -> signinController "Makes API calls to" "JSON/HTTPS"
singlePageApplication -> accountsSummaryController "Makes API calls to" "JSON/HTTPS"
singlePageApplication -> resetPasswordController "Makes API calls to" "JSON/HTTPS"
mobileApp -> signinController "Makes API calls to" "JSON/HTTPS"
mobileApp -> accountsSummaryController "Makes API calls to" "JSON/HTTPS"
mobileApp -> resetPasswordController "Makes API calls to" "JSON/HTTPS"
signinController -> securityComponent "Uses"
accountsSummaryController -> mainframeBankingSystemFacade "Uses"
resetPasswordController -> securityComponent "Uses"
resetPasswordController -> emailComponent "Uses"
securityComponent -> database "Reads from and writes to" "JDBC"
mainframeBankingSystemFacade -> mainframe "Makes API calls to" "XML/HTTPS"
emailComponent -> email "Sends e-mail using"
deploymentEnvironment "Development" {
deploymentNode "Developer Laptop" "" "Microsoft Windows 10 or Apple macOS" {
deploymentNode "Web Browser" "" "Chrome, Firefox, Safari, or Edge" {
developerSinglePageApplicationInstance = containerInstance singlePageApplication
}
deploymentNode "Docker Container - Web Server" "" "Docker" {
deploymentNode "Apache Tomcat" "" "Apache Tomcat 8.x" {
developerWebApplicationInstance = containerInstance webApplication
developerApiApplicationInstance = containerInstance apiApplication
}
}
deploymentNode "Docker Container - Database Server" "" "Docker" {
deploymentNode "Database Server" "" "Oracle 12c" {
developerDatabaseInstance = containerInstance database
}
}
}
deploymentNode "Big Bank plc" "" "Big Bank plc data center" "" {
deploymentNode "bigbank-dev001" "" "" "" {
softwareSystemInstance mainframe
}
}
}
deploymentEnvironment "Live" {
deploymentNode "Customer's mobile device" "" "Apple iOS or Android" {
liveMobileAppInstance = containerInstance mobileApp
}
deploymentNode "Customer's computer" "" "Microsoft Windows or Apple macOS" {
deploymentNode "Web Browser" "" "Chrome, Firefox, Safari, or Edge" {
liveSinglePageApplicationInstance = containerInstance singlePageApplication
}
}
deploymentNode "Big Bank plc" "" "Big Bank plc data center" {
deploymentNode "bigbank-web***" "" "Ubuntu 16.04 LTS" "" 4 {
deploymentNode "Apache Tomcat" "" "Apache Tomcat 8.x" {
liveWebApplicationInstance = containerInstance webApplication
}
}
deploymentNode "bigbank-api***" "" "Ubuntu 16.04 LTS" "" 8 {
deploymentNode "Apache Tomcat" "" "Apache Tomcat 8.x" {
liveApiApplicationInstance = containerInstance apiApplication
}
}
deploymentNode "bigbank-db01" "" "Ubuntu 16.04 LTS" {
primaryDatabaseServer = deploymentNode "Oracle - Primary" "" "Oracle 12c" {
livePrimaryDatabaseInstance = containerInstance database
}
}
deploymentNode "bigbank-db02" "" "Ubuntu 16.04 LTS" "Failover" {
secondaryDatabaseServer = deploymentNode "Oracle - Secondary" "" "Oracle 12c" "Failover" {
liveSecondaryDatabaseInstance = containerInstance database "Failover"
}
}
deploymentNode "bigbank-prod001" "" "" "" {
softwareSystemInstance mainframe
}
}
primaryDatabaseServer -> secondaryDatabaseServer "Replicates data to"
}
}
views {
systemlandscape "SystemLandscape" {
include *
autoLayout
}
systemcontext internetBankingSystem "SystemContext" {
include *
animation {
internetBankingSystem
customer
mainframe
email
}
autoLayout
}
container internetBankingSystem "Containers" {
include *
animation {
customer mainframe email
webApplication
singlePageApplication
mobileApp
apiApplication
database
}
autoLayout
}
component apiApplication "Components" {
include *
animation {
singlePageApplication mobileApp database email mainframe
signinController securityComponent
accountsSummaryController mainframeBankingSystemFacade
resetPasswordController emailComponent
}
autoLayout
}
dynamic apiApplication "SignIn" "Summarises how the sign in feature works in the single-page application." {
singlePageApplication -> signinController "Submits credentials to"
signinController -> securityComponent "Validates credentials using"
securityComponent -> database "select * from users where username = ?"
database -> securityComponent "Returns user data to"
securityComponent -> signinController "Returns true if the hashed password matches"
signinController -> singlePageApplication "Sends back an authentication token to"
autoLayout
}
deployment internetBankingSystem "Development" "DevelopmentDeployment" {
include *
animation {
developerSinglePageApplicationInstance
developerWebApplicationInstance developerApiApplicationInstance
developerDatabaseInstance
}
autoLayout
}
deployment internetBankingSystem "Live" "LiveDeployment" {
include *
animation {
liveSinglePageApplicationInstance
liveMobileAppInstance
liveWebApplicationInstance liveApiApplicationInstance
livePrimaryDatabaseInstance
liveSecondaryDatabaseInstance
}
autoLayout
}
styles {
element "Person" {
color #ffffff
fontSize 22
shape Person
}
element "Customer" {
background #08427b
}
element "Bank Staff" {
background #999999
}
element "Software System" {
background #1168bd
color #ffffff
}
element "Existing System" {
background #999999
color #ffffff
}
element "Container" {
background #438dd5
color #ffffff
}
element "Web Browser" {
shape WebBrowser
}
element "Mobile App" {
shape MobileDeviceLandscape
}
element "Database" {
shape Cylinder
}
element "Component" {
background #85bbf0
color #000000
}
element "Failover" {
opacity 25
}
}
}
}
GET https://kroki.io/structurizr/svg/eNrFWt1v2zgSf_dfQbgPBwROm-TavdzD3sFJ2rsukk1Qpe2-0hJtE5FInUjZyS7yv-_wQx-USFmOsz2jaCCJnPnNB2eGQ2558SByHBM0vaArdIHZA8rTeIqm92sqEPzDDJFHnOUpQdt6sOSIpmkpZIElPK0JeiBPaEmwLAsiEF-iSBZlDE_092KGNhTrQVfR9QwtsCAJwgUvGfxBSxpLyhlOEWcpZQS-swfKVkg8CUmyt1P0x2SC4JfxhKTwgOwvBvY8IwX6GeWkEJyh6Z3-C6QuLI1LOwbkmTcTAJ5CoxjN0JbKtSUAE9U7hOMYwEkBvKc1hUnNeAXQ866-GlzqJ8o854WMJF4uW_gqYigixYaCHvWAFhck7AehZypslNVgFR7N0UxzOC5w_MCXSzW34XcBL9GteVuxmicZZVRbDtQO5k0qtOOYOlwzTNmywJliKvhSbjGYX9sNTW_qb5U1Iv0F6EWSKzfBaVrZIoYXteVhHi8yi2_BS1mbTsxq48wQiMAE1t4DT0TGCurHR5CtxcyBSwBv6oH68Vh_qPHdAyLKJCmUS9zQuOBqBvr4GK8xWxFEzPjaQ4e5Ypl5eM7vb5Q10pRvRSOfWlnKAEmBtyjGYu2l7pA3QIm0WjZjPAw_23F9c_hAbCjZegwBtqKFu0pm2ocy_EBQjp8yYhaOux70mgCeKbnDKzLP85TGhuzPYHomwVXA-aeRHnKsxqDWIIB4V_ANTVyfqQWq_GZZMhtLqHxSQjQS2QgE2LdkgRYFyEsKpdtf8AZHcUFzqcWYs1WZYhUvvsO4CzNu2pMl4wuaKjlc_Df6tYLuQEYpzagkaqEtBOA9CL9hjRKi4oSS4Dec4YIqJbXY9xCD2EG1K1FddV-RlG60J6x1LJI01hPAuFpNXvjGwOAEYD3ckKu0rCdGeaGG3ny77EPEOQ1CnN99DnnEDjUqzWH0S3T767v_3t_fRQhIhSB5vNZ47opRdgloCp6mOuPEPMs5U-oAp10xAIGa782SKoVdTooEUlGVu7pz16LC1cBBX4iQbbJecNUyjMoM_OAphHJuhyE7zoVbK7PxOJ0XMbisGW58trv2XwIYIhKRd1gIKCeSENwvahCqRg3rVhO06HI7o8FvnBIGo69frl-CV5AYyhgJmq3Quea3n1H9va1P1xcLkmIVB6xDmFw3QzqrqIcafZ3OLNgLgpkfXZ2BnfD_Ccc4IS7QUD5GZrAukZZmHmjE-GmT33tV2W5oOtsGtGYzbltnEWFgNpNatV21gXdyeu69SbDEqsh0I8iVfduUH4o-mGTVFEOtfDdDa8i-qlAtQRFMVlEpLkiiHnFqahEiBEr5qrHYbYFjcLiKHYriNShi2gIw8cN_btL6G-MpqrBZ01ygBZFbQhjUdVzV4bpms9ndGkT0y-LjfwVKg-k3yO2iWsNg2RQzkKPJ46JO5KAjmNcg9hMETo2jTP9DZEO8XUEsC54dxMSUb46jdOeaITC2VkPPr6ZeVTkV-3QuHgT6XwnhQdlATYKikKQkX4O3NgScSa4Wvgoi_JxUOTj9bms8oYu8rhRqyBC5VrHvGxb0I8nfKSM0y8LvNp1aAfxFUDDTgq70hgCW8Tu6sJjRVGfVgFK9Jd8B_tcm3tRgBxDsiBrG3FREJjJWSP4m2hXlKN3bkNfo3s9SY-kUHhDElTSqGoqhErae2RQ30900w_XCKxAP5fbxpBurHia_Q-c1ZHYIHi5nTzQlbq_S6Kz7sBztMOCrBDqEQvjHgBiY28n4nYl9yjClTtZQ8mGI03qNqHW7haGkUuDVRWu_MCioGw-95vjt5rprjQ7w4VxTz0pInnIdVz6yDS04y7TUV2RDUp5nuqxxdxTNjF-5soodCtq7xrnkatuo9nF1x-E7ZYmqdU9PEC_0BkjVZPFt5NuqdIm3d7Ca7uUalEtm6BMtyJI_zlCEl7B1nCnaH5MVCe1_kgpl5Fv3nxlsEFnslFv1O2-kGFPDdRXF4wfQ0mVdzx0jJZ7qo1XSmSFhGVyC8xxDYYbueQaYDAHnFTp_-xii5ejku5NBBpXhJpvdpOfOhniQtLt39pJ-fh21N4Xti3XvJWHr5tOzeJTaKxqDWqmCy4v08Ty4cjvd8qn7RnNGMVGVrP66e7Xa6uoYJDw5OTUkA1N1MLX1vwl-tcR17NspnG_fEQho11D57Ipkl0095HSoqqWlIhe9jXQYY0nBaeKTTNVYN1WiHTRtnY73sFkLo6rCyso4noD7f4y2Sgc_JtA-T17Nxcf7NwTBo6MjQ-_rAqqZEp3-9PbkPbq-j_Tb9z8ogis9v27wfkmErdQCAXxYLec_UC1_feIZHw4XVTDsa8UvRF5QVRxXCcLkGMDe5WATzjG6MxP2SUNKSXcun78uEe1Qz1nQaT5B0co34bwMBTlnyV66iqopfW3tZFcHty7bUapr0X91LeYFT35s0g07qtmCee0CWySz0mBPo6Nvu5llWFkWG90QaYQwTcIU9lUixjlIbiS4rl50BaYsTkvQ0JF7kFlKfo2feCl9xYPhoU-JHmWo9Wj-XppBI7kyahuIfaN4ufRGVb2aSbB5PvH2rgdKi2FVNG3ngBrqglocroO6J9bse_vo-72uceez4ZPPHcd3wa78AUqttuedg8JpvXF_BW36W1tN86cOR6ZBEPagXoOn1_6YjD_KG2p5TMYesLlNjhfbIXliOKNxzwrqHPSzOpk18KmAKLXmW3OEbI8_7Q0hc5MI2VsmRuXHnnPjzqWa8W3SqFxkqmXdOq1xguUeHbhvOKWJDrltYp028oj2liApiSU6Mh0uc3i5XZNCn00WzNyh-bdLsp7th_aFgDKZPcjqJYQgpr66KkKyKGGXZm4n2OOv6kgSXFBCESlG6NDfQDedNHVyoa6UdU7VJH8grId-hx_WyTwUZZ1GXPvpqp56eMAY1xyb7Ns_2tEEmoxujLx8ne_Ur-kL6D-vqdGdG-BxbYPJHhu-8KZnskfpP9mr2n2xYYR8SonoKA6ii2nWmDuQvgo25ikv0Jul_vW-LmERR_R3gs7O-rlsrYpGQ3kAdo2huXbZR6EiwMpc_nxzcv7-7B-LMRRbNxB30Pyn_o2hGVVH6NVFuGHCp6c_nS-SPbQaYNu9zbe_PC9iW5ecuxi-__t5knw4nKHTEPsj4FMwyI4ZQ7J9vy5E0Yy50s3Hen8zhnhzQSRE-vIppSwZB7V1s2VY3ecfFovlSUjdJ_o3huHQ7pvnOFb3j84-BO-emP-fJ38Cji2rhQ==?view-key=Containers
connected-servers.plain
.-,( ),-.
___ _ .-( )-.
[___]|=| -->( ) __________
/::/ |_| '-( ).-' --->[_...__...°]
'-.( ).-'
\ ____ __
'--->| | |==|
|____| | |
/::::/ |__|
GET https://kroki.io/svgbob/svg/eNqFT8kNhEAM-08V-TEjkfBHGhoBlEZcFDVQ2ZogFsGuwI8csuMkIneYtlmktGqJnbszHEw-ZSX4kfyMClEd8t2p7Mm_4EDX953AEUxzMTRtaKPD6GbmW1iXOf3cxynLof7DHZjO1ZEepPTj0jgIglrxpA1gs6WW1auW_-4fO9IHnMI_3w==?background=transparent
ascii-art.plain
_____
/ O__]
/ ___]
\ \
| |
| |
/ /
\ \
/ /
GET https://kroki.io/svgbob/svg/eNpTUIgHAS4FfQUF__j4WC4gHQ-iYxQUFGK4FGqAVA2cAkoq6HMpQOUgPADvCQ1U?background=transparent
hardware-struct.vhdl
module demo_device #(
//# {{}}
parameter SIZE = 8,
parameter RESET_ACTIVE_LEVEL = 1
) (
//# {{clocks|Clocking}}
input wire clock,
//# {{control|Control signals}}
input wire reset,
input wire enable,
//# {{data|Data ports}}
input wire [SIZE-1:0] data_in,
output wire [SIZE-1:0] data_out
);
// ...
endmodule
GET https://kroki.io/symbolator/svg/eNp1UMEOgjAMve8rmnCRBFFuRuPB4A4knIR40BgyWWMWx0bG0IP47wJ6IKg9tOnre69pC81ricCx0BnHm8gRnAmBNmYzBx6P57NvSmZYgRYNJNGBwhoW3gjf0YSm2SZMoz3NYrqnccsKiAtDt1zq_Fo1YVeEunzMhSprC3dhEHqCN1RoZY2WTfiuUImLYrL6Vhqs0HpjFBU7SxwacmZZs20TlNrYH0bH7sJpsJyfoONmQr3lurZ_Oe2MuCvS7QDf9wkqXvSPfQFdM2uY
tikz.tikz
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (0,0) circle (1);
\draw (-1,-1) -- (1,1);
\end{tikzpicture}
\end{document}
GET https://kroki.io/tikz/svg/eNpdzT0KgDAMBeDdU3S00IKdvYpLTIMEtUp_ECze3VbQwfV7eS-D3TCt5CIuEEIGHxkXupohBdoBZ5goR57PIiNN7PJ7_0FNd8aYfK1ZD4doO9VJgezLlGiN7F_XRmkjhdZF1ePk7G-hyvfkBoMiOLI=
state-machine.xml
<?xml version="1.0" encoding="UTF-8"?>
<umlet_diagram>
<element>
<type>com.umlet.element.base.Relation</type>
<coordinates>
<x>739</x>
<y>16</y>
<w>232</w>
<h>264</h>
</coordinates>
<panel_attributes>lt=<-
when(spidersensor="rotate")
/block spider
</panel_attributes>
<additional_attributes>161;244;161;34;71;34;71;74</additional_attributes>
</element>
<element>
<type>com.umlet.element.custom.FinalState</type>
<coordinates>
<x>890</x>
<y>260</y>
<w>20</w>
<h>20</h>
</coordinates>
<panel_attributes></panel_attributes>
<additional_attributes>transparentSelection=false</additional_attributes>
</element>
<element>
<type>com.umlet.element.base.Relation</type>
<coordinates>
<x>750</x>
<y>170</y>
<w>160</w>
<h>137</h>
</coordinates>
<panel_attributes>lt=<-
after (10s)
/ block spider
</panel_attributes>
<additional_attributes>140;100;66;100;66;20</additional_attributes>
</element>
<element>
<type>com.umlet.element.custom.State</type>
<coordinates>
<x>340</x>
<y>420</y>
<w>100</w>
<h>40</h>
</coordinates>
<panel_attributes>wait</panel_attributes>
<additional_attributes>transparentSelection=false</additional_attributes>
</element>
<element>
<type>com.umlet.element.custom.HistoryState</type>
<coordinates>
<x>230</x>
<y>440</y>
<w>20</w>
<h>20</h>
</coordinates>
<panel_attributes></panel_attributes>
<additional_attributes>transparentSelection=false</additional_attributes>
</element>
<element>
<type>com.umlet.element.base.Relation</type>
<coordinates>
<x>230</x>
<y>416</y>
<w>130</w>
<h>54</h>
</coordinates>
<panel_attributes>lt=<-
restart
</panel_attributes>
<additional_attributes>20;34;110;34</additional_attributes>
</element>
<element>
<type>com.umlet.element.base.Relation</type>
<coordinates>
<x>270</x>
<y>396</y>
<w>90</w>
<h>54</h>
</coordinates>
<panel_attributes>lt=<-
pause
</panel_attributes>
<additional_attributes>70;34;20;34</additional_attributes>
</element>
<element>
<type>com.umlet.element.custom.FinalState</type>
<coordinates>
<x>90</x>
<y>400</y>
<w>20</w>
<h>20</h>
</coordinates>
<panel_attributes></panel_attributes>
<additional_attributes>transparentSelection=false</additional_attributes>
</element>
<element>
<type>com.umlet.element.base.Relation</type>
<coordinates>
<x>46</x>
<y>256</y>
<w>114</w>
<h>164</h>
</coordinates>
<panel_attributes>lt=<-
after (10s)
/timeout
</panel_attributes>
<additional_attributes>54;144;54;34;94;34</additional_attributes>
</element>
<element>
<type>com.umlet.element.base.Relation</type>
<coordinates>
<x>230</x>
<y>110</y>
<w>190</w>
<h>170</h>
</coordinates>
<panel_attributes>lt=<-
timeout
</panel_attributes>
<additional_attributes>20;150;110;150;110;20;170;20</additional_attributes>
</element>
<element>
<type>com.umlet.element.custom.State</type>
<coordinates>
<x>700</x>
<y>90</y>
<w>180</w>
<h>100</h>
</coordinates>
<panel_attributes>accept
boarding pass
--
entry/ release card
do/release spider
</panel_attributes>
<additional_attributes>transparentSelection=true</additional_attributes>
</element>
<element>
<type>com.umlet.element.base.Relation</type>
<coordinates>
<x>540</x>
<y>140</y>
<w>205</w>
<h>100</h>
</coordinates>
<panel_attributes>lt=<-
[passenger booked]
</panel_attributes>
<additional_attributes>160;20;120;80;20;80</additional_attributes>
</element>
<element>
<type>com.umlet.element.base.Relation</type>
<coordinates>
<x>450</x>
<y>210</y>
<w>239</w>
<h>190</h>
</coordinates>
<panel_attributes>lt=<-
[passenger not booked]
</panel_attributes>
<additional_attributes>219;170;99;170;99;20</additional_attributes>
</element>
<element>
<type>com.umlet.element.custom.State</type>
<coordinates>
<x>670</x>
<y>350</y>
<w>120</w>
<h>50</h>
</coordinates>
<panel_attributes>reject
boarding pass
</panel_attributes>
<additional_attributes>transparentSelection=false</additional_attributes>
</element>
<element>
<type>com.umlet.element.base.Relation</type>
<coordinates>
<x>480</x>
<y>130</y>
<w>142</w>
<h>100</h>
</coordinates>
<panel_attributes>lt=<-
result of search
</panel_attributes>
<additional_attributes>71;80;71;20</additional_attributes>
</element>
<element>
<type>com.umlet.element.base.Relation</type>
<coordinates>
<x>270</x>
<y>70</y>
<w>150</w>
<h>40</h>
</coordinates>
<panel_attributes>lt=<-</panel_attributes>
<additional_attributes>130;20;20;20</additional_attributes>
</element>
<element>
<type>com.umlet.element.custom.ThreeWayRelation</type>
<coordinates>
<x>540</x>
<y>210</y>
<w>20</w>
<h>20</h>
</coordinates>
<panel_attributes></panel_attributes>
<additional_attributes>transparentSelection=false</additional_attributes>
</element>
<element>
<type>com.umlet.element.custom.State</type>
<coordinates>
<x>140</x>
<y>60</y>
<w>150</w>
<h>420</h>
</coordinates>
<panel_attributes>read boarding pass
--
</panel_attributes>
<additional_attributes>transparentSelection=true</additional_attributes>
</element>
<element>
<type>com.umlet.element.custom.State</type>
<coordinates>
<x>400</x>
<y>60</y>
<w>180</w>
<h>90</h>
</coordinates>
<panel_attributes>check passenger
--
entry/start search
do/blink lamp
</panel_attributes>
<additional_attributes>transparentSelection=true</additional_attributes>
</element>
<element>
<type>com.umlet.element.custom.FinalState</type>
<coordinates>
<x>170</x>
<y>410</y>
<w>20</w>
<h>20</h>
</coordinates>
<panel_attributes></panel_attributes>
<additional_attributes>transparentSelection=false</additional_attributes>
</element>
<element>
<type>com.umlet.element.custom.State</type>
<coordinates>
<x>150</x>
<y>240</y>
<w>100</w>
<h>40</h>
</coordinates>
<panel_attributes>read
passenger ID
</panel_attributes>
<additional_attributes>transparentSelection=false</additional_attributes>
</element>
<element>
<type>com.umlet.element.custom.State</type>
<coordinates>
<x>150</x>
<y>330</y>
<w>100</w>
<h>40</h>
</coordinates>
<panel_attributes>identify
passenger
</panel_attributes>
<additional_attributes>transparentSelection=false</additional_attributes>
</element>
<element>
<type>com.umlet.element.base.Relation</type>
<coordinates>
<x>160</x>
<y>260</y>
<w>40</w>
<h>90</h>
</coordinates>
<panel_attributes>lt=<-</panel_attributes>
<additional_attributes>20;70;20;20</additional_attributes>
</element>
<element>
<type>com.umlet.element.base.Relation</type>
<coordinates>
<x>160</x>
<y>100</y>
<w>40</w>
<h>70</h>
</coordinates>
<panel_attributes>lt=<-</panel_attributes>
<additional_attributes>20;50;20;20</additional_attributes>
</element>
<element>
<type>com.umlet.element.base.Relation</type>
<coordinates>
<x>160</x>
<y>350</y>
<w>40</w>
<h>80</h>
</coordinates>
<panel_attributes>lt=<-</panel_attributes>
<additional_attributes>20;60;20;20</additional_attributes>
</element>
<element>
<type>com.umlet.element.base.Relation</type>
<coordinates>
<x>140</x>
<y>170</y>
<w>78</w>
<h>90</h>
</coordinates>
<panel_attributes>lt=<-
[valid]
</panel_attributes>
<additional_attributes>39;70;39;20</additional_attributes>
</element>
<element>
<type>com.umlet.element.custom.State</type>
<coordinates>
<x>150</x>
<y>150</y>
<w>100</w>
<h>40</h>
</coordinates>
<panel_attributes>check
validity
</panel_attributes>
<additional_attributes>transparentSelection=false</additional_attributes>
</element>
<element>
<type>com.umlet.element.custom.InitialState</type>
<coordinates>
<x>170</x>
<y>100</y>
<w>20</w>
<h>20</h>
</coordinates>
<panel_attributes></panel_attributes>
<additional_attributes>transparentSelection=false</additional_attributes>
</element>
</umlet_diagram>
GET https://kroki.io/umlet/svg/eNrtmkFzojAYhu_8CsbDTvegJBBARrSXnc72ut2dPXR2OhGjsiIwIdb67zdgrdV-zFQCLW7rjEaTYOT5Pt68CfqXD8tIv2c8C5N42ME91NFZHCSTMJ4NO79-XnX7ncuR5q-WERN3k5DOOF2ONF0-fBaxJYvF9lNRIzYpGwXJsld07z126I1pxno_WESFHMQ3il77g4Ik4XI4Kli2ry1aHkau5fnGw1H1ZoQd39gc1a5HpmX6xvqoej4yHeIb82cDGuCIfkpjFt1RIXg4XuVNkRh-icSgq63nLL7I0nAiMbE4S_iwwxMhD-981YxxlAQLfdv6bIwX37Zvo5NJmJOgB-3YwQOTkEFeWmTg7l5d-evhI7ZRMA7C8PqgBKtMyMorySG6yU_mpMD0PQQFxnQQGBkEBgZVi0sFuILTOEsplyd-IwEEeY_hlEYZawauQsbbIFjsgmCxA5LFlquY8nQqGNcvMMpkiuu15ThBA4zQwHF2RZ4DDWb36YltEZA_MWH-CORPKmb2mobiDLL7Ee73UBZ8czpj04IZk0_xUBOPMrDwfIktkKytOl1ylgnKhYpQmCif_TDOi9ZBdkHIlgdC9pphnNJVxlQIuwVhsznAav4CthcEfSqEWvISB7RtNiwQmIDuQtlQH7gLES5ZslKSC1tqhbTOspA57ZE2igaszFLhQPCwahQmUAl8DaylZGAbFdq8K_MqF7XPy7kIhO7BzPswc1SROQ0ClgptnNC890xPaZZp3a4mz4hvDJ3Ls5PZpAeyWZskxu6zuskGxUjwVeu0yIatNi6zgXat8Xm6Jm7zyLB4JhVpnCQLNvmjtozfXg_y2S_e9VHr5gB4iWnCWmTmWzAAd69G7nEi6mBvYq8QIu-paJ0kOSXm0YY1CXY2dkX0nP2VcnAkSXUrTTttTx-WGgvGTsxmpEaujFaR0JOpnjHKg7mSgce5wMhXE53JCqlkC8uudQtlx7qKdFuFYJuNO5mfc87Yb7qpc9YsU--PtjSqrMwY5uqclLRmZWWmE_2FVTwfE1iZOkGnUIctelUnEsxZsNCfXMjenBfbVzuJlt58HIXxQo_oMj2_kFTcf8FuyU7ip8qoqUyJ9yZvcXshVxlt77qvv52T-asbuWW9BXK5mI9FON3ssX8Mw13cmHz1_WFSq64rWEDp_dxGHWDtRDE6gaj7LkTt8yJashaHifbfhajTVqLklD8vuP0mrnrt9p5GodpGkuXlMmC1cP-oZDLD9ltMZoVh1gq8odicoXm4juU312iH8X97P9I3Dv_x9w96IXbC
word-cloud.json
{
"$schema": "https://vega.github.io/schema/vega/v5.json",
"width": 800,
"height": 400,
"padding": 0,
"data": [
{
"name": "table",
"values": [
"Declarative visualization grammars can accelerate development, facilitate retargeting across platforms, and allow language-level optimizations. However, existing declarative visualization languages are primarily concerned with visual encoding, and rely on imperative event handlers for interactive behaviors. In response, we introduce a model of declarative interaction design for data visualizations. Adopting methods from reactive programming, we model low-level events as composable data streams from which we form higher-level semantic signals. Signals feed predicates and scale inversions, which allow us to generalize interactive selections at the level of item geometry (pixels) into interactive queries over the data domain. Production rules then use these queries to manipulate the visualization’s appearance. To facilitate reuse and sharing, these constructs can be encapsulated as named interactors: standalone, purely declarative specifications of interaction techniques. We assess our model’s feasibility and expressivity by instantiating it with extensions to the Vega visualization grammar. Through a diverse range of examples, we demonstrate coverage over an established taxonomy of visualization interaction techniques.",
"We present Reactive Vega, a system architecture that provides the first robust and comprehensive treatment of declarative visual and interaction design for data visualization. Starting from a single declarative specification, Reactive Vega constructs a dataflow graph in which input data, scene graph elements, and interaction events are all treated as first-class streaming data sources. To support expressive interactive visualizations that may involve time-varying scalar, relational, or hierarchical data, Reactive Vega’s dataflow graph can dynamically re-write itself at runtime by extending or pruning branches in a data-driven fashion. We discuss both compile- and run-time optimizations applied within Reactive Vega, and share the results of benchmark studies that indicate superior interactive performance to both D3 and the original, non-reactive Vega system.",
"We present Vega-Lite, a high-level grammar that enables rapid specification of interactive data visualizations. Vega-Lite combines a traditional grammar of graphics, providing visual encoding rules and a composition algebra for layered and multi-view displays, with a novel grammar of interaction. Users specify interactive semantics by composing selections. In Vega-Lite, a selection is an abstraction that defines input event processing, points of interest, and a predicate function for inclusion testing. Selections parameterize visual encodings by serving as input data, defining scale extents, or by driving conditional logic. The Vega-Lite compiler automatically synthesizes requisite data flow and event handling logic, which users can override for further customization. In contrast to existing reactive specifications, Vega-Lite selections decompose an interaction design into concise, enumerable semantic units. We evaluate Vega-Lite through a range of examples, demonstrating succinct specification of both customized interaction methods and common techniques such as panning, zooming, and linked selection."
],
"transform": [
{
"type": "countpattern",
"field": "data",
"case": "upper",
"pattern": "[\\w']{3,}",
"stopwords": "(i|me|my|myself|we|us|our|ours|ourselves|you|your|yours|yourself|yourselves|he|him|his|himself|she|her|hers|herself|it|its|itself|they|them|their|theirs|themselves|what|which|who|whom|whose|this|that|these|those|am|is|are|was|were|be|been|being|have|has|had|having|do|does|did|doing|will|would|should|can|could|ought|i'm|you're|he's|she's|it's|we're|they're|i've|you've|we've|they've|i'd|you'd|he'd|she'd|we'd|they'd|i'll|you'll|he'll|she'll|we'll|they'll|isn't|aren't|wasn't|weren't|hasn't|haven't|hadn't|doesn't|don't|didn't|won't|wouldn't|shan't|shouldn't|can't|cannot|couldn't|mustn't|let's|that's|who's|what's|here's|there's|when's|where's|why's|how's|a|an|the|and|but|if|or|because|as|until|while|of|at|by|for|with|about|against|between|into|through|during|before|after|above|below|to|from|up|upon|down|in|out|on|off|over|under|again|further|then|once|here|there|when|where|why|how|all|any|both|each|few|more|most|other|some|such|no|nor|not|only|own|same|so|than|too|very|say|says|said|shall)"
},
{
"type": "formula", "as": "angle",
"expr": "[-45, 0, 45][~~(random() * 3)]"
},
{
"type": "formula", "as": "weight",
"expr": "if(datum.text=='VEGA', 600, 300)"
}
]
}
],
"scales": [
{
"name": "color",
"type": "ordinal",
"domain": {"data": "table", "field": "text"},
"range": ["#d5a928", "#652c90", "#939597"]
}
],
"marks": [
{
"type": "text",
"from": {"data": "table"},
"encode": {
"enter": {
"text": {"field": "text"},
"align": {"value": "center"},
"baseline": {"value": "alphabetic"},
"fill": {"scale": "color", "field": "text"}
},
"update": {
"fillOpacity": {"value": 1}
},
"hover": {
"fillOpacity": {"value": 0.5}
}
},
"transform": [
{
"type": "wordcloud",
"size": [800, 400],
"text": {"field": "text"},
"rotate": {"field": "datum.angle"},
"font": "Helvetica Neue, Arial",
"fontSize": {"field": "datum.count"},
"fontWeight": {"field": "datum.weight"},
"fontSizeRange": [12, 56],
"padding": 2
}
]
}
]
}
GET https://kroki.io/vega/svg/eNqlWN2O3LYVvvdTEJMCYxez643tdWMDuTCQoilQtEXSxhfOXnBEzoiNJCokNVrZ2iCvkdfrk_T7DjU_mt0N0haYESXy8PD8fudIn54otfhdLEpb68VbtShTauPb5893dqsvty6V3frS-eeZQGaf764v_xV9s1hxa-9MKrHxi6sreS6t25YJE6-miVYb45otZvDMCaMTT_qAe6U-yRWzja4tz096XVlhLdM7XXU2Hshl7itbVDro5HZW7VzsdOU-4sk3aht0XesQVaEbpYvCVhZ0Vhm7s5Vva9ukldrowlUucT7YpMPWJsgH8uBjVG2l08aHOq6UbozSVeV7Velm2-mtvajISPk2uXo6M16qr32P6bBS9tZF4WUelXDPKSodrGqDg7iuGlThm8KGxhrVw-bTJmWbwtN4WZZgQQgerm7txBznNkmVWIWmUUFw5ZqE1UKW17bUO-cDhPxzg_2xhcB2pXpLsuBNV1ilVe0NtdrM5D7wwYnGRrdthD29N9cJzN8ZmgSK1zaV3kCQ4GucN4nRBi-eEU1wdj4Php3sKVrAIvCbr1sfGQL5oJjApJ749aUrSu6nf1SJOLNh4hARnE1yhaKcuoJI3-YbtbGwaRuscQU8HsWQsdAVFYTTIhVYTayzs7uokldb20B96GhnFo0IKbEJOCWVSqumkNgol2yNbR42CIN62rpbW8Vn3O1nLH7sbHCQxON44SCaGl9r11yqv4tXxOqhq0AGigYyWd7E424whcqu7SoGMtnMnPLvn3-BhG1r4U5E1qX6h58HPjmKLUoEIP2S2SMOYXMIkHNobRmDuo1yjKGLmKjmoBBi6y28BE668g1Cq-0kTE8jKba2cBvaX-xGU53EVrJF2TioBae9h0wxWqSh70IOE1FkY3V0awo_iND2Fh6N0e04sR7AjyIkpyUIXcpJZG-TbcTBtBZN9B3g62HIgIHK4LstgkAZx8CAkZCrluLaW1238IUEr7G12IhmLOhDTSL6EvaykfjlYgkTJX3rG18P5DA_8xH1D6gHjHvPrIFDkN3f7NOI0gMJVBwiQ02HokTMFQkWh3YIR-TZzpkcM2rjQkwq-HWHgUZjbgVb0iRgxsRKBMTzvJ-ghzt-MwQg3QCkYnzJVMiIeybxY2Gwmqt1GndaDtgwFeGctoQYU366pu2SrK6Qw0jQiQA5SU0myD6Veo8ssBCSOyudw1jMcwHpEGwZZQS4BXQQfAXDETkTu7b1IR0jbg4HcyDMXqg1A3LnK1rZ1fZip8NA5oQdjTKBBBF6Xa0UzFk6sKMvsTwpN7ONZMCZSZibZkAqchPSLdiLPiAYEPtAqA2xKXQNT2d6SCKwjvC4Fgu8XRMYkPM0bzb5hQk4Ez7WsRSnIgiNi0UHE609EooR5Cp7katR11zIAbNqSMyp3FTGwPk8eCfEyYgFi3ZVEkRYA2ZK5OEPcEZnBOBoS9dk3KYfgHtn5Q1TLAUEOGa4yPjVSzmE7H1wWydWbnxzEWbxlnPosZQjycVfYE-mGwvNVGYmsMiy2YZ1KgImWmfm0T3DuJ19uGgeDqFd165hcUKEauNycBxOAzPxuisQ4TnH6cCzHmEqF9K0THVUGCHwtxbOltSt9GADEwBUNWzvLnbO9vQy-p6BAEfg1DDYqbpzxL5U_4xsNrLGw1l5zHU4MuwmIRj5h6opjcjMvIc15Si90muC6wSOtLOxGzFOzv7c8cAKBdORhav1rknHsgIInlq3Y9lXm67JHHOHVFRdzOAr_Rrg61jWW-AVSjii7aM9t7GoBeV30jDGGSCJmPs0tznnCEk4EJuYWlwEzh38W_mtK1h47DwWmGOoJl1CS5CmBI9DwwINmRBw9sfORRJLXAksSFU8NoM8StjvW5tOXEbYYKkKqBJiik0XwDYo5DhOO6A5fARB4QaUDiTWoa895NC8pK9O5D9pkAD-EgFsNB6qJdIZsfF17Elt09WgYOt36OaAVCm3BZYvAvTk8aR0KNgPFOpjlRaXdEUBr6f7WZpxbdLezovHvpmdimc9q9bkWTIGWt00Eocfva8PvTo88APYHaxxuZiA5ubwagPhmkj8mr3dfDrckWRo5aWo8ADzVifI1pxAFig2zlaGJPJWNVsqdJTNqGA2zJf2rLD64fvv--XNp5eruzkJLNL2Phi-ey2eurG2Yz3gx_Iy9nbs4ogyyb_cYHpn4zj4jv8gl5iv3DAcSUo7lq7GP3KU1cg5G_iPcuGkS_jFMRe0EVE68FLz4kK-RpmZ-PbAilGCHVfPf81LtCBypMSy9Li4clbXI6ZRisZeYzeAY1zzZxtc4McRr04QC2ulNnzgnPH44TDjDG4407uqGnvfVQZqyIAkGwu5Y3hCi2VN_ZeBSi4jtV1SryVP5Sx14-iWOJCUGLCym1Z2XDGyYMjBCAdDEpMpDAggBSkwYBHXmIderkKF0cVmmagzB6gtg82PZX6k1nk0HKhtHuXqZLL3-QodeYOCnof9RKGna-NTNgWfa2QZx8pSdfqDFij9MvtuKa63spTHHr1qHqbHgTS-x1WPMDLoMJhx3cHIm9EHOK7QHX0bR3Y_FeOhsqPfjHD-ehiRbSMr3KjXHpv0VvPNAdtST78TkMYJVkbT8b0Ia9gEjhskDLftGCNA3BGk7HXHrsXPN7BQTw4jGePRbyARoBaCGO7kUeMEt5QcFGhbROWssKiblaWqVHQE9EPDYSRKjcDectzYfqwpUO0huBduEa-cI-FobDx-YaTZfVMNI0WKmqvUiybzfoRQA2blj2jUjgGFk54tDvl_t_p1PCJq4Y1wsVILLQCh2e3PAYQdswDMxavrlbpaqVfXNx9--ukpUA_vuk-fqd-rl89u_o8z-_yl6cFD3eYpALGrLxPq8JdfLr_745_eLVfq9RXkeHl1darqHpef7J9u8mcqKePx8Q9Vha_8EVYPYgIy2XMeF_KLPZY-7b987b9xnaA3xVwcLLCQgsajF5-Za_3mxRck_uz19YvizZXcvnn55vrNHxb3hGYH_YDMe-HkmMMpDN8H5DqKIW0PNx4dgjkkwmxKTXzJ6RGFhAi97zbbQT7qiQ0ztzndGnUL5dPOSXXVlhqJ6ooz8g0AWEjFYSeeuWfeh0IN1RHa23OFyPRvrS5cGmZifP4wk5KZ_lt5XF1e390Lv7v_pS1gfS4q35mz0o1Ohpv5SZafYW9W_7Wvgk-TVWYdBhIqZ_qZC9ArkuJrVmJ2rOqvtkNL9y64k0w4kH6b5bvHWrqcB1i_339SvrdjgoC7B4_4Zp9En79YqevXN2cd0P6r9Itfg4Ind0_-A3Fs-QI=
diverging-stacked-bar-chart.json
{
"$schema": "https://vega.github.io/schema/vega-lite/v4.json",
"description": "A diverging stacked bar chart for sentiments towards a set of eight questions, displayed as percentages with neutral responses straddling the 0% mark",
"background": "transparent",
"data": {
"values": [
{"question": "Question 1", "type": "Strongly disagree", "value": 24, "percentage": 0.7},
{"question": "Question 1", "type": "Disagree", "value": 294, "percentage": 9.1},
{"question": "Question 1", "type": "Neither agree nor disagree", "value": 594, "percentage": 18.5},
{"question": "Question 1", "type": "Agree", "value": 1927, "percentage": 59.9},
{"question": "Question 1", "type": "Strongly agree", "value": 376, "percentage": 11.7},
{"question": "Question 2", "type": "Strongly disagree", "value": 2, "percentage": 18.2},
{"question": "Question 2", "type": "Disagree", "value": 2, "percentage": 18.2},
{"question": "Question 2", "type": "Neither agree nor disagree", "value": 0, "percentage": 0},
{"question": "Question 2", "type": "Agree", "value": 7, "percentage": 63.6},
{"question": "Question 2", "type": "Strongly agree", "value": 11, "percentage": 0},
{"question": "Question 3", "type": "Strongly disagree", "value": 2, "percentage": 20},
{"question": "Question 3", "type": "Disagree", "value": 0, "percentage": 0},
{"question": "Question 3", "type": "Neither agree nor disagree", "value": 2, "percentage": 20},
{"question": "Question 3", "type": "Agree", "value": 4, "percentage": 40},
{"question": "Question 3", "type": "Strongly agree", "value": 2, "percentage": 20},
{"question": "Question 4", "type": "Strongly disagree", "value": 0, "percentage": 0},
{"question": "Question 4", "type": "Disagree", "value": 2, "percentage": 12.5},
{"question": "Question 4", "type": "Neither agree nor disagree", "value": 1, "percentage": 6.3},
{"question": "Question 4", "type": "Agree", "value": 7, "percentage": 43.8},
{"question": "Question 4", "type": "Strongly agree", "value": 6, "percentage": 37.5},
{"question": "Question 5", "type": "Strongly disagree", "value": 0, "percentage": 0},
{"question": "Question 5", "type": "Disagree", "value": 1, "percentage": 4.2},
{"question": "Question 5", "type": "Neither agree nor disagree", "value": 3, "percentage": 12.5},
{"question": "Question 5", "type": "Agree", "value": 16, "percentage": 66.7},
{"question": "Question 5", "type": "Strongly agree", "value": 4, "percentage": 16.7},
{"question": "Question 6", "type": "Strongly disagree", "value": 1, "percentage": 6.3},
{"question": "Question 6", "type": "Disagree", "value": 1, "percentage": 6.3},
{"question": "Question 6", "type": "Neither agree nor disagree", "value": 2, "percentage": 12.5},
{"question": "Question 6", "type": "Agree", "value": 9, "percentage": 56.3},
{"question": "Question 6", "type": "Strongly agree", "value": 3, "percentage": 18.8},
{"question": "Question 7", "type": "Strongly disagree", "value": 0, "percentage": 0},
{"question": "Question 7", "type": "Disagree", "value": 0, "percentage": 0},
{"question": "Question 7", "type": "Neither agree nor disagree", "value": 1, "percentage": 20},
{"question": "Question 7", "type": "Agree", "value": 4, "percentage": 80},
{"question": "Question 7", "type": "Strongly agree", "value": 0, "percentage": 0},
{"question": "Question 8", "type": "Strongly disagree", "value": 0, "percentage": 0},
{"question": "Question 8", "type": "Disagree", "value": 0, "percentage": 0},
{"question": "Question 8", "type": "Neither agree nor disagree", "value": 0, "percentage": 0},
{"question": "Question 8", "type": "Agree", "value": 0, "percentage": 0},
{"question": "Question 8", "type": "Strongly agree", "value": 2, "percentage": 100}
]
},
"transform": [
{
"calculate": "if(datum.type === 'Strongly disagree',-2,0) + if(datum.type==='Disagree',-1,0) + if(datum.type =='Neither agree nor disagree',0,0) + if(datum.type ==='Agree',1,0) + if(datum.type ==='Strongly agree',2,0)",
"as": "q_order"
},
{
"calculate": "if(datum.type === 'Disagree' || datum.type === 'Strongly disagree', datum.percentage,0) + if(datum.type === 'Neither agree nor disagree', datum.percentage / 2,0)",
"as": "signed_percentage"
},
{"stack": "percentage", "as": ["v1", "v2"], "groupby": ["question"]},
{
"joinaggregate": [
{
"field": "signed_percentage",
"op": "sum",
"as": "offset"
}
],
"groupby": ["question"]
},
{"calculate": "datum.v1 - datum.offset", "as": "nx"},
{"calculate": "datum.v2 - datum.offset", "as": "nx2"}
],
"mark": "bar",
"encoding": {
"x": {
"field": "nx",
"type": "quantitative",
"axis": {
"title": "Percentage"
}
},
"x2": {"field": "nx2"},
"y": {
"field": "question",
"type": "nominal",
"axis": {
"title": "Question",
"offset": 5,
"ticks": false,
"minExtent": 60,
"domain": false
}
},
"color": {
"field": "type",
"type": "nominal",
"legend": {
"title": "Response"
},
"scale": {
"domain": ["Strongly disagree", "Disagree", "Neither agree nor disagree", "Agree", "Strongly agree"],
"range": ["#c30d24", "#f3a583", "#cccccc", "#94c6da", "#1770ab"],
"type": "ordinal"
}
}
}
}
GET https://kroki.io/vegalite/svg/eNq9WF1v4jgUfe-vsNwZsatNQ74IUKkPlTqvq53dxwqNTGKCpyGhtmGKOv3vc21CCDglCUunD9Sx7z0-91zHN_brFUL4k4jmdEHwLcJzKZfitt9f04TYCZPz1dRmeX9roHtvUiZpfx3Y30WeYUv5x1REnC0lgw7AuEcxW1OesCxBQpLoicZoSjiK5oRLNMs5EjSTbAE_Asn8B-GxQAQ6JcpniLJkLtHzigqFJywAE8uUbACECLSkPAI_klCBfgA9lNGV5CRFnIolmEO3gOc4TtXsck6R8xktCH_aMp0Cm4TnqyxWRMEwE0vCAbAIhEilwiu04WlNUmABz4_6GaFXvKOlvL8WbeRiC7A2S6p6_5M8z5J0o2iThFOqBjUSjHoBPOxDgB7HHr5ZHeAf6lDHBuzYdjvB_k1BS8qRxkYZpKiO_sCcyB3Zg04z3R-DumNveIw6GNvjTqil6gZnfxganN1m0b32Oa2RxOsE__AhqO1S6hgLstMkRjaNVIa-HZ4ntsHVdTuT9c9Po9cN_OEi4vrdM_h_iRspNN7x4EyZL0E1aJ3A7mIH3V9Cr3m3C7qn0FjXoe13mqb5NQx8e3Se1gZbYz_1h82qDD4wj4OmPBr6Bs176aB7Gv1zlsvgdHE0xA7D5uI1aJdIs5i3wA5bJ_KcVR12TmVX0DM31TapDE-mcmx85HSlfuIjp-ZrofF1H37gKzm8fGkcXmBf9brN0lwaR855Kl9Aj9EHpm90-fSNfse36ehk9i6lcYvdwnHeNPIEfvUk27MmnH0X5XnytZgbRySNVimRehY2-wNOoauFraZFd3d3qGckt2fdeJbzJ_oLHViDce9hb-LWmABg733xe5ZT73PXu9-Ou--NH4rTsxQ_vFMXE3WKxs_fch5TjnVvIX1rEcrA0M-fqIVChc0-Le8wRyf1MFBQH9WFJliS0fhbZREcBIn1NYgyrFhYhfMjXuuz7NrDE_inrieW040eKBfl5Fiu7znLSAIkk61kuyuKvYk2mzGaxvUErapdvtRGq8Vh9za4fDYTVOJy4K1oTUoR6jkfSnCQ4K2saxfdFAoXc-w0wdkLPunpnfD0sGKo2WF99XOrLn749oqHZlEesyzZX_O8lM2qYECgDG-3AzyvSCaZJJKtaWUFvDBRgVD2TKba4Z-j9bDTrggNA1VwrE7q7cLGm1papboGuSxfwJJIW_H6eoyCyizDd4lV9YieFMiMpIJW-mGqLy9S3ZvBF5hTGYjzBWHZzqM26ChPc14bnA6lObCUJlRf4NWF9m9xD1gKXroJWEf00Ktk-1hfQaul73TNKovNUZWYVLSBCqCrwyO-jnwn9vR563rmk8FIH6CvI_2nm-MgCmOim-5w6JDpAdJOGthPtTSHOquac_V29QtUFWNO
wavedrom.json
{ signal: [
{ name: "clk", wave: "p.....|..." },
{ name: "Data", wave: "x.345x|=.x", data: ["head", "body", "tail", "data"] },
{ name: "Request", wave: "0.1..0|1.0" },
{},
{ name: "Acknowledge", wave: "1.....|01." }
]}
GET https://kroki.io/wavedrom/svg/eNqrVijOTM9LzLFSiOZSUKhWyEvMTbVSUErOyVbSUYCB8sQykGCBHgjUALGSQq0OsnKXxJJEhHqo8go9YxPTihpbvQqgVApQBdAOpYzUxBQgVykpP6USRJckZuaAaJC8UiyasUGphaWpxSVQk6HGGugZ6ukZ1BjqGcBcgarJMTk7L788JzUlPRWoEarJEOJ0A0OQ07lia7kA0RBBtQ==
wiring.yaml
options:
bgcolor: "#ffffff00"
connectors:
X1:
type: D-Sub
subtype: female
pinlabels: [DCD, RX, TX, DTR, GND, DSR, RTS, CTS, RI]
X2:
type: Molex KK 254
subtype: female
pinlabels: [GND, RX, TX]
cables:
W1:
gauge: "0.25 mm2"
length: 0.2
color_code: DIN
wirecount: 3
shield: true
connections:
-
- X1: [5,2,3]
- W1: [1,2,3]
- X2: [1,3,2]
-
- X1: 5
- W1: s
GET https://kroki.io/wireviz/svg/eNqNkFFrgzAQx9_9FId7jcPG-ZLXCqOU9kGFFooMTa9WiIlopNu3X3J2Q_a0QI7cj7vc__5msJ3RkwgAmlYaZUYB4cuNThyHQSCN1iitGanmvPERwH4NKCCLirmhfJqbBd2wrxUSGzqt6gbVJOCSbTMG-ZlB6W5W5gzej45khXvlZcFg60O-q_wMvp5xMAo_Yb8Hnr79axR9vIyqnPy6UUjST0_pbT23rjuMX3kKfc9Dogp1a-8CHKWcrPiQ5urX3B2JPboRpZm1FZAsUu4dqqsAO87469SPnRGVRN4yuKSMs6R6kpMnmzVxK3uSMF796UxXPdM3-SBvug==