Skip to content

Delay

The Delay operation stops the incoming execution path and starts a new one after a configurable timer expires. It accepts up to 20 data inputs whose values are forwarded to matching outputs once the delay elapses. Optionally, input values can be captured (snapshot) at the moment the delay begins rather than read at expiry.

Delay operation

Trigger

The Delay operation is a trigger. After the timer expires it initiates a new execution path independently of the original one.

Inputs

PortTypeRequiredDescription
> (Gate)AnyNoControls whether the delay timer starts. The incoming path always stops at this operation regardless of the Gate value (the Delay is a Trigger boundary).
ResetBooleanNoWhen true, cancels a pending timer and stops the path. Reset is read before the Gate and before the Re-trigger Policy, so it wins over both.
In (variable, up to 20)AnyYesData inputs forwarded to corresponding outputs after the delay.

Outputs

PortTypeDefaultDescription
> (Trigger)AnyfalseUntyped trigger pulse — fires true when the delay expires, starting the new execution path.
Out (variable, up to 20)Mirrors paired inputNilEach output takes the type of the paired input. Value is the delayed or captured input value.

Properties

NameTypeDefaultDescription
Delay (seconds)Integer10Duration in seconds (0—3600). A value of 0 schedules execution as soon as the current work completes.
Capture InputsBooleanfalseWhen true, input values are snapshot at trigger time. When false, current values are read at expiry.
Re-trigger PolicyComboIgnoreWhat a new trigger does while a delay is already pending. Ignore drops it and stops; Restart cancels the pending timer and starts the full delay again.
On ErrorComboStop this branchPer-op On Error verb. Delay’s Outputs belong to the Path it fires, so the Editor offers it the two verbs that write nothing: Stop this branch / Continue with the last value. See the Error Handling guide.

State on Reload

Outputs, captured values, and all active (unexpired) delays are preserved across restarts. Expired delays are triggered immediately on reload; active delays resume with adjusted timers. Saved state is discarded if the Capture Inputs flag or the number of data inputs/outputs changed. In that case all pending delays are dropped.


  1. Stop incoming path — The current execution path stops at this operation.

  2. Gate check — If the Gate blocks execution, the timer does not start and outputs remain unchanged.

  3. Capture (optional) — If Capture Inputs is true, all data input values are stored immediately.

  4. Wait — The internal timer counts down for the configured Delay seconds.

  5. Fire — When the timer expires, a new execution path begins. Output values are either the captured snapshot or the current input values, depending on the Capture Inputs setting.


Delay: 5 s   Capture Inputs: true

At T=0, In 1 = "Hello at T0". The value is captured. At T=5 the timer fires.

Out 1: "Hello at T0" (the snapshot value)


  • Adding time-based pauses in automated workflows (e.g. “turn off light 5 minutes after motion stops”)
  • Throttling events to prevent rapid-fire actions
  • Decoupling execution paths — use delay 0 to break a long chain into independent segments

Delay raises no error of its own: every exit either arms the timer or ends the arriving Path by design — a true Reset, a closed Gate, or a re-trigger the Ignore policy drops. The Node still carries an On Error verb, because a value that fails a port’s type mask fails the Node and is resolved by that verb, while an Input whose Validation rule is not satisfied stops the Node and consults no verb.

VerbWhat it does
Stop this branch (default)This Node and its dependents stop; the Outputs keep their values, and the Node’s last attempt reads as failed — the engine’s record of the Node, not a mark on any port.
Continue with the last valueNo timer is armed and no Path is fired; the Outputs keep their values, not stamped as new.

Delay’s Outputs belong to the Path it fires, so a failure on the arriving Path has nothing downstream to carry a value to. Continue with the fallback would write a value no firing produced and pulse the > output for a cross-path reader. Delay’s schema states the two verbs above, and the Editor offers only those.

Gate closure is not an error — a closed Gate stops the Path and consults no verb.


  • One delay may be pending per Node. A trigger arriving while one is pending is settled by the Re-trigger Policy: Ignore drops it, Restart cancels the pending timer and starts the full delay again.
  • A Task may hold at most core.maxDelayPerTask Delay nodes (see Configuration).
  • Maximum delay is 3600 seconds (1 hour).

One host setting bounds Delay. It is read at start-up from the host’s configuration file; see the Core configuration reference.

KeyTypeDefaultEffect
core.maxDelayPerTaskInteger-1How many Delay nodes one Task may contain. Negative means unlimited.

The cap travels to the editor in the operation’s schema, so the editor refuses to add a Delay beyond it rather than letting you build a Task the server will reject. It counts nodes, not pending delays: how many delays one node may hold is settled by the Re-trigger Policy, which keeps at most one pending.