Overview
The link-out node acts as a virtual wire sender. It sends
messages to one or more link-in nodes without a physical
wire on the canvas. It supports two modes: standard link mode sends messages
one-way, while return mode enables subroutine-style calls where the response
comes back to the calling flow.
Properties
| Property | Type | Default | Description |
|---|---|---|---|
| linkIds | array | [] | Array of target Link In node IDs to send to |
| linkId | string | auto | Unique identifier for this link node |
| scope | string | "flow" | Visibility: "flow" (same flow) or "global" (all flows) |
| flowId | string | auto | ID of the flow this node belongs to |
| mode | string | "link" | "link" for one-way send, "return" for subroutine call |
Operating Modes
Link Mode (default)
One-way message delivery. The message is sent to the target Link In nodes and processing continues there.
// Flow A:
// [Process] -> [Link Out] -----> (to Link In)
//
// Flow B:
// [Link In] -> [Log] -> [Store]
// Messages flow one direction only Return Mode (subroutine)
Call a subflow-like pipeline and receive the result back. The target flow must end with a Link Out in return mode.
// Flow A (caller):
// [Process] -> [Link Out: return]
// <- [receives result back]
//
// Flow B (subroutine):
// [Link In] -> [Transform] -> [Link Out: return]
// Result is sent back to Flow A Example: Send to Shared Logging Pipeline
Route log messages from any flow to a centralized logging pipeline using link mode.
// Link Out node in each flow (link mode)
{
"mode": "link",
"linkIds": ["central-logger-link-in"],
"scope": "global",
"name": "Send to Logger"
}
// Usage pattern in any flow:
// [Any Node] -> [Change: add log metadata] -> [Link Out: Logger]
// The Change node adds metadata before sending:
{
"rules": [
{ "type": "set", "property": "payload.logLevel", "value": "info" },
{ "type": "set", "property": "payload.source", "value": "api-gateway" },
{ "type": "set", "property": "payload.timestamp", "value": "$now()" }
]
}
// Multiple Link Out nodes across different flows
// all point to the same central logger Link In Example: Subroutine Call with Return Mode
Call a shared validation pipeline and receive the result back in the calling flow.
// Caller flow: Link Out in return mode
{
"mode": "return",
"linkIds": ["validator-link-in"],
"scope": "global",
"name": "Call Validator"
}
// Caller flow layout:
// [HTTP In] -> [Link Out: return] -> [HTTP Response]
// ^^ receives validated result
// Validation subroutine flow:
// [Link In: "Validator"] -> [Function: validate] -> [Link Out: return]
// The validation function:
var data = msg.payload;
var errors = [];
if (!data.email || !data.email.includes("@")) {
errors.push("Invalid email");
}
if (!data.name || data.name.length < 2) {
errors.push("Name too short");
}
msg.payload = {
valid: errors.length === 0,
errors: errors,
data: data
};
return msg; // Returned to calling flow Common Use Cases
Centralized Logging
Send log messages from every flow to one shared logging and storage pipeline.
Subroutine Calls
Call shared validation, transformation, or enrichment logic and get results back.
Event Broadcasting
Send events to multiple Link In nodes for parallel processing in different flows.
Canvas Organization
Replace long wires with clean virtual links to keep flows readable and maintainable.