Expressions
Expressions are how data flows between nodes. Anywhere you can type a value into a config field, you can type an expression instead. Just before the node runs, Flero looks the value up and puts it in place.
{{ $node["Get Customer"].output.email }}An expression is a path to data the run already has: another node's output, the trigger data, the node's own input, a workflow variable or a workspace variable. It is not a programming language. It doesn't calculate, compare or call functions; that work belongs in a node.


Pages in this section
| Page | What it covers |
|---|---|
| Syntax basics | The {{ }} delimiter, mixing text and expressions, what a value turns into |
| Referencing data | $node, $trigger, $input, $workflow, $env: every root |
| Operators | The comparison operators used by If, Switch and While, and where == and && work |
| Functions | Why there are no functions inside {{ }}, and which node to use instead |
| Common patterns | Recipes for things you'll write often |
| Debugging expressions | Reading [EXPR-ERROR] markers and fixing them |
The short version
// Another node's output, by its display name (case-sensitive)
{{ $node["Get Customer"].output.email }}
// The body of a webhook or form submission
{{ $trigger.payload.orderId }}
// The data arriving at this node
{{ $input.status }}
// A workspace variable
{{ $env.API_BASE_URL }}
// The workflow's own fields and variables
{{ $workflow.name }}
{{ $workflow.variables.region }}
// Mix expressions and literal text
https://{{ $env.API_HOST }}/users/{{ $trigger.payload.userId }}
// A list element, and a later item of a multi-item output
{{ $node["List Orders"].output.orders[0].id }}
{{ $node["List Orders"].output._items[2].id }}.output and .json mean the same thing, and both are optional: $node["X"].output.field, $node["X"].json.field and $node["X"].field all read the same value.
Things to remember
- Expressions only look values up.
{{ $input.a + $input.b }},{{ $input.name.toUpperCase() }}and{{ items.length }}are not evaluated. Use a Set, Data Transform or Code node. See Functions. - Use the display name. Reference nodes by the name shown on the canvas, exactly, including case. Don't use node ids.
- Each
{{ … }}block is resolved on its own. A failure in one block becomes an[EXPR-ERROR: …]marker; the others still resolve. - Always start with a
$root.{{ start.output.x }}gives an[EXPR-ERROR], and{{ input.email }}is left as literal text. Write{{ $node["Start"].output.x }}and{{ $input.email }}. - A webhook body is under
payload. It is$trigger.payload.<field>, not$trigger.body.<field>.
Related
- Core concepts → Expressions, the introductory framing
- Configuring nodes, the expression field and the Data Mapper
Found something out of date? This page lives in the Flero docs content set.