Quester Studio

Nodes overview

Builtin flow node types, ports, edges, and when to use each

Flows are graphs of nodes linked by edges. Each executable type has handles (ports), an execute-time wire input (previous output), and an output stored as {{nodes.<id>}}.

Read How flows work for connection rules, fan-out vs branches, and wire vs templates.

target (in) node source (out) named outs on if · try · switch
Linear nodes use one in and one out. Branch nodes add labeled source handles.

Builtin types

TypeInOutOutput (summary)
start01 (max 1 edge){}
input11Flow run input object
form11Submitted field object (pauses until submit)
http11 · fan-out ok{ status, body, headers, … }
extract11JMESPath result on wire
template11Rendered string
set11Passthrough + vars
if1true / false{ condition }
switch1cases + default{ matched }
delay11Passthrough
foreach11 (complete) · fan-out ok{ results, count, truncated }
try1success / failedbody exit output · or { failed, error, input }
subflow11Subflow output
output10Flow result
assert11{ ok: true } or throws
transform11Mapped object
merge11Merged object
joinN1 · fan-out ok{ [predId]: output, … }
json11Subset / passthrough
log11Input + { logged }
inspect11Selected JSON
note00Not executed · no edges

Execution model

  1. Exactly one start; all executable nodes reachable from it. note may be disconnected and never has edges.
  2. Nodes run along edges from start (branch filters by sourceHandle).
  3. Each node receives the previous output as execute input (the wire). JMESPath roots there: body.id, not a template.
  4. Run panel / --input is {{input.*}}. An input node places that object on the wire.
  5. set updates vars.
  6. Linear nodes may fan-out to several children (same output). Each node (except join) may have at most one incoming edge.

Shared conventions

  • Optional label for the UI.
  • Templated strings: template syntax.
  • JMESPath nodes always query the wire, not run input (unless you first put run data on the wire with an input node).

Example chain

start → input → http (login) → extract (body.id) → http (profile) → output
StepHow you read data
HTTP needs credentials{{input.username}} or secrets
Next needs id from loginextract body.id or later {{nodes.login.body.id}}
WrongMustache for wire fields with no scope; extract input.username when you meant run input

Samples: demo-main-nodes.flow.json, login-and-profile.flow.json, kitchen-sink.flow.json.