Expressions
Template syntax for wiring data between nodes
Expressions
Expressions let you pass data between nodes using template syntax. They are resolved at runtime before each node executes.
Basic Syntax
Reference any node's result with double curly braces:
text{{nodeId.result.fieldName}}
{{trigger.result.amount}}{{action-1.result.price}}{{action-2.result.data.items[0]}}Special Variables
Access workflow-scoped and organization-scoped persistent storage:
{{$storage.key}}{{$org.storage.key}}{{$org.stores.storeName.key}}Access template parameters (when workflow is used as a template):
text{{$props.key}}
Inside a for-each node's loop body:
{{$item}}{{$index}}For nested for-each nodes, access parent loop variables:
{{$parent_item}}{{$for.nodeId.item}}
{{$for.nodeId.index}}Type Preservation
Expressions preserve types. If a referenced value is a number, the resolved value is a number, not a string. This
matters for condition evaluation in if nodes and numeric comparisons.
Condition DSL
The if action uses a condition DSL that supports MongoDB-style operators:
json{ "condition": { "$gt": ["{{action-1.result.price}}", 100] } }
Supported operators:
| Operator | Description |
|---|---|
$eq | Equal |
$ne | Not equal |
$gt | Greater than |
$gte | Greater than or equal |
$lt | Less than |
$lte | Less than or equal |
$in | Value in array |
$nin | Value not in array |
$and | Logical AND (array of conditions) |
$or | Logical OR (array of conditions) |
Filter DSL
The filter action uses the same DSL to filter arrays:
json{ "array": "{{action-1.result.items}}", "filter": { "$gt": ["{{@price}}", 100] } }
{{@field}}
references fields on each array item.