Inclusive Gateway
Splits a process into one or more of several paths — any combination of conditions that evaluate true is taken.
An inclusive gateway (a diamond with a circle) sits between an exclusive gateway's "pick exactly one" and a parallel gateway's "take all paths": every outgoing flow whose condition is true is activated, and the matching join waits only for the branches that were actually taken.
It models scenarios like a support ticket that might need escalation, a refund, or both, depending on independent conditions.
Example
Bpmn.createProcess("ticket")
.startEvent("start")
.inclusiveGateway("gw", { name: "Which apply?" })
.branch("escalate", (b) => b.condition("= severity = \"high\"").serviceTask("escalate", { taskType: "escalate" }))
.branch("refund", (b) => b.condition("= refundRequested").serviceTask("refund", { taskType: "refund" }))
.join("join")
.endEvent("end")
.withAutoLayout()
.build();
Try it hands-on: Flexible branching with inclusive gateways →