Skip to main content

link-out

Send messages to Link In nodes via virtual wires across flows.

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.

Virtual
Wire Sender
Multi
Target
Return
Mode
Cross
Flow Support

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.

Related Nodes