Expressions
Expressions are how data flows between nodes. Anywhere you can type a value into a config field, you can type an expression instead. At runtime, Flero evaluates it and substitutes the result.
{{ $node["HTTP Request"].json.body.email }}This page is the overview; the section pages dig into each piece.
📸 Screenshot needed:
expressions__chip-vs-raw.png, same field shown twice, once as coloured expression chips, once as raw{{ … }}text.
Pages in this section
| Page | What it covers |
|---|---|
| Syntax basics | The {{ }} delimiter, escaping, mixing literal text with expressions |
| Referencing data | $node, $trigger, $workflow, $env, $input, every reference root |
| Operators | The condition operators (equal, contains, greaterThan, …) used by If / Switch |
| Functions | Arithmetic and string operations supported inside expressions |
| Common patterns | Ten or so battle-tested recipes |
| Debugging expressions | Reading [EXPR-ERROR] markers and fixing them |
The short version
// Reference another node's output by display name (case-sensitive)
{{ $node["HTTP Request"].json.body.email }}
// Reference the trigger payload
{{ $trigger.body.userId }}
// Reference workflow-level metadata or variables
{{ $workflow.name }}
{{ $workflow.variables.lastSyncTime }}
// Reference workspace environment variables
{{ $env.API_BASE_URL }}
// Reference the current node's input
{{ $input.id }}
// Mix expressions and literal text
"https://{{ $env.API_HOST }}/users/{{ $trigger.body.id }}"
// Array index and length
{{ $node["List"].json.items[0].name }}
{{ $node["List"].json.items.length }}The .json segment is optional but recommended, $node["X"].json.field and $node["X"].field are equivalent. .output is a synonym for .json so existing examples that use it keep working.
Things to remember
- Display names are case-sensitive.
$node["HTTP Request"]≠$node["http request"]. - Each
{{ … }}block is evaluated independently. A failure in one block produces an[EXPR-ERROR: …]marker; sibling blocks still resolve. - The shorthand without
$node["…"]is a common mistake.{{ start.output.x }}is not valid; you'll get an[EXPR-ERROR: unknown reference … Did you mean $node["start"].output.x ?]marker. Always wrap. - Both keys (display name and runtime ID) work, but display name is the right choice for human-written workflows. Runtime IDs are assigned by the executor and shouldn't be in your JSON.
Related
- Core concepts → Expressions, the introductory framing
- Configuring nodes, the chip / raw toggle and the Data Mapper
Found something out of date? This page lives in the Flero docs content set.