Intermediate
In a pure dataflow graph, nodes execute as soon as their inputs are ready. That works well for computation, but what about side effects that must happen in a specific order? Execution wires solve this problem.
Consider logging two messages. Both log nodes have their input
ready at the same time, so the runtime is free to execute them in any order.
If you need “Hello” to always print before “World”,
data flow alone cannot guarantee that.
constant "Hello" --> log (could run second)
constant "World" --> log (could run first)
Execution wires are drawn as dashed gray lines on the canvas. They connect an execution output pin on one node to an execution input pin on another. Unlike data wires, execution wires carry no value — they are pure sequencing signals.
constant "Hello" --> log ===> log <-- constant "World"
(exec wire, dashed gray)
The second log will not fire until the first one has finished,
regardless of whether its data input is already available.
A node with an execution input waits for both conditions:
This means execution wires add ordering constraints on top of the dataflow schedule without replacing it.
http-get --> json-parse --> transform ===> db-insert ===> log "done"
(exec) (exec)