Skip to content
Docs
flero.ai

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.


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