Skip to main content
Version: v1.5.0

Link events

Link events connect two points of the same process without drawing a sequence flow between them. They always come as a pair matched by link name: the throw event is the exit point, the catch event is where the flow resumes. Links are purely a diagramming device — the token moves from throw to catch immediately, nothing is executed and nothing is waited for.

PositionIconBehavior
Link intermediate throw eventLink intermediate throw eventExit point — hands the token over to the catch event with the same link name.
Link intermediate catch eventLink intermediate catch eventRe-entry point — the flow resumes here.

Use cases

  • Off-page connectors — split a large diagram into readable sections and connect them by name instead of dragging sequence flows across the whole canvas.
  • Avoid crossing flows — replace long sequence flows that would cross many other elements with a link pair.
  • Shared continuation — let several branches jump to the same continuation point: multiple throw events with the same link name can target one catch event.

Usage in BPMN

Both sides carry a bpmn:linkEventDefinition whose name pairs them up.

MarkupAttributeRequiredDescription
bpmn:linkEventDefinitionnameyesThe link name. Throw and catch events with the same name in the same process form a pair.

Rules:

  • The throw event has one incoming sequence flow and no outgoing flow; the catch event has one outgoing sequence flow and no incoming flow.
  • Throw and catch must be in the same process — a link cannot cross a process or sub process boundary.
  • When a token reaches the throw event, it continues immediately at the matching catch event's outgoing flow. There is no wait state, and the process variables are unchanged.
  • A throw event whose link name has no matching catch event fails the token at runtime.

The sending side, rendered as a double-line circle with a filled arrow. The token enters, the engine finds the catch event with the same link name, and execution continues there.

The receiving side, rendered as a double-line circle with an unfilled arrow. It is never activated by an incoming flow — only through its throw counterpart.

  • Events overview — positions, catch and throw semantics shared by all events.
  • Sequence flow — the connection a link pair substitutes for.

XML example

A link pair named Fulfillment connecting the end of the ordering section to the fulfillment section of the same process:

<bpmn:intermediateThrowEvent id="Link_ToFulfillment" name="To fulfillment">
<bpmn:incoming>Flow_OrderAccepted</bpmn:incoming>
<bpmn:linkEventDefinition id="LinkDef_Throw" name="Fulfillment" />
</bpmn:intermediateThrowEvent>

<bpmn:intermediateCatchEvent id="Link_FromOrdering" name="From ordering">
<bpmn:outgoing>Flow_StartFulfillment</bpmn:outgoing>
<bpmn:linkEventDefinition id="LinkDef_Catch" name="Fulfillment" />
</bpmn:intermediateCatchEvent>