Roughout supports four diagram types: flowchart (the default) for step-by-step processes and decisions, sequence diagrams (type: sequence) for messages passing between participants over time, Gantt charts (type: gantt) for tasks against a calendar timeline, and mind maps (type: mindmap) for a central topic with branches radiating outward. Each has its own section below.
Philosophy
- Open it, start typing, close the tab. Nothing is saved until you choose to save it — there's no setup first.
- Plain text is a real diagram. Every line means exactly what it says — the tool never guesses what you meant.
- Start simple, add precision only when you need it. A bare line becomes a box automatically; specific syntax is there when you want more control, never required.
- Positions are automatic unless you pin one — add
@x,yto a line and that position is kept.
Flowchart diagram format
Comments
// a note to yourself- Ignored entirely — whole line only, no trailing // on other lines
Shapes — per box
box "label" #id- Rectangle
rbox "label" #id- Rounded rectangle
bbox / rrbox "label" #id- Double border (box / rounded box)
diamond "label" #id- Decision point
text "label" #id- Plain label, no border
spacerorspacer:Nas the last thing on a shape's own line adds extra breathing room around just that shape.
Connectors — per arrow
#A -> #B- Arrow
#A --> #B- Dashed arrow
#A ->> #B- Arrow with emphasis (e.g. urgency)
#A <-> #B- Points both ways
#A -> #B: label- Add a label to any connector
- Trailing tokens, any order, all optional:
flow:right/flow:downoverrides the diagram's default direction for just this one connector;line:elbowroutes it with a right-angle bend instead of straight;from:<edge>/to:<edge>(top/right/bottom/left) pins exactly which edge it exits/enters;spacerorspacer:Nadds extra room around it.
Shortcuts — no mouse needed
A->B->C- Quick chain — boxes are created for you
- Just type a line of text, then another. Each line becomes a box, connected in order to the one before it.
- Starting a second, separate flow? A leading
\on that line (e.g.\Alternative start) stops it inheriting a connector from whatever came before — a fresh root, not linked to the previous flow. - Want to branch off one of those lines instead of continuing straight down the list? Hit Expand (⌘E / Ctrl+E) to give every line an #id, then add a
#id -> #idconnector wherever you want a different flow.
Layout — whole diagram
flow: right- New boxes are placed left to right (default)
flow: down- New boxes are placed top to bottom
- Both are also available as a toolbar toggle — it edits this same line for you. A single connector can override this for just itself — see Connectors above.
Title and footer — whole diagram
title My Diagram, align:left- left / centre (or center) / right — defaults to centre
footer: Version 1.2 — printed [date]- Export-only — never shown in the live editor
title:My Diagram(colon) also works, first one wins. Every shape shifts down to make room — nothing about their own position is changed.footeronly appears in an exported PNG/PDF, bottom-left, small and light.[date]anywhere in the text becomes today's date (d-mmm-yyyy) at export time.
Groups — a labeled subset of shapes
group "Label" #gid- Start a labeled boundary
endgroup #gid- Close it
- Everything between the two lines parses completely normally — a group is just a visual boundary drawn around them. A group's own
#idcan be used as a connector endpoint, same as any shape.
Styles — define once, whole diagram; apply per box
style status:done text:strikethrough border:grey- Define a reusable, named look
box "..." #id status:done- Apply a named style to a shape
box "..." #id border:red text:italic- One-off style, no named style involved
border:green / blue / orange / red / grey / purple / yellow / teal / pink / indigo ("gray" also accepted).text:strikethrough / bold / italic — combine with commas, e.g.text:bold,italic.- A shape's own
border:/text:always wins over its status's version, property by property — set both if you want a status's look with one thing overridden. - Also settable from the inspector panel's Status field, once at least one status is defined.
- A malformed
spacer:/flow:/line:/from:/to:/status:/border:/text:token (right keyword, value that doesn't parse — e.g.flow:sideways) shows in red, right in the text — as does any otherkeyword:value-shaped token that isn't one of those eight at all, e.g.background:red.
Fill — wash a shape's own colour into its background
fill:tint- Diagram-wide — subtle wash (~12%) of each shape's own border/status colour
fill:pastel- Same idea, stronger (~28%)
- Defaults to
fill:none— every existing diagram looks the same until you opt in. Only affects a shape that already has aborder:/status:colour; an uncoloured shape is unaffected.
Sequence diagram format
type: sequence starts a new one. View-only: there's no dragging or clicking to edit here; position is always computed from the text, never pinned by hand.
Comments
// a note to yourself- Ignored entirely — whole line only, same rule as flowchart
Participants — who's on the diagram
Alice->Bob: hello- A bare mention auto-creates both, in first-mention order
participant Bob- Explicit declaration — controls ordering without a message yet
participant "Web Server" #id- Quoted + #id — for a display name with spaces; #id is just bookkeeping
- Participants always render left to right in the order their name is first seen — whichever line mentions it first, declaration or message.
Messages — per arrow
Alice->Bob: label- Sync — solid line, filled arrowhead
Alice-->Bob: label- Reply — dashed line, filled arrowhead
Alice->>Bob: label- Async — solid line, open arrowhead
Alice-xBob: label- Failure/lost — solid line, X instead of an arrowhead
Alice->Alice: label- Self-message — loops back to the same lifeline
: labelis always optional, same as a flowchart connector.
Activation — a lifeline bar
activate Bob- Start a bar on Bob's lifeline
deactivate Bob- End the most recently opened one
- Nesting is supported — activate twice before deactivating shows two overlaid bars, offset to the right; messages touch whichever bar is currently open, not the bare lifeline.
- An activate with no matching deactivate by the end of the diagram is closed automatically, never an error.
Notes — a labeled box beside a lifeline
note over Alice: text- Above a single lifeline
note over Alice,Bob: text- Spans every lifeline listed, in order
note left of Alice: text- Positioned to the left of one lifeline
note right of Alice: text- Positioned to the right of one lifeline
Fragments — conditional/looping/optional blocks
alt condition- First branch of an if/else-style block
else condition- Any number of else branches inside an alt
loop condition- Repeats — no else
opt condition- Optional — runs or doesn't, no else
end- Closes whichever alt/loop/opt is currently open
- The label after
alt/loop/opt/elseis free text, shown but never parsed for meaning — same as everywhere else in this format. - Fragments nest freely — a
loopinside analtbranch, for example.
Dividers, title, and footer — diagram-wide
title My Title, align:left- One per diagram — first one wins. left / centre (or center) / right
footer: Version 1.2 — printed [date]- Export-only — never shown in the live editor
==Section label==- Full-width divider with a centered label, at that point in the events
- A line that clearly attempts
note/participant/==divider==but doesn't parse (missing colon, unclosed quote, no closing==) shows in red, right in the text.
Gantt chart format
type: gantt starts a new one. View-only, same as sequence diagrams: position is always computed from each task's own dates, never dragged. Deliberately spreadsheet-simple, not a Microsoft Project clone — no dependency arrows, no critical path, no resource allocation.
Tasks — one per line
Buy milk- A bare task — shown in the list, no bar (e.g. a checklist item or heading)
Pack: st:28.sep, end:5.oct- A scheduled task — draws a bar
- Indent a line (any consistent amount of leading whitespace) to make it a child of the task above it. Click a parent in the task list to collapse/expand its children — a viewing preference, not saved to the file. A parent's own bar is always computed from its children's dates (thinner, with flagged ends, so it reads as a rollup rather than a real task).
Dates — day-before-month throughout
st:28.sep.2026- day.month.year — fully explicit
st:28.sep- day.month — year defaults to the current year
st:dec.1549- month.year — resolves to the 1st of that month
st:09:00- Time of day only — date defaults to today
start:1.aug- Diagram-wide — see Year rollover below
- Month names are case-insensitive, matched on the first three letters (
sep,Sep,septemberall work).
Year rollover — for a plan crossing a year boundary
start:1.aug- Declares which month/day the diagram's own year begins on
- Once set, any other year-less date earlier in the calendar than
1.aug(e.g.10.jan) resolves to the following year — no need to write.2027on every winter-side task. A date on or after1.augstays the base year. - A date that already has an explicit year (
st:10.jan.2027) is never affected. Diagram-wide, so it works no matter where in the file it's written — same asperiod:/endcaps:.
Segments, caps, and colour — per task
st:... round, end:... squareround/square/angleshapes that specific end — defaults tosquarest:A, end:A- Same start and end draws a diamond instead of a bar
st:A, end:B, st:C, end:D- Two (or more) segments on one task's row
st:A, dur:3w- Start plus a duration —
h/d/w/m/yfor hours/days/weeks/months/years — instead of an end date colour:blue- One colour per task, shared by every segment it draws
st:A, end:B, progress:60%- A percent-complete indicator drawn on that segment
colour:green / blue / orange / red / grey / purple / yellow / teal / pink / indigo ("gray" also accepted) — same fixed palette as named styles'border:.- A malformed
st:/end:/dur:/colour:/progress:token (wrong delimiter or a value that doesn't parse) shows in red, right in the text.
Relative starts (Mac only for now)
st:follow, dur:5d- Starts the moment the previous dated task finishes
st:same, dur:1d- Starts alongside the previous dated task, not after it
st:follow-2d, dur:5d- 2 days before the previous task ends — offset uses h/d/w/m/y, same as dur:
st:follow+1w, dur:5d- 1 week after the previous task ends
id:Handover- Labels this task so other tasks can reference it by name
st:same(Handover), dur:1d- Starts alongside the task labelled id:Handover, wherever it is in the file
st:follow-2d(Handover), dur:1d- Offset and named reference together — offset always first
- Must be closed with
dur:, never a fixedend:— that would stop it tracking the referenced task's own slip, so it's flagged red instead. Chains cascade automatically, so if an earlier task's date changes, every task that follows it moves too. - Live in the Mac app today. This web editor's own parser has the same logic built in but switched off (
ENABLE_RELATIVE_STARTSingantt-parser.js) — a Mac App Store bonus over the free web version for now. Until it's switched on here, none offollow/same, the offset, or the named reference are recognized — the whole value just shows red, same as any other value that doesn't parse.
Title, footer, period, and end-cap defaults — whole diagram
title:My Plan, align:leftleft/centre(orcenter) /right— defaults to centrefooter: Version 1.2 — printed [date]- Export-only — never shown in the live editor
period: weekshours/days/weeks/months/years— the width of each columnendcaps: st:round, end:angle- Default cap shape for any
st:/end:/dur:with no cap of its own
- Period's also available as a toolbar dropdown — it edits this same line for you. Defaults to
daysif never set. - Every row also shows a small reference number, counting from 1 — display-only, never saved to the file.
Late highlighting and the today marker
- A bar that should have started but hasn't kept pace (or finished with no progress at all) shows a red border, red label, and red progress line — a collapsed parent shows the same red if any real task underneath it is late.
- Only appears once the diagram uses
progress:somewhere — a plan with no progress tracking never shows red, since there's no real signal to flag as behind. A thin dashed line also marks today, under every bar, regardless of progress tracking.
Mind map format
type: mindmap starts a new one. View-only, same as Gantt/Sequence: position is always computed, never dragged.
The centre topic is the first line
Trip Planning- The only unindented line — everything else nests under it
Destination- Indent to make it a branch of the line above it
- A second unindented line doesn't start a second tree — it's adopted as one more branch of the centre, so nothing you write is ever lost.
Layout — radiates two-sided from the centre
- Main branches alternate left/right in file order: 1st right, 2nd left, 3rd right, and so on — deterministic, not a balancing algorithm.
- Click a branch with children to collapse/expand it — a viewing preference, not saved to the file. It still shows its own collapse triangle while collapsed.
- A node with children draws as a bordered box; a leaf (no children) draws as plain coloured text with no box, keeping the outermost level lightweight.
- Pinch, or hold Ctrl and scroll, to zoom in and out on a large tree.
Colour — the one place this format auto-colours by default
Destination- A main branch (direct child of the centre) with no
colour:of its own gets one auto-assigned, round-robin, from the same 10-colour palette named styles use Spain: colour:blue- Explicit colour, inherited by every node under Spain unless one of them overrides it too
- Anything deeper than a main branch — a node with no
colour:of its own — always just inherits its parent's, never gets a fresh auto-assignment of its own. - A plan that never writes
colour:by hand still reads as visually distinct branches — the one deliberate exception to this format's usual "no colour unless you ask for it" rule.
Title and footer — whole diagram
title:My Plan, align:leftleft/centre(orcenter) /right— defaults to centre. Independent of the centre topic itself.footer: Version 1.2 — printed [date]- Export-only — never shown in the live editor
- A malformed
colour:token (wrong delimiter or an unrecognized name) shows in red, right in the text.