Skip to content

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.

An If node's settings with an expression typed into the Value 1 field as {{ $trigger.payload.amount }}, and the <> icon beside the field label that opens the Expression Builder.An If node's settings with an expression typed into the Value 1 field as {{ $trigger.payload.amount }}, and the <> icon beside the field label that opens the Expression Builder.

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>.


Found something out of date? This page lives in the Flero docs content set.