Connections
Connections define how data flows from one node to another in a workflow.
Implicit connections
By default, nodes execute sequentially:
nodes: - name: "step1" type: "http/request" - name: "step2" # Runs after step1 completes type: "core/log"Explicit connections
Define explicit data flow:
nodes: - name: "fetch_user" type: "http/request" config: url: "https://api.example.com/users/{{ trigger.body.user_id }}"
- name: "fetch_orders" type: "http/request" config: url: "https://api.example.com/users/{{ fetch_user.body.id }}/orders"
- name: "send_email" type: "email/send" input: to: "{{ fetch_user.body.email }}" orders: "{{ fetch_orders.body }}"Parallel execution
Nodes without dependencies run in parallel:
nodes: - name: "fetch_a" # Starts immediately type: "http/request" - name: "fetch_b" # Also starts immediately type: "http/request" - name: "combine" # Waits for both type: "core/template" input: a: "{{ fetch_a.body }}" b: "{{ fetch_b.body }}"Conditional connections
nodes: - name: "check" type: "http/request"
- name: "success_path" type: "core/log" if: "{{ check.status }} == 200"
- name: "error_path" type: "slack/post" if: "{{ check.status }} >= 400"Templating syntax
Use Tera templates:
input: # Variable access name: "{{ user.name }}"
# Filters upper: "{{ user.name | upper }}" default: "{{ user.nickname | default: 'Anonymous' }}"
# Conditionals status: "{% if score > 50 %}pass{% else %}fail{% endif %}"Error propagation
Failed nodes stop downstream execution unless configured otherwise:
nodes: - name: "optional_check" type: "http/request" on_error: ignore # Continue even if this fails
- name: "always_runs" type: "core/log" # Runs regardless