This page is the reference for the flowss engines built for teaching, research and scholarship: typeset mathematics, digital logic and economics; physics, engineering and architecture; chemistry, biology and medicine; research methods such as causal diagrams and PRISMA flows; geology and archaeology; linguistics; music; and games. For each engine you get what it draws, a working example you can paste straight into the Studio, the syntax and options, what flowss works out or checks for you, its limits, and the messages you may see. Most of these engines are built into flowss and do more than draw: a pedigree tells you which inheritance modes survive, a causal DAG lists the variables to adjust for, a logic circuit derives its own truth table and a PRISMA flow proves that every record is accounted for. Charts and plotted formulas are covered in Charts and data-visualisation engines.
At a glance
| Engine | Use it for | Drawn | What flowss works out or checks | Reference |
|---|---|---|---|---|
| LaTeX (KaTeX) | Typeset equations | In your browser | Formulas that will not render, bare % signs, x^10-style scripts, input LaTeX itself would reject | katex |
| Digital logic (gates / K-map / truth table) | Gate schematics, Karnaugh maps and truth tables | Inside flowss | The truth table and boolean expression of every output, feedback, undriven outputs, constant outputs, incomplete maps and tables | logic |
| Economics diagrams | Supply and demand, IS–LM, Phillips, PPF, Lorenz, payoff matrices | Inside flowss | Curves with no slope, lines that never cross in the frame, a Lorenz curve that falls, missing payoff cells | econ |
| Free-body diagram | Forces and moments on bodies | Inside flowss | Forces acting on undeclared bodies, zero-length forces, unloaded bodies, unknown colours | freebody |
| Circuit schematic | Textbook schematics | Inside flowss | Parts with no symbol, parts no wire reaches, parts drawn on top of each other | circuit |
| Phase diagram (materials) | Pressure–temperature and binary alloy diagrams | Inside flowss | A critical point below the triple point, labels off the frame, a liquid label below the liquidus, missing melting points | phase |
| Astronomy (orbital + HR) | Orbital maps and Hertzsprung–Russell diagrams | Inside flowss | Impossible distances, temperatures and luminosities, bodies sharing an orbit, stars off the axes | astro |
| System dynamics (stock & flow) | Stock-and-flow models | Inside flowss | Flows and links whose ends name nothing, stocks that cannot change | sysdynamics |
| Floor plan (2D), Floor plan (3D), Floor plan (3D WebGL) | Architectural floor plans, printable axonometric views, an interactive 3D view | Inside flowss (2D, 3D); in your browser (3D WebGL) | Captions that would not fit, openings on no wall, unknown views, non-positive wall heights | floorplan, floorplan3d, floorplan3d-edit |
| 3D Molecules (3Dmol) | Proteins from the PDB and small molecules in 3D | In your browser | Impossible bond lengths, atom clashes, unknown elements, valence, atom counts, formulas that do not match the name | mol3d |
| Phylogeny (Newick) | Phylogenetic trees | Inside flowss | Duplicate and unnamed tips, negative branch lengths, partly measured trees | newick |
| Genetics pedigree | Clinical pedigrees | Inside flowss | Which of six inheritance modes survive, and who rules each one out | pedigree |
| Anatomy / body systems | Labelled anatomy plates | Inside flowss | Labels off the plate, labels on top of each other, unknown plates | anatomy |
| Drug-interaction network | Interactions graded by severity | Inside flowss | Interactions with undeclared drugs, ungraded or unknown severities, repeated pairs | drugnet |
| Causal DAG | Causal diagrams for inference | Inside flowss | Cycles, backdoor paths, minimal adjustment sets, identifiability, mislabelled confounders and mediators | causaldag |
| PRISMA 2020 flow | Systematic-review flow diagrams | Inside flowss | That every stage balances, with the arithmetic printed | prisma |
| FlowScript | Typed research models whose numbers propagate | Inside flowss | Counts that do not add up, sourced numbers | glyphscript |
| Stratigraphy / Harris matrix | Stratigraphic columns and Harris matrices | Inside flowss | Layers out of age order, unconformities, cycles in the matrix | strat |
| Syntax tree (linguistics) | Constituency and parse trees | Inside flowss | Dropped words, unclosed brackets, text after the tree | syntaxtree |
| Music notation | Single-voice melodies on a staff | Inside flowss | Bars that do not add up to the time signature | music |
| Piano roll (MIDI) | Melodies on a keyboard grid | Inside flowss | Unreadable pitches, zero-length notes, notes past the grid, overlaps | pianoroll |
| Music chords (cycle of fifths) | Cycle of fifths and chord progressions | Inside flowss | Highlighted chords not on the wheel, missing numerals | chord |
| Chess (FEN) | Board positions | Inside flowss | Unreadable FEN, impossible king counts, pawns on the back rank, impossible material, unsupported castling rights | chess |
| Tournament bracket | Single-elimination brackets | Inside flowss | Winners who did not play, unknown entrants, loops, a team twice in one round | tournament |
| Raw SVG | Hand-written schematics and illustrations | In your browser | Broken tags, dangling references, duplicate ids, a missing namespace or viewBox | svg |
Every engine on this page is available on every plan, including Free, and the engines themselves are not metered. (Free does limit how many figures you keep, to three per studio.) FlowScript also opens in the Lab. Only the optional AI features (Explain & fix, automatic repair, Fix on a readiness finding, AI conversion and TikZ export) need AI: there is no AI on Free, your own AI key works from Starter, and hosted AI points start on Plus. See Plans and what they include.
Working with these engines
Opening an engine
- In the Studio, click Engines & templates at the top of the tool rail, or the engine name at the top of the code sheet. The library opens with its Engines and Templates tabs. (
/opens it on the Templates tab.) - Search for the engine by name, by subject ("equation", "pedigree", "phylogeny", "circuit", "causal", "PRISMA", "chess") or by the tool you are replacing ("DAGitty", "FigTree", "PyMOL", "Logisim", "RSyntaxTree").
- Click the engine. Its starter (its first template) replaces the current figure's source. The switch is one undo step, so
⌘Z(Ctrl+Zon Windows and Linux) brings your source back. Start a New figure (⌥⌘N) first if you want to keep both.
You can also click Open in Studio on any engine's reference page (for FlowScript the button reads Open in Lab), or filter the template gallery by engine, for example /templates?engine=pedigree. In the Studio's engine library these engines are grouped as follows; see Choosing an engine.
| Library group | Engines from this page |
|---|---|
| Research & analysis | Causal DAG, PRISMA 2020 flow, Genetics pedigree, Free-body diagram, Phase diagram |
| Engineering & physical | Circuit schematic, Floor plan (2D), Floor plan (3D), Drug-interaction network, Syntax tree, Stratigraphy |
| Domain-specific | 3D Molecules, Phylogeny, LaTeX (KaTeX), Anatomy, Music notation, Piano roll, Chess, Tournament bracket, Astronomy, Digital logic, System dynamics |
| Charts & data | Music chords |
| More | Economics diagrams, FlowScript, Floor plan (3D WebGL), Raw SVG |
Where the picture is drawn
| Group | Engines on this page | What it means for you |
|---|---|---|
| Inside flowss | Every engine on this page except the four below | Works offline. The source never leaves flowss. The render API can draw it on a server for thumbnails, embeds and automated reports |
| In your browser | LaTeX (KaTeX), 3D Molecules (3Dmol), Floor plan (3D WebGL), Raw SVG | Works in the browser. The headless render API refuses these with the code needs-browser; use the Studio or an embed |
3D Molecules also needs a connection when a document uses fetch:, because the structure is downloaded from the RCSB Protein Data Bank. None of the engines on this page uses an outside render service.
Size budgets
| Engines | Budget (bytes of source) |
|---|---|
| Raw SVG | 500,000 |
| PRISMA 2020 flow | 300,000 (the engine itself reads up to 20,000 characters) |
| Phylogeny (Newick), Piano roll (MIDI) | 150,000 (they grow with the data) |
| LaTeX (KaTeX), 3D Molecules, Floor plan (3D WebGL) | 100,000 |
| Every other engine on this page | 60,000 |
A source over budget is not drawn, and the message reads "Source is … — past the … safe-rendering budget for … Rendering this in the browser would freeze the page." with options to split the figure, render it on the server (engines drawn inside flowss only) or trim it. Bytes are counted in UTF-8, so symbols such as β, ° and → count as two or three.
Checks, findings and readiness
Every engine on this page has a checker. Its findings appear in up to four places:
- Inside the figure. Genetics pedigree, Causal DAG, Stratigraphy, Digital logic and PRISMA 2020 flow print a headline and their key findings under the drawing. Astronomy, Anatomy, Phase diagram and Floor plan print notices for anything they could not draw as written.
- The readiness chip in the Studio's status panel. A figure whose checks fail cannot read as Sound. Open the chip's detail to see what is Blocking or Holding it at a level, and use Fix beside a single finding to hand it to the flowss Studio Agent.
- Diagram Intelligence (
⇧⌘X) adds metrics and insights for Causal DAG (backdoor paths, a sufficient adjustment set, over-adjustment risk), Digital logic (gates, depth, truth rows, minterms, floating inputs, constant outputs), Phylogeny (leaves, depth, distances, tree shape), Chess (pieces, material balance, exposed kings, centre occupancy and side to move) and FlowScript. See Flow-systems analysis in Studio. - The Render error box, when a figure cannot be drawn at all. Go to line jumps to the line it names, and Explain & fix hands the error to AI.
A checker that could not read part of a document never calls the result complete: it names the unread line, and "clean" verdicts wait until everything has been read.
Conventions shared by the native engines
- Line-based. One statement per line. Blank lines are ignored.
- Comments. A line starting with
#or//is a comment. (Chess and Phylogeny use#lines for their own directives, as described below.) - Quotes. Put labels with spaces in double quotes, for example
region "Supercritical fluid" at (0.85, 0.85). - Colours. Where an engine takes a
color, it accepts the named colours listed with that engine or a hex colour such as#dc2626. Anything else falls back to the default colour, and the checker reports it where the engine has a colour check. - Coordinates. Each engine has its own coordinate system:
| Engine | Coordinates |
|---|---|
| Circuit schematic, Digital logic | Grid cells, 60 pixels apart; x to the right, y downwards |
| Free-body diagram | Pixels; x to the right, y downwards, so vector 0,140 points down |
| Floor plan (all three) | World units of your choosing, rescaled to fit; x to the right, y downwards |
| Anatomy / body systems | Fractions of the plate, 0 to 1; (0, 0) is the top-left corner |
| Phase diagram | Fractions of the plot frame, 0 to 1; (0, 0) is the bottom-left corner |
| System dynamics | Grid positions; x to the right, y downwards |
Other places in flowss for science
| You need | Go to |
|---|---|
| Illustrated scientific figures on an icon canvas, 2-D chemical structures from SMILES, reactions balanced and units checked as you draw | The Science studio; the verification model is explained in The Science studio in depth |
| Typed research models: CONSORT flows, cost-effectiveness planes, reporting standards | The Lab and The FlowScript language |
| Systematic reviews from real papers, with PRISMA flows computed from screening | Evidence and Screening, extraction and synthesis |
| Journal-ready figures from a dataset, with statistics | Figure |
| A plotted formula or XY data | Plot |
| A LaTeX/TikZ version of any figure for a paper | Export as TikZ / LaTeX (⌘L), an AI conversion described in Data, timeline, TikZ and the diagram tools |
| Learning material built around diagrams | Study |
Mathematics and logic
LaTeX (KaTeX)
LaTeX (KaTeX) typesets mathematics: equations, derivations, matrices, aligned systems and commutative-style arrays, using KaTeX 0.17. Each formula is typeset in display style. Separate formulas with a blank line.
\int_0^\infty e^{-x^2}\,dx = \frac{\sqrt{\pi}}{2}
\nabla \cdot \mathbf{E} = \frac{\rho}{\varepsilon_0}
\begin{aligned}
(a+b)^2 &= a^2 + 2ab + b^2 \\
(a-b)^2 &= a^2 - 2ab + b^2
\end{aligned}
How it works:
- One formula per block. Blocks are separated by one or more blank lines. Lines within a block are joined, so a long formula can be spread over several lines, but must not contain a blank line. Use
\\insidealigned,gathered,casesor a matrix environment for line breaks within one formula. - Maths only. KaTeX typesets maths. It does not run full LaTeX documents,
\usepackage,\documentclassor TikZ pictures. For a LaTeX picture of a diagram, use Export as TikZ / LaTeX. - Macros are local. A
\newcommandor\defapplies only within the block where it is written. - Errors stay visible. A formula KaTeX cannot read is shown in red in place of the formula, and the rest of the document still typesets.
- The formulas are drawn at 20 pixels in the Studio, centred, up to 900 pixels wide.
What flowss checks (each formula is run through KaTeX itself, so the check cannot disagree with what you see):
| Finding | Level | Meaning |
|---|---|---|
| A formula does not render | Error | KaTeX's own message is quoted, with the formula number |
A bare % | Error | % starts a comment and drops the rest of that line, including any closing brace; write \% for a percent sign |
A multi-digit script such as x^10 or a_12 | Error | A script takes one token unless braced, so x^10 is drawn as x¹0; write x^{10} |
| A formula KaTeX accepts but LaTeX would not | Warning | KaTeX's strict-mode code and message are quoted |
Tip: Use Export PNG or Export PDF for KaTeX. Equations are typeset as HTML rather than SVG, so Export SVG either refuses with "This engine doesn't render to SVG. Try PNG or PDF — both work for any engine." or, when a formula contains a stretchy symbol such as a square root, captures only that one symbol. Copy diagram as PNG works; Copy diagram as SVG has the same limitation as SVG export.
Digital logic (gates / K-map / truth table)
Digital logic covers the undergraduate digital-logic curriculum in one engine with three modes, chosen with type. In every mode flowss evaluates what you drew: a gate diagram gets its truth table and the boolean expression of each output in your own signal names, and a Karnaugh map or truth table is checked for completeness.
Gate schematics (type gates):
title "Half adder"
type gates
input A at (0,0)
input B at (0,2)
gate XOR G1 at (3,0.5)
gate AND G2 at (3,2.5)
output S at (6,0.5)
output C at (6,2.5)
wire A G1
wire B G1
wire A G2
wire B G2
wire G1 S
wire G2 C
| Statement | Meaning |
|---|---|
type gates | Gate-schematic mode |
input ID at (X,Y) | An input signal |
output ID at (X,Y) | An output signal |
gate KIND ID at (X,Y) | A gate. KIND is AND, OR, NOT, NAND, NOR, XOR, XNOR or BUF |
wire FROM TO | A connection from one id to another |
Positions are in grid cells and may be decimals, such as (3,0.5). The figure prints a headline such as "Evaluated: 2 inputs, 2 outputs, 4 rows.", up to four problems and up to three derived expressions. A circuit with feedback (a latch, for example) has no single truth table; flowss names the loop and withholds the table rather than evaluating it in an arbitrary order.
Karnaugh maps (type kmap, up to four variables):
title "Y = A xor B"
type kmap
vars A B
cells 00=0 01=1 10=1 11=0
vars names the variables. cells lists cells as KEY=VALUE, where the key is the input combination in bits (such as 01) or the cell's index (such as 1), and the value is 0, 1 or X (don't care). You can spread cells over several cells lines. Rows and columns are Gray-coded and 1-cells are highlighted.
Truth tables (type truthtable):
title "Majority of three"
type truthtable
inputs A B C
output Y
row 0 0 0 -> 0
row 0 0 1 -> 0
row 0 1 0 -> 0
row 0 1 1 -> 1
row 1 0 0 -> 0
row 1 0 1 -> 1
row 1 1 0 -> 1
row 1 1 1 -> 1
A complete table is drawn with output-coloured cells and its sum-of-products expression, here "Y = ¬A · B · C + A · ¬B · C + A · B · ¬C + A · B · C". Each row lists the input bits, then -> and the output bit.
Note: Writetype truthtablebefore theoutputline. Until the type is known,output Ywithout a position is not read as the table's output.
What flowss checks:
| Mode | Findings |
|---|---|
| Gates | An output driven by two gates (error); an output nothing drives, a gate with nothing on its inputs, a gate with the wrong number of inputs (a NOT with two, an AND with one), a gate whose output goes nowhere, an input that is itself driven, an output that is the same in every row, two outputs computing the same function, an input no output depends on, an id that appears only in a wire, an id declared twice (warnings); feedback, an unwired input and a repeated wire (notes) |
| K-map | No vars line (unchecked gap); more than four variables (the extras are on neither axis), cells with no value (drawn blank, which reads as zero), cells that cannot be read or placed, and cells written twice with different values (warnings) |
| Truth table | Missing inputs (unchecked gap); rows of the wrong width (error); combinations missing or stated twice (warnings) |
| All modes | Unreadable lines, an empty document and a cap that bit (unchecked gaps). In gate mode, a circuit with no inputs, no outputs or more than 12 inputs is not evaluated, which is also an unchecked gap |
Limits: 400 gates and signals, 1,500 wires, and truth tables are evaluated for up to 12 inputs (4,096 rows).
Economics diagrams
Economics diagrams draws the standard teaching figures. Pick the figure with type: supply-demand (the default), is-lm, phillips, production-possibility, payoff-matrix or lorenz.
title "Market for coffee"
type supply-demand
supply slope 0.8 intercept 10
demand slope -1 intercept 90
shift demand right
label "P* ≈ 45"
title "Pricing game"
type payoff-matrix
players "Firm A" "Firm B"
strategies-row "High price" "Low price"
strategies-col "High price" "Low price"
cell (0,0) 10 10
cell (0,1) 0 15
cell (1,0) 15 0
cell (1,1) 5 5
| Statement | Used in | Meaning |
|---|---|---|
supply slope S intercept I, demand slope S intercept I | supply-demand | A straight curve y = I + S × x on axes running from 0 to 100. The intercept defaults to 50 |
is … and lm … | is-lm | The IS and LM curves, written the same way |
phillips … | phillips | The Phillips curve, written the same way |
shift CURVE left or shift CURVE right | Curve figures | Draws the shifted curve, with the original faded and dashed for comparison. CURVE is supply, demand, is or lm, and the shift line must come after the line that defines that curve. right raises the curve's intercept by 15 and left lowers it by 15 (see the warning below) |
ppf points (X,Y) (X,Y) … | production-possibility | The frontier through the given points, on 0–100 axes labelled Good X and Good Y |
lorenz points (X,Y) (X,Y) … | lorenz | The Lorenz curve, on % population and % income axes, with the line of equality |
players "A" "B", strategies-row "…" "…", strategies-col "…" "…", cell (ROW,COL) A B | payoff-matrix | A two-player payoff matrix. Rows and columns count from 0; each cell gives player A's and player B's payoffs |
label "…" | Any | A note printed as a bullet under the figure |
Axes are labelled for each figure: Quantity (Q) and Price (P) for supply and demand, Income (Y) and Interest rate (r) for IS–LM, Unemployment and Inflation for the Phillips curve. Curves are labelled S, D, IS, LM or PC and are clipped to the frame. In a payoff matrix the first player chooses the row and is named down the left side, the second chooses the column and is named across the top; in each cell the first player's payoff sits top-left (red) and the second player's bottom-right (blue).
Warning: A shift moves the intercept, not the curve sideways. For a downward-sloping curve (demand, IS)shift … rightis a shift to the right, as expected. For an upward-sloping curve (supply, LM) raising the intercept moves the line up and to the left, soshift supply rightdraws a decrease in supply. To draw an increase in supply, writeshift supply left, and check the figure.
What flowss checks: a curve keyword with no slope (the curve is not drawn), payoff cells outside the declared strategies, unreadable lines (errors); supply and demand, or IS and LM, that never cross inside the frame, a curve that lies entirely outside the frame, a curve that belongs to a different figure type, missing payoff cells, and a Lorenz curve that falls (warnings); and a figure type with nothing to draw, such as type lorenz with no lorenz points line (unchecked gap).
Physics, engineering and the built environment
Free-body diagram
Free-body diagram draws bodies with force vectors and moments, in a true coordinate system so the arrows are physically faithful, with an optional hatched surface.
title "Block on a 30° incline"
surface "30° incline"
body B at 320,200 size 100,70 label "10 kg"
force W on B vector 0,140 color red label "W = 98 N"
force N on B vector -60,-104 color blue label "N = 85 N"
force f on B vector -90,52 color green label "f = μN"
| Statement | Meaning |
|---|---|
title "…" | The figure title |
surface "…" | A hatched surface line under the bodies, with its caption |
body ID at X,Y [size W,H] [label "…"] | A rectangular body whose top-left corner is at X,Y. The size defaults to 80 × 60 |
force ID on BODY vector DX,DY [color C] [label "…"] | An arrow from the body's centre. Positive DY points down; negative values reverse the arrow |
moment ID on BODY value V [color C] [label "…"] | A three-quarter curved arrow around the body's centre. A positive value is drawn clockwise and a negative one anticlockwise. Without a label, the value is printed |
Write coordinate pairs without spaces, as in at 320,200, size 100,70 and vector 0,140, and keep the parts of each statement in the order shown. Colours: red, blue, green, orange, purple, violet, indigo, pink, teal, cyan, amber, yellow, brown, grey, gray, slate, black, white, or a hex colour.
What flowss checks: a force or moment on a body that was never declared (it is drawn nowhere), a zero-length force or zero moment (errors); a body declared twice (its forces are drawn on both copies), a body with nothing acting on it, two forces with the same name on one body, and an unknown colour (warnings); and lines it could not read (unchecked gaps). A body is not required to be in equilibrium, because a net force is often the point of the diagram. A document with no body shows "Add a body — body B at 300,200 size 100,70 label "10 kg"".
Circuit schematic
Circuit schematic draws textbook schematics with standard symbols on a grid. It is for lab notes, teaching and small designs, not a substitute for PCB design software.
title "RC low-pass filter"
component V V1 5V at (0,2) orient v
component R R1 1k at (2,1) orient h
component C C1 100n at (4,2) orient v
component GND G1 at (4,4)
wire (0,1) (1,1)
wire (3,1) (4,1)
wire (0,3) (4,3)
| Statement | Meaning |
|---|---|
component KIND ID [VALUE] at (X,Y) [orient h or v] | A part on the grid, with its designator and an optional value. orient defaults to h; write h and v in lower case |
wire (X1,Y1) (X2,Y2) | A straight wire between two grid points |
| Kind | Symbol |
|---|---|
R | Resistor (zigzag) |
C | Capacitor |
L | Inductor |
D | Diode |
LED | LED (diode with arrows) |
Q | NPN transistor |
V | Voltage source |
GND | Ground |
SW | Switch |
OP | Op-amp |
J | Junction dot |
F | Fuse |
Coordinates are whole grid cells. A two-terminal part's leads reach half a cell either side, so end a wire either on the part's own cell or on the next cell out in the direction of its leads; both are understood. A ground connects upwards, a junction only at its own cell, and a transistor or op-amp at any neighbouring cell.
What flowss checks: a kind with no symbol (drawn as a plain box), a part no wire reaches, and parts sharing one cell (errors); a designator used twice and a zero-length wire (warnings); a part reached only by a wire that crosses it without ending there (a note, because whether it is joined cannot be told from the source); and lines it could not read (unchecked gaps). The checker does not simulate the circuit.
Phase diagram (materials)
Phase diagram draws single-component pressure–temperature diagrams (type pt) and two-component alloy diagrams (type binary).
title "Water"
type pt
triple 273.16 0.006
critical 647 22064
fusion negative
region "Solid" at (0.15, 0.7) color blue
region "Liquid" at (0.55, 0.6) color teal
region "Gas" at (0.55, 0.15) color amber
title "Pb–Sn"
type binary
basis weight
component A "Pb" melting 327
component B "Sn" melting 232
eutectic 0.619 183
solvus 0.192 0.975
region "Liquid" at (0.5, 0.85)
region "α" at (0.05, 0.35)
region "β" at (0.95, 0.35)
region "α + β" at (0.5, 0.2)
| Statement | Used in | Meaning |
|---|---|---|
type pt or type binary | Both | Which diagram. Without a type line the diagram is drawn as pt, with a notice |
triple T P, critical T P | pt | The triple and critical points, drawn as markers with their values as captions |
fusion positive or fusion negative | pt | Which way the melting curve leans (water's is negative) |
component A "Name" melting T, component B "Name" melting T | binary | The two components and their melting points, which set the temperature axis |
basis atomic, basis weight or basis mole | binary | Captions the composition axis, for example "Composition (weight %)" |
eutectic C T, eutectoid C T, peritectic C T, monotectic C T | binary | An invariant reaction at composition C (a fraction from 0, pure A, to 1, pure B) and temperature T. More than one may be declared |
solvus A B | binary | The terminal solubility limits at the invariant temperature, as fractions |
region "Label" at (X,Y) [color C] | Both | A phase label at fractions of the frame, (0,0) bottom-left. Colours: red, blue, teal, amber, purple, green, pink, slate or hex |
Note: The curves of aptdiagram are schematic: their shapes are the same for every substance, and the values you declare set the markers and captions, not the paths between them. The figure says so in a caption: "Schematic — curve shapes are qualitative; the marked points carry the declared values." Abinarydiagram has a numeric temperature axis read from the two melting points. Without abasisline its composition axis is captioned simply "Composition".
What flowss checks: region coordinates off the frame, a critical point that is not above the triple point, non-positive fixed points, a binary diagram with an undeclared component or melting point, a melting point below absolute zero, a binary diagram with no boundary, and a "liquid" label placed below the liquidus (errors); no type line, a directive written twice, a statement that belongs to the other diagram type, an unrecognised colour, an unnamed phase field, and two components with the same name (warnings). An invariant composition outside 0 to 1, or a solvus whose limits are out of order, is refused and no horizontal or solvus is drawn for it. Lines it cannot read are unchecked gaps. What flowss cannot draw, such as type ternary, a third component, an invariant reaction it has no geometry for, or more distinct phase names than the diagram has fields, is reported as an unchecked gap, and the figure says what it could not draw.
Astronomy (orbital + HR)
Astronomy draws a Sun-centred orbital map (type orbital) or a Hertzsprung–Russell diagram (type hr).
title "Inner solar system"
type orbital
star "Sun"
planet "Mercury" radius 1 distance 0.39 color slate
planet "Venus" radius 2.5 distance 0.72 color amber
planet "Earth" radius 2.6 distance 1.00 color blue
planet "Mars" radius 1.4 distance 1.52 color red
title "Nearby stars"
type hr
star "Sun" temp 5778 lum 1 class G
star "Sirius A" temp 9940 lum 25 class A
star "Betelgeuse" temp 3500 lum 100000 class M
star "Proxima Centauri" temp 3042 lum 0.0017 class M
| Statement | Used in | Meaning |
|---|---|---|
type orbital or type hr | Both | The diagram type; orbital is the default. A type word that is neither is reported in a notice and drawn as orbital |
star "Name" | orbital | The central star's name |
planet "Name" radius R distance D [color C] | orbital | A planet drawn at D AU on a tilted elliptical orbit, sized by R |
star "Name" temp T lum L [class X] | hr | A star at temperature T (kelvin) and luminosity L (solar luminosities), coloured by temperature |
Keep the parts of planet and star lines in the order shown. The H–R diagram has a logarithmic, reversed temperature axis from 40,000 K to 2,500 K and a logarithmic luminosity axis from 10⁻⁴ to 10⁶ L☉, with the main sequence shaded. A star outside those ranges is pinned to the edge and the figure says how many were. Planet colours: red, orange, amber, yellow, green, teal, cyan, blue, indigo, violet, purple, pink, slate, stone, grey, gray, brown, black, white, or hex.
Warning: Puttype hrbefore yourstarlines. Astarline read while the diagram is still orbital is taken as the orbital system's central star.
What flowss checks: a missing type, distances at or below zero, temperatures or luminosities at or below zero, a planet with no distance, an H–R star missing temp or lum, two bodies with one name, and bodies sharing an orbit. Unreadable lines are listed under the figure.
System dynamics (stock & flow)
System dynamics draws Forrester-style stock-and-flow diagrams: stocks as rectangles, flows as double-line pipes with valves, clouds as sources and sinks, auxiliaries as circles, and information links as dashed arrows. It draws the model's structure; it does not simulate it.
title "SIR epidemic"
stock S "Susceptible" at (1,2) initial 990
stock I "Infected" at (4,2) initial 10
stock R "Recovered" at (7,2) initial 0
flow infection from S to I rate "β·S·I/N"
flow recovery from I to R rate "γ·I"
aux beta at (2.5,4) value 0.3 label "β"
aux gamma at (5.5,4) value 0.1 label "γ"
info beta -> infection
info gamma -> recovery
info S -> infection
info I -> infection
info I -> recovery
| Statement | Meaning |
|---|---|
stock ID ["Label"] at (X,Y) [initial N] | A stock, with its initial value as a caption |
cloud ID at (X,Y) | A source or sink outside the model |
flow ID from A to B [rate "…"] | A flow between stocks or clouds, with its rate expression |
aux ID at (X,Y) [value N] [label "…"] | An auxiliary variable or constant |
info FROM -> TO | An information link; TO may be a flow |
What flowss checks: a flow or link whose end names nothing (it is drawn nowhere, and every link pointing at that flow disappears with it) and unreadable lines (errors); a stock with no flow in or out, which cannot change and should probably be an aux, an id declared twice, and two nodes on the same grid position (warnings).
Floor plan (2D), Floor plan (3D) and Floor plan (3D WebGL)
The three floor-plan engines read the same language. Floor plan (2D) draws a top-down architectural plan with thick walls, door arcs, double-line windows, room labels, furniture and a scale bar. Floor plan (3D) draws the same source as a printable axonometric view with extruded walls. Floor plan (3D WebGL) shows it as an interactive 3D model you can orbit, pan and zoom with a mouse or by pinching; it is a viewer, and editing by clicking is not available yet.
title "Studio apartment"
grid 0.5
wall (0,0)-(10,0)
wall (10,0)-(10,8)
wall (10,8)-(0,8)
wall (0,8)-(0,0)
wall (4,0)-(4,4)
door at (4,2) width 1
window at (10,4) width 1.5
room "Living" at (7,5) area 48
room "Bedroom" at (2,3) area 16
furniture sofa at (7,6.5) size 3,1
furniture bed at (2,1.5) size 2,1.4
label "N" at (0.5,7.5)
| Statement | Meaning |
|---|---|
title "…" | The title |
grid N | A dot grid every N world units |
wall (X1,Y1)-(X2,Y2) | A straight wall |
door at (X,Y) [width W] | A door with its swing arc; takes its direction from the wall it sits on. Width defaults to 1 |
window at (X,Y) [width W] | A double-line window |
room "Name" at (X,Y) [area A] | A room caption, centred on the point, with an optional area |
furniture KIND at (X,Y) [size W,H] | A piece of furniture, centred on the point. Size defaults to 1 × 1 |
label "…" at (X,Y) | Free text that starts at the point and runs right |
view iso, view front, view side or view top | 3D engines only: the projection or camera position. iso is the default |
height H | 3D engines only: wall height in world units, default 2.7 |
Furniture kinds: sofa, bed, table, chair, fridge, stove, sink, toilet, shower, bathtub, desk, tv, plant and generic. Each is drawn as a labelled shape; an unknown kind is drawn as a generic box with its name.
Captions are measured, and the whole drawing is scaled down until they fit; a caption that cannot fit at any scale is clipped and named in a notice. An opening that sits on no wall is drawn flat and named in a notice, with the distance to the nearest wall. A grid so fine that it would need more than 2,000 lines on one axis is not drawn, and a notice says so. Lines that match none of the statements above are skipped without a notice, so check spelling if something is missing. The checks report text that is not on the sheet (error), anything drawn differently from what was written (warning), and, for the 3D engines, a view word that is not one of the four (for example view isometric) and a wall height of zero or less (errors), or a plan with no walls to extrude (warning).
Tip: For print, use Floor plan (2D) or Floor plan (3D). The WebGL view is made for exploring on screen: it is drawn on a WebGL canvas, so Export SVG refuses it and the render API cannot draw it. For a picture to keep, switch the same source to Floor plan (3D), which draws it as SVG.
Chemistry, biology and medicine
3D Molecules (3Dmol)
3D Molecules shows proteins and molecules in an interactive 3D viewer: drag to rotate and scroll to zoom. A document either downloads a structure from the RCSB Protein Data Bank or carries the coordinates itself.
fetch: 1CRN
3
Water
O 0.000 0.000 0.117
H 0.000 0.757 -0.469
H 0.000 -0.757 -0.469
| First line | Meaning |
|---|---|
fetch: ID | Download the structure with this four-character PDB ID (a digit, then three letters or digits, such as 1CRN or 4HHB) and draw it as a cartoon coloured along the chain |
format: xyz, pdb, sdf, mol2 or cube | The rest of the document is inline coordinates in that format, drawn as sticks |
| Anything else | The whole document is read as inline XYZ: an atom count, a name line, then one line per atom with a symbol and three coordinates in ångströms |
- A comment after the directive, such as
fetch: 1CRN # crambin, and leading blank lines are allowed. - Downloads are cached for the session (up to 24 structures), so editing a fetched document does not download it again. A download that takes more than 15 seconds is stopped with a message.
- The viewer fills the canvas, on a white background (dark blue in dark mode).
What flowss checks. Coordinates in XYZ and PDB documents (up to 20,000 atoms) are read and checked: bonds shorter than any real bond between those two elements, atoms on top of each other, unknown element symbols, and an XYZ atom count that disagrees with the atom lines (errors); pieces that are not bonded to each other, atoms with more bonds than they can have, and a set of atoms that does not match the molecule's name (warnings); elements that genuinely expand their octet are noted rather than flagged. A fetch: document is reported as unchecked, because its coordinates live on the server. SDF, MOL2 and cube coordinates are drawn but not checked.
Note: 3D Molecules is drawn on a WebGL canvas. Use Export PNG or Export PDF, which capture the current view; Export SVG refuses with "This engine doesn't render to SVG. Try PNG or PDF — both work for any engine."
Phylogeny (Newick)
Phylogeny draws phylogenetic trees from Newick, as a rectangular phylogram (the default) or a radial tree, with a scale bar when branches carry lengths.
# layout: rectangular
((Human:0.0067,Chimp:0.0072):0.0024,Gorilla:0.0089,Orangutan:0.0183);
- Write the tree in standard Newick: brackets for clades, commas between siblings,
:lengthafter a name or a closing bracket, and a final;. Spaces and line breaks between elements are allowed. - Choose the layout with a comment line before the tree:
# layout: radial(orcircular) for a radial tree,# layout: rectangular(orphylogram) for the default. - Tip names are drawn. Internal-node labels, such as bootstrap values, are read but not drawn.
- Up to 1,400 tips are drawn. A larger tree shows the first 1,400 and says so on the figure, for example "1,400 of 2,000 tips drawn — the rest are not shown".
What flowss checks: an unreadable tree ("This source is not a Newick tree: …", with an example of a valid tree) and duplicate tip names and negative branch lengths (errors); a tree where some branches have lengths and some do not, unnamed tips and internal nodes with a single child (warnings). It also states the spread of root-to-tip distances, which is expected in a phylogram and would indicate an error in a time-calibrated tree; flowss states it without judging, because Newick does not say which kind of tree it is.
Genetics pedigree
Genetics pedigree draws pedigree charts in standard clinical notation and works out which modes of inheritance the chart is consistent with.
title "Cystic fibrosis"
individual I1 sex male affected no gen 1 carrier yes
individual I2 sex female affected no gen 1 carrier yes
mating I1 I2
individual II1 sex male affected yes gen 2 parents I1 I2 proband yes
individual II2 sex female affected no gen 2 parents I1 I2
individual II3 sex male affected no gen 2 parents I1 I2
| Statement | Meaning |
|---|---|
individual ID [sex male, female or unknown] [affected yes] [carrier yes] [deceased yes] [proband yes] [gen N] [parents A B] [label "…"] | A person. m, f and ? also work for sex. Generation defaults to 1 |
mating A B | A mating line between two people |
| Notation | Drawn as |
|---|---|
| Male, female, unknown sex | Square, circle, diamond |
| Affected | Filled symbol |
| Carrier | Half-filled or dotted symbol |
| Deceased | A slash through the symbol |
| Proband | An arrow |
What flowss works out. Six modes are tested against the chart: autosomal dominant, autosomal recessive, X-linked dominant, X-linked recessive, Y-linked and mitochondrial. Each mode that does not fit is refuted by name, with the individual who rules it out. For the example above the figure reads "Consistent with 2 modes — autosomal recessive, X-linked recessive." and lists, for instance, "Autosomal dominant is ruled out: II1 is affected and neither parent is." It also notes matings between relatives (consanguinity), which matter most on a recessive pedigree.
| Finding | Level |
|---|---|
| No mode fits the chart, which means the chart contains a mistake | Error |
| A child with the same person named twice as parent, a person who is their own ancestor, someone marked both carrier and affected | Error |
| A parent named but never declared, a person declared twice, parents of the same sex, a child in an earlier generation than a parent, a carrier under a dominant mode | Warning |
Up to 600 people are read.
Anatomy / body systems
Anatomy places numbered labels on a built-in body plate, with leader lines to a stacked callout list on the right, for lecture slides and labelling exercises.
title "Cardiac chambers"
diagram heart
label "Right atrium" at (0.32, 0.30)
label "Left ventricle" at (0.62, 0.62) color red
label "Septum" at (0.47, 0.55)
| Statement | Meaning |
|---|---|
diagram PLATE | The plate: whole (the default), heart, lungs, kidney, brain, digestive or skeleton |
label "Text" at (X,Y) [color C] | A label at fractions of the plate from the top-left corner |
Colours: red, orange, amber, yellow, green, teal, cyan, blue, indigo, violet, purple, pink, brown, grey, gray, slate, black, white, or hex. A plate name the engine does not have is drawn as whole, with a notice listing the plates. The plates are schematic outlines; for detailed, illustrated biology figures use the Science studio.
What flowss checks: labels outside the 0–1 frame, labels on top of each other, a missing or unknown plate, and the same label used twice.
Drug-interaction network
Drug-interaction network draws drugs around a circle with interactions between them, coloured by severity: minor (slate), moderate (amber), major (red) and contraindicated (purple), with a legend. Hovering over an interaction shows its mechanism.
title "Anticoagulant review"
drug W "Warfarin" class anticoagulant
drug A "Amiodarone" class antiarrhythmic
drug S "Aspirin" class antiplatelet
interact W A "↑ INR" severity major mechanism "CYP2C9 inhibition"
interact W S "↑ bleeding" severity major
interact A S "↑ bleeding" severity moderate
| Statement | Meaning |
|---|---|
drug ID "Name" [class …] | A drug, with its therapeutic class shown under the name |
interact A B "Effect" [severity S] [mechanism "…"] | An interaction. S is minor, moderate, major or contraindicated |
What flowss checks: an interaction naming an undeclared drug (it is not drawn), a drug interacting with itself, and an unknown severity word (drawn in the mildest colour) are errors; a drug declared twice, a drug with no interactions, the same pair stated twice, and an ungraded interaction among graded ones are warnings; lines it cannot read are unchecked gaps.
Research methods
Causal DAG
Causal DAG draws causal diagrams for epidemiology and causal inference, colour-coded by role, and then analyses the arrows rather than the labels: it finds the backdoor paths, lists every minimal adjustment set, and tells you whether the effect can be estimated at all.
title "Smoking and lung cancer"
exposure E "Smoking"
outcome O "Lung cancer"
confounder C "Age"
mediator M "Tar deposits"
E -> M
M -> O
C -> E
C -> O
| Statement | Meaning |
|---|---|
exposure ID ["Label"] (also treatment, intervention) | The cause being studied |
outcome ID ["Label"] (also effect) | The effect being studied |
confounder ID ["Label"] (also covariate) | A variable you believe confounds the effect |
mediator ID ["Label"] | A variable on the causal path |
unobserved ID ["Label"] (also latent, unmeasured) | A variable you cannot measure |
node ID ["Label"] (also variable) | Any other variable |
A -> B (also -->, =>, →) | A causes B |
B <- A (also <=, ←) | The same arrow written the other way round |
A --- B (also --, <->, <=>, ↔) | An unmeasured common cause of A and B, drawn as a dashed double-headed arc |
For the example the figure reads "Identifiable — adjust for Age." and explains that conditioning on Age blocks every backdoor path from Smoking to Lung cancer.
| Finding | Level | Meaning |
|---|---|---|
| A cycle, an arrow from a variable to itself, two variables with arrows into each other | Error | A causal DAG cannot contain them; for mutual influence over time, draw the variables at each time point |
| A declared confounder that the arrows make a collider | Error | Adjusting for it would create a bias |
| A declared confounder that the arrows make a mediator | Error | Adjusting for it removes part of the effect |
| A declared confounder or mediator the arrows do not support | Warning | The label and the structure disagree |
| No simple identification strategy works | Warning | No set of observed variables blocks every backdoor path, no measured mediator opens a front door, and no variable acts as an instrument. Other methods (such as g-methods) are not checked, so this is not a proof that the effect is unidentifiable |
| A variable named only in an arrow, a variable declared twice | Warning | The role you meant is not the one used |
| No exposure or no outcome | Gap | Questions about confounding and adjustment are unanswered rather than passed |
| Minimal adjustment sets, front-door paths and instruments | Note | What you can do, stated as findings |
| The same arrow written twice, a variable with no arrows, no causal path from exposure to outcome | Note | Facts about the diagram rather than faults |
Limits: 300 variables, 1,200 arrows and 4,000 lines. Adjustment sets are searched over up to 20 candidate variables and up to six variables per set, and up to 24 minimal sets are listed. Past those limits flowss says the list is incomplete, or that it was not searched, rather than presenting part of it as the whole; whether any adjustment set exists is still decided.
PRISMA 2020 flow
PRISMA 2020 flow draws the systematic-review flow diagram and checks the arithmetic it is made of: at every stage, what came in, minus what left, is what remains.
title "Review of exercise interventions"
db_records 1450
register_records 86
duplicates 312
title_screened 1224
title_excluded 1001
abstracts_sought 223
abstracts_unavailable 9
fulltext_assessed 214
exclude_reason "Wrong population" 61
exclude_reason "Wrong outcome" 48
exclude_reason "Not randomised" 38
studies_included 67
Each line is a keyword and a whole number, written without thousand separators or units. Exclusion reasons are exclude_reason "Reason" COUNT.
| Stage | Keywords |
|---|---|
| Identification | In: db_records, register_records, other_records. Removed before screening: duplicates, excluded_auto, excluded_other. Remaining: title_screened |
| Screening | title_screened minus title_excluded leaves abstracts_sought |
| Retrieval | abstracts_sought plus other_sought (records from citation searching or websites that skip de-duplication), minus abstracts_unavailable and other_unavailable, leaves fulltext_assessed |
| Eligibility | fulltext_assessed plus previous_reports (for review updates), minus the exclusions, awaiting_classification and ongoing_studies, leaves reports_included or studies_included |
The exclusions at eligibility are the sum of the exclude_reason lines, or reports_excluded when you state it (for example because each report was given every applicable reason). reports_included and studies_included can both be stated, because one study may have several reports.
For the example the figure reads "Every record is accounted for: all 4 stages of the flow balance." and prints each sum, such as "Screening balances: 1,224 − 1,001 = 223 abstracts_sought." and "Identification balances: 1,450 + 86 − 312 = 1,224 title_screened (excluded_auto is not stated and read as zero)."
| Finding | Meaning |
|---|---|
| A stage does not balance | A count is wrong, or a reason for the difference is missing |
| A stage holds more than the one before it | Records only ever leave the funnel |
| More studies than reports included | Check whether a report describes more than one study |
| An exclusion count with no reason, a repeated reason, or reasons that do not add up to the exclusions | PRISMA 2020 asks for exclusions to be reported with their reasons |
| A keyword stated twice | The first is the one drawn and checked |
| A stage whose incoming count or remaining count is not stated | The stage is unchecked rather than clean; no arithmetic is attempted |
A removal count that is not stated, such as duplicates or excluded_auto | It is read as zero, and the stage's sentence names every term it read as zero, for example "(excluded_auto is not stated and read as zero)" |
| A value that is not a plain whole number | Treated as unstated rather than zero |
Limits: up to 20,000 characters and 600 lines are read; up to 40 exclusion reasons are drawn (every reason is still counted in the arithmetic), each up to 90 characters; counts up to 10,000,000. For reviews built from real screening data, Evidence computes the PRISMA flow for you.
FlowScript
FlowScript is the flowss language for typed research models: every element has a domain type such as study, cohort, arm or outcome, numbers propagate between them, and one model can be drawn as several publication views, such as a CONSORT flow.
study primary { design: "RCT" }
cohort screened { n: 1502 }
cohort eligible { n: 1240, from: screened, excluded: { ineligible: 198, declined: 64 } }
cohort randomised { n: 1200, from: eligible, excluded: { withdrew: 40 } }
arm control { n: 600, from: randomised, intervention: "Placebo" }
arm treatment { n: 600, from: randomised, intervention: "Drug X" }
view methods: consort(primary)
FlowScript is in the Studio's engine library, but its home is the Lab, with a property panel, compliance checking against reporting standards and publication export. The language is documented in The FlowScript language, and its views in Lab views and renderers.
Earth sciences and archaeology
Stratigraphy / Harris matrix
Stratigraphy draws stratigraphic columns for geology and archaeology (type column, the default) and Harris matrices of relative chronology (type harris), and checks the law of superposition.
title "Trench A — west section"
type column
layer "Topsoil" thickness 0.3 color "#6b4423" age "Modern"
layer "Roman floor" thickness 0.15 color "#dca56a" age "2nd century CE"
layer "Iron Age midden" thickness 0.4 color "#7c5a32" age "5th century BCE"
layer "Glacial till" thickness 1.0 color "#cbd5e1" age "Pleistocene"
title "Context sequence"
type harris
unit 100 "Topsoil"
unit 101 "Pit cut"
unit 102 "Pit fill"
unit 103 "Wall foundation"
above 100 102
above 102 101
above 101 103
| Statement | Used in | Meaning |
|---|---|---|
layer "Name" thickness T [color C] [age "…"] | column | A layer, listed from the top down, with its thickness in metres and depth ticks beside the column |
unit ID "Label" | harris | A context unit |
above UPPER LOWER | harris | UPPER physically overlies LOWER; units are levelled automatically |
Ages can be written as numbers with units (541-252 Ma, 2.6 Ma - now, > 115 ka, ~65 Ma, 12000 BP), as centuries or years (2nd century CE, 5th century BCE, 1066 CE), as named geological periods (Pleistocene, Late Cretaceous, Permian-Triassic), or as Modern, present, now, today, recent or current. Units understood include Ma, Ga, ka, yr and BP, and qualifiers such as Early, Middle and Late narrow a named period. Words such as gap, hiatus, unconformity, missing, eroded or unknown, or a ?, mark an age slot that is not an age; that layer's contacts are reported as unchecked.
What flowss works out. For the column above the figure reads "4 layers, 1.85 m, every contact the right way up — and 3 unconformities, the largest 9 thousand years." and lists each gap in time between layers. It reports a younger layer below an older one and a cycle in a Harris matrix (errors); a layer of zero or negative thickness, an above naming an undeclared unit, a unit declared twice and a unit with no relationships (warnings); and layers whose ages could not be read or were not given (unchecked gaps, because an inversion involving them would be invisible).
Limits: 400 layers, 400 units and 2,000 above relationships.
Language and humanities
Syntax tree (linguistics)
Syntax tree draws constituency and parse trees in the classic linguistics style: non-terminals in bold, words in italic at the leaves, each node centred over its children. It accepts Penn Treebank brackets or an indented outline.
(S (NP (DT The) (NN cat)) (VP (V sat) (PP (P on) (NP (DT the) (NN mat)))))
S
NP
DT The
NN cat
VP
V sat
In the indented form, each node is on its own line, indented two spaces per level, and a leaf line holds its label and its word.
What flowss checks: a word dropped because it sits beside child nodes, as in (NP the (NN cat)); an unclosed bracket that was closed for you at the end of the source; and text after the first complete tree, which is not read (all errors); and empty nodes (warning).
For other humanities figures see Timeline (history) and Argument map, both documented in Business, strategy and planning engines.
Music
Music notation
Music notation engraves a single-voice melody on one staff from a compact ABC-style syntax, for theory teaching, melody sketches and slides.
title "Twinkle, twinkle"
clef treble
key C
meter 4/4
notes: C C G G | A A G2 | F F E E | D D C2
| Statement | Meaning |
|---|---|
clef treble or clef bass | The clef (treble by default) |
key NAME | The key name, printed beside the staff, for example key G or key Bb |
meter N/D | The time signature, printed beside the staff (4/4 by default) |
notes: … | The notes. Several notes: lines continue the melody |
| Token | Meaning |
|---|---|
A to G | A note; upper case is the middle octave, lower case (a to g) an octave higher |
#, b, _ after the letter | Sharp, flat or natural |
| A number after the note | Duration: 1 whole, 2 half, 4 quarter (the default), 8 eighth, 16 sixteenth |
z and a number | A rest, for example z4 |
| The vertical bar character | A bar line |
A line without notes: is still read as notes when it consists only of note letters, accidentals, rests, durations, bar lines and spaces and contains at least one bar line, rest or number, so ordinary text is never mistaken for music.
What flowss checks: a bar whose notes do not add up to the time signature (an error, because the staff spaces the notes evenly and nothing shows the bar is short or long), and lines that are neither directives nor notes. A source with no notes at all says so instead of drawing an empty staff.
Note: This is not a full engraver. Chords, beams, slurs, ties, articulations, repeats and multiple voices are not supported, and the key is printed as a name rather than drawn as a key signature. The staff is one line about 920 pixels wide, so roughly two dozen notes and bar lines fit; split a longer melody across several figures.
Piano roll (MIDI)
Piano roll draws a melody as coloured note bars on a time grid, with a piano keyboard down the left side.
title "C major scale"
tempo 120
time 4/4
beats 8
note C4 at 0 length 1
note D4 at 1 length 1
note E4 at 2 length 1
note F4 at 3 length 1
note G4 at 4 length 1
note A4 at 5 length 1
note B4 at 6 length 1
note C5 at 7 length 1 color "#dc2626" velocity 100
| Statement | Meaning |
|---|---|
tempo N | The tempo, printed as "N BPM" (120 if not given) |
time N/D | The time signature; every bar is marked with a stronger grid line |
beats N | How many beats the grid shows. Without it the grid ends at the last note |
note PITCH at START length LENGTH [color C] [velocity V] | A note. PITCH is an upper-case letter, an optional # or b, and an octave (middle C is C4). START and LENGTH are in beats. Velocity (0–127) sets how strongly the note is shaded |
Colours can be hex values or CSS colour names; anything else uses the theme's accent colour. The keyboard spans two semitones below the lowest note to two above the highest.
What flowss checks: unreadable pitches (the note is left out), notes of zero length and unreadable lines (errors); notes that fall past the declared beats, and overlapping notes on the same pitch (warnings).
Music chords (cycle of fifths)
Music chords draws a two-ring cycle of fifths (type cycle, the default), with major keys outside and relative minors inside, or a chord progression as a strip of cards with Roman numerals (type progression).
title "Cycle of fifths"
type cycle
highlight C G Am Em
title "ii–V–I in C"
type progression
key C
chord Dm7 ii
chord G7 V
chord Cmaj7 I
| Statement | Meaning |
|---|---|
highlight NAME NAME … | Fill these wedges on the wheel |
key NAME | The key of a progression |
chord NAME [NUMERAL] | A chord card, with an optional Roman numeral |
Highlight names must match the wheel exactly. The majors are C, G, D, A, E, B, F#, C#, G#/Ab, D#/Eb, A#/Bb and F; the minors are Am, Em, Bm, F#m, C#m, G#m, D#m, A#m, Fm, Cm, Gm and Dm. So write G#/Ab, not Ab. A name that is not on the wheel fills nothing and is reported as an error, as is a line the engine cannot read. flowss also warns about progression chords with no Roman numeral (the slot under the chord is drawn blank), and about chord lines on a cycle or highlight lines on a progression, which that figure type does not draw.
Games
Chess (FEN)
Chess draws print-quality boards from Forsyth–Edwards Notation, with Unicode pieces, file and rank labels and a side-to-move marker.
# title: Opera Game — final position
# subtitle: Morphy v Duke of Brunswick, Paris 1858
1n1Rkb1r/p4ppp/4q3/4p1B1/4P3/8/PPP2PPP/2K5 b k - 1 17
- One FEN per board. Separate boards with a blank line; they are laid out in a grid of up to three per row, which suits opening sequences and puzzle sets.
- Optional
# title:and# subtitle:lines above a FEN become that board's caption. Any other line starting with#is a comment. - A
position:prefix before a FEN, as some chess databases export it, is accepted. - Boards are drawn from White's side.
What flowss checks: a FEN that cannot be read (the reason is printed in the board's place), a king count other than one per side and pawns on the first or eighth rank (errors); material that cannot arise in a game, and castling rights whose king or rook is not on its home square (warnings). Diagram Intelligence adds a material count and piece census.
Tournament bracket
Tournament bracket draws single-elimination brackets. Rounds are worked out from which matches feed which, winners are highlighted in amber and scores are shown beside each team.
title "Semi-finals and final"
team T1 "Argentina"
team T2 "Brazil"
team T3 "France"
team T4 "Spain"
match SF1 T1 vs T2 winner T1 score "2-1"
match SF2 T3 vs T4 winner T4 score "0-1"
match FINAL SF1 vs SF2 winner T1 score "3-3 (4-2 pens)"
| Statement | Meaning |
|---|---|
team ID "Name" | An entrant |
match ID A vs B [winner ID] [score "…"] | A match. A and B are team ids or the ids of earlier matches, whose winners advance |
What flowss checks: a winner who did not play in the match, an entrant that is neither a team nor an earlier match, a bracket that loops, and unreadable lines (errors); a team appearing twice in one round and a match with no winner (warnings).
Custom figures
Raw SVG
Raw SVG draws hand-written SVG for custom schematics and illustrations that no engine models, such as optics, geological cross-sections or a bespoke diagram. It is also where the Studio's icon library inserts icons.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 100">
<circle cx="60" cy="50" r="30" fill="#fbbf24"/>
<text x="110" y="55" font-size="14">Lens</text>
</svg>
- The source must be a single
<svg>…</svg>document; anything else is refused withInput must be a single <svg>…</svg> document.An XML declaration on its own line before<svgis accepted. - For safety, scripts, event handlers,
javascript:links and form controls (form,input,button,textarea,select) are removed before the SVG is shown, and links are made to open without access to the page that opened them. Ordinary drawing markup, including<style>,<use>,<foreignObject>and your own background rectangles, is kept as written. - An icon added with Insert into editor in the icon library is appended after your existing markup. The icon library inserts only into Raw SVG; with any other engine it asks you to switch the figure to the SVG engine or use Copy SVG instead.
- The budget is 500,000 bytes.
What flowss checks: no root <svg>, mismatched, unclosed or unopened tags, references such as url(#id) or href="#id" to an id that does not exist, duplicate ids, classes used with no matching style rule and a missing xmlns (errors); a missing viewBox, empty text elements and an SVG with no content (warnings); and unused style rules and definitions (notes).
Choosing between similar engines
| You want to… | Use | Rather than |
|---|---|---|
| Equations in a figure or slide | LaTeX (KaTeX) | Raw SVG text |
| A whole figure in LaTeX for a paper | Export as TikZ / LaTeX from any engine | Retyping it |
| A curve from a formula | Plot | Economics diagrams, which are straight-line teaching curves |
| A truth table you can trust | Digital logic, which evaluates it | Drawing gates in a general diagram tool |
| A protein or small molecule in 3D | 3D Molecules | |
| A 2-D chemical structure or a balanced reaction | The Science studio | 3D Molecules |
| A family history with an inheritance question | Genetics pedigree | A general org chart |
| A causal question about confounding | Causal DAG | A flowchart engine, which draws but cannot analyse |
| A systematic-review flow you write by hand | PRISMA 2020 flow | |
| A review flow computed from screening | Evidence | |
| A CONSORT trial flow whose numbers propagate | FlowScript in the Lab | |
| A plan to print | Floor plan (2D) or Floor plan (3D) | Floor plan (3D WebGL), which is for screen |
| A melody on a staff, or on a time grid | Music notation, or Piano roll (MIDI) | |
| A one-off illustration no engine models | Raw SVG, or the Science studio for illustrated science |
Tips
- Start from a template. These engines have large template collections (over 600 for LaTeX, and more than 150 each for 3D Molecules and Phylogeny). Open the engine's reference page or the template gallery and edit a working example.
- Brace multi-digit exponents. Write
x^{10}, notx^10, and\%for a percent sign in KaTeX. - Put the
typeline first in Astronomy, Phase diagram, Digital logic, Economics diagrams, Stratigraphy and Music chords. In Astronomy and Digital logic it changes how later lines are read (an H–Rstarline, a truth table'soutputline); in the others it keeps the document readable. - Declare before you refer. In Causal DAG, Genetics pedigree, Drug-interaction network, Free-body diagram and System dynamics, a name that is never declared is either created with default settings or drawn nowhere. The readiness chip tells you which. In Economics diagrams, a
shiftline only works after the curve it shifts. - Give ages to every layer in a stratigraphic column so the superposition check covers every contact.
- Paste coordinates for checkable molecules. A
fetch:structure is drawn but its geometry cannot be checked; inline XYZ or PDB coordinates are checked. - Read the headline. Pedigree, Causal DAG, Stratigraphy, Digital logic and PRISMA print their conclusion under the figure. If it does not say what you expect, the drawing is not the only thing to check.
Limits and known constraints
- Browser-only engines. LaTeX (KaTeX), 3D Molecules, Floor plan (3D WebGL) and Raw SVG cannot be drawn by the render API. 3D Molecules
fetch:documents also need a connection to the RCSB Protein Data Bank. - KaTeX typesets maths only, one display formula per block, with no shared macros between blocks. Export it as PNG or PDF.
- 3D Molecules draws fetched structures as cartoons and inline structures as sticks; the style cannot be changed from the source. SDF, MOL2 and cube coordinates are not checked.
- Phylogeny draws up to 1,400 tips and does not draw internal-node labels such as bootstrap values.
- Music notation is single-voice, on one staff of about two dozen notes, with no chords, beams, slurs or drawn key signatures.
- Phase diagram
ptcurves are schematic; ternary diagrams are not supported. - Economics diagrams draw straight-line curves on 0–100 axes.
- System dynamics draws models but does not simulate them.
- Anatomy plates are schematic outlines, and there are seven of them.
- Floor plan (3D WebGL) is a viewer; click-to-edit is not available. The floor-plan engines skip lines they do not recognise without a notice.
- Economics diagrams shifts move a curve's intercept by a fixed 15 units; for upward-sloping curves the direction words are reversed (see the warning in that section).
- Circuit schematic is for teaching and documentation, not PCB design, and has twelve symbols.
- Caps on the native engines include 400 gates and 1,500 wires (Digital logic, with truth tables up to 12 inputs), 600 people (Genetics pedigree), 300 variables and 1,200 arrows (Causal DAG), 400 layers and 400 units (Stratigraphy), and 40 drawn exclusion reasons (PRISMA). A cap that bites is always reported.
Troubleshooting
| What you see | Engine | Why | What to do |
|---|---|---|---|
| A formula in red, or "Formula 2 does not render. KaTeX says: …" | LaTeX (KaTeX) | KaTeX cannot parse it, often an unbalanced brace or an unsupported command | Fix the formula KaTeX names; check for a bare % |
| "This engine doesn't render to SVG. Try PNG or PDF …" | KaTeX, 3D Molecules | These are not drawn as SVG | Export PNG or PDF |
"9ZZZ" is not a PDB ID — expected four characters starting with a digit, like "fetch: 1CRN". | 3D Molecules | The ID is malformed | Use a four-character PDB ID starting with a digit |
| "PDB 9ZZZ responded HTTP 404 from https://files.rcsb.org — check the ID …" | 3D Molecules | No such structure | Check the ID on the RCSB website |
| "Could not reach https://files.rcsb.org to fetch PDB … — check the network …" | 3D Molecules | No connection, or the download took over 15 seconds | Check your connection and try again, or paste the coordinates inline |
Unknown molecule format "…" — supported: xyz, pdb, sdf, mol2, cube. | 3D Molecules | The format: line names another format | Convert the file to one of the supported formats |
"fetch 1CRN" is missing its colon … | 3D Molecules | The directive has no colon | Write fetch: 1CRN |
| "This source is not a Newick tree: Expected ')' at …" | Phylogeny | A bracket is not closed, or the tree is incomplete | Balance the brackets and end with ; |
| A part drawn as a plain box | Circuit schematic | The kind has no symbol | Use one of the twelve kinds in the symbol table |
"diagram … names no plate this engine has … — drawn as whole." | Anatomy | Unknown plate name | Use whole, heart, lungs, kidney, brain, digestive or skeleton |
"type … is neither orbital nor hr — drawn as orbital." | Astronomy | Unknown type | Write type orbital or type hr |
| Stars drawn as the orbital system's star | Astronomy | type hr came after the star lines | Move type hr to the top |
"No type line. Drawn as a single-component P-T diagram …" | Phase diagram | No type was declared | Add type pt or type binary |
| "Line N is in no notation this engine knows and was not drawn: …" | Phase diagram | An unreadable line | Check the statement against the table above |
| "NO inheritance mode fits this pedigree." or a refutation you did not expect | Genetics pedigree | A status, sex or parentage in the chart is wrong | Check the individuals named in each refutation |
| "No simple identification strategy works for the effect of …" | Causal DAG | Confounding runs through variables the diagram marks as unobserved, and no front door or instrument exists | Measure one of the unobserved variables, or add an instrument; front-door paths are listed in the findings when they exist |
| "Add a body — body B at 300,200 size 100,70 label "10 kg"" shown instead of the diagram | Free-body diagram | No body line was read (coordinates must be written without spaces, as in 300,200) | Declare a body |
| "Add notes — note C4 at 0 length 1" | Piano roll (MIDI) | No note was read | Write note PITCH at START length LENGTH with an upper-case pitch letter |
A supply curve moves the wrong way after shift supply right | Economics diagrams | A shift raises or lowers the intercept, which for an upward-sloping curve is the opposite direction | Use shift supply left for an increase in supply |
| A stage "does not balance" | PRISMA 2020 flow | A count or a reason is missing or wrong | Correct the count, or add the missing reason or keyword |
Input must be a single <svg>…</svg> document. | Raw SVG | There is no <svg> root element, or other text sits on the same line before <svg or after </svg> | Keep one <svg>…</svg> element and remove the stray text |
| Notes running off the right of the staff | Music notation | The melody is longer than one staff | Split it into several figures |
| A highlighted chord that stays empty | Music chords | The name is not on the wheel | Use the wheel's exact names, for example G#/Ab |
| "Source is … — past the … safe-rendering budget …" | Any | The source is over the engine's budget | Split or trim the figure |
Related pages
- Choosing an engine
- The engine catalogue
- Charts and data-visualisation engines
- Science and The Science studio in depth
- Lab, The FlowScript language and Reporting standards
- Evidence and Screening, extraction and synthesis
- Figure
- Study
- Flow-systems analysis in Studio
- Data, timeline, TikZ and the diagram tools
- Business, strategy and planning engines
- Process, operations and quality engines
- Software and architecture engines
- Exporting your work
- Embedding and the render API
