What is Flowmark

Write a process as plain text, one step per line, and the app draws the diagram for you.

Flowmark is the text form of your diagram. The Flowmark pane beside the diagram shows it as text, and you can edit it there: the diagram follows when you pause typing. You write the steps and how they connect, and the app does the layout and wiring. The assistant and a connected AI app write the same text, so anything you learn here helps you read what they draft.

If a line has a mistake, the pane's header shows the error with its line number, and so does the Problems panel. The diagram keeps its last working version until you fix it. Select the error to jump to that line. When your text isn't laid out the way the app prints it, Reformat shows in the pane's header and rewrites it that way. To take the text elsewhere, use Export > Flowmark text for a .flowmark file, or Copy Flowmark.

Write your first process

Here is a complete process. Paste it into the Flowmark pane to see it drawn.

Flowmark
process Expense claim
lanes Employee | Finance

lane Employee
start Expense incurred
user Submit expense claim
lane Finance
user Check receipts
xor Receipts complete?
  yes -> Pay expense
  no (default) -> Return claim

service Pay expense
end Expense paid

send Return claim
end Claim returned

Reading it from the top:

  • process Expense claim names the process.
  • lanes lists the lanes in order, and each lane line puts the steps after it in that lane.
  • Every other line is one node: a kind such as start, user or xor, then its name.
  • The first block runs from Expense incurred to Receipts complete?, each line connecting to the one above it.
  • The indented -> lines are the gateway's outgoing flows, labeled yes and no.
  • Each blank line starts a new path. Pay expense and Return claim start their own blocks, and the gateway's arrows lead to them.

The rules that matter

  1. One node per line. Write the kind, then the name: user Approve invoice. Kinds are lowercase. See Steps.
  2. Lines connect top to bottom. Inside a block, each node connects to the node on the line above it. See Flows and labels.
  3. A blank line starts a new path. So does an end event, or a node with its own -> lines.
  4. Arrows point by name or #id. -> Pay expense finds the node called Pay expense. Give a node an #id when it has no name or shares one. See Ids and comments.
  5. Indented lines belong to the node above. Arrows, boundary events (on:), documentation (doc:), notes (note:) and messages (=>, <=) all attach to the node declared last.

Where to go next

On this page