BPMN Coverage
Last modified: April 28, 2026
Mendix supports a broad range of BPMN constructs, either directly on the Workflow canvas or through the wider Mendix platform.
Support Levels
Each BPMN element is marked with a support level indicator:
- 🟢 Workflow Native – Directly available as a dedicated element in the workflow editor with zero extra effort
- 🟡 Composable – Achieved by combining workflow editor constructs and/or platform features
- 🔵 Planned – Support is planned for an upcoming release
- 🔴 Not Supported – Not currently supported in Mendix
- N/A – Concept does not exist in the BPMN 2.0 specification. It is not a Mendix limitation.
Gateways
| Element |
Support Level |
How |
| Exclusive Gateway (XOR) |
🟢 Workflow Native |
Decision |
| Parallel Gateway (AND) |
🟢 Workflow Native |
Parallel Split |
| Inclusive Gateway (OR) |
🟡 Composable |
Use a Parallel Split with a path for each possible condition. On each path, add a Decision that checks if the condition is true. If true, execute the activities on that path. If false, the path continues directly to the merge. The workflow waits for all paths to complete before continuing. Note: There is no default or catch-all path – if you need one, model it explicitly with an additional decision. |
| Event-Based Gateway |
🔴 Not Supported |
Not supported. |
| Complex Gateway |
🔴 Not Supported |
Not supported. |
Tasks
Subprocesses
| Element |
Support Level |
How |
| Embedded Subprocess |
🔴 Not Supported |
Not supported. |
| Call Activity (Reusable Subprocess) |
🟢 Workflow Native |
Call Workflow |
| Event Subprocess |
🟢 Workflow Native |
Event Subprocess |
| Transaction Subprocess |
🔴 Not Supported |
Not supported. |
| Ad-hoc Subprocess |
🔴 Not Supported |
Not supported. |
Swimlanes
| Element |
Support Level |
How |
| Pool |
🟡 Composable |
The workflow itself acts as the process boundary – one workflow equals one pool. It is not visible as a canvas element, but the construct is supported. |
| Lane |
🟡 Composable |
Use User Task assignments with Roles and Workflow Groups to define who is responsible for each step. It is not visible as a canvas element, but the construct is supported. |
Data
| Element |
Support Level |
How |
| Data Object, Data Input, Data Output, Data Store |
🟡 Composable |
Mendix does not have visual equivalents for these concepts on the Workflow canvas. You manage all data through entities defined in the domain model. Pass one entity into the workflow via the workflow parameter to create $WorkflowContext, which gives you access to business data throughout the entire workflow. $WorkflowInstance is always available alongside it for Workflow Engine data (System.Workflow). Because the context entity is always persistable, there is no distinction between temporary and persistent data. You do not need separate Data Object, Data Input, Data Output, or Data Store constructs in Mendix. |
Artifacts
| Element |
Support Level |
How |
| Text Annotation |
🟢 Workflow Native |
Use the Annotation element on the Workflow canvas to add descriptive notes. |
| Group |
🔴 Not Supported |
Not supported. |
Events
Mendix supports a broad range of BPMN event types. Some are available directly as elements on the Workflow canvas. Others are achieved through microflows that contain workflow-related activities.
None Events
| Variant |
Support Level |
How |
| Start |
🟢 Workflow Native |
Every workflow has one start event. Start a workflow by providing an object of the entity type that the workflow expects. Use the Call Workflow page action (for example, on a button with a data view) or the Call Workflow activity in a microflow where you pass the context object. |
| Event Subprocess (Interrupting) |
N/A |
N/A |
| Event Subprocess (Non-Interrupting) |
N/A |
N/A |
| Intermediate Catch |
N/A |
N/A |
| Intermediate Boundary (Interrupting) |
N/A |
N/A |
| Intermediate Boundary (Non-Interrupting) |
N/A |
N/A |
| Intermediate Throw |
N/A |
N/A |
| End |
🟢 Workflow Native |
End Event |
Message Events
| Variant |
Support Level |
How |
| Start |
🟡 Composable |
Same as None Start – process the message data in a microflow, create or populate an object of the entity type that the workflow expects, and start the workflow using the Call Workflow activity by passing that context object. Alternatively, use the Call Workflow page action on a page. |
| Event Subprocess (Interrupting) |
🟢 Workflow Native |
Interrupting Notification Event Subprocess Start |
| Event Subprocess (Non-Interrupting) |
🟢 Workflow Native |
Non-Interrupting Notification Event Subprocess Start |
| Intermediate Catch |
🔵 Planned |
As Notification Event, use Wait for Notification activity as an alternative. |
| Intermediate Boundary (Interrupting) |
🔵 Planned |
As Interrupting Notification Event. |
| Intermediate Boundary (Non-Interrupting) |
🔵 Planned |
As Non-Interrupting Notification Event. |
| Intermediate Throw |
🟡 Composable |
Use a Call Microflow activity as the throw event. Within the microflow, include a Notify Workflow activity to send the message and continue the flow. |
| End |
🟡 Composable |
Use a Call Microflow activity as the throw event. Within the microflow, include a Notify Workflow activity to send the message before the process completes. |
Timer Events
| Variant |
Support Level |
How |
| Start |
🟡 Composable |
Use a scheduled event to run a microflow that starts the workflow using the Call Workflow activity. |
| Event Subprocess (Interrupting) |
🔵 Planned |
As Interrupting Timer Event Subprocess Start. |
| Event Subprocess (Non-Interrupting) |
🔵 Planned |
As Non-Interrupting Timer Event Subprocess Start. |
| Intermediate Catch |
🟢 Workflow Native |
Timer |
| Intermediate Boundary (Interrupting) |
🟢 Workflow Native |
Interrupting Timer Event |
| Intermediate Boundary (Non-Interrupting) |
🟢 Workflow Native |
Non-Interrupting Timer Event |
| Intermediate Throw |
N/A |
N/A |
| End |
N/A |
N/A |
Error Events
| Variant |
Support Level |
How |
| Start |
N/A |
N/A |
| Event Subprocess (Interrupting) |
🟡 Composable |
Use an Interrupting Notification Event Subprocess Start to catch the event, and use a microflow to handle the error logic and send a notification using a Notify Workflow activity when an error occurs. |
| Event Subprocess (Non-Interrupting) |
N/A |
N/A |
| Intermediate Catch |
N/A |
N/A |
| Intermediate Boundary (Interrupting) |
🔵 Planned |
Use an Interrupting Notification Event (Planned) to catch the event, and use a microflow to handle the error logic and send a notification using a Notify Workflow activity when an error occurs. |
| Intermediate Boundary (Non-Interrupting) |
N/A |
N/A |
| Intermediate Throw |
N/A |
N/A |
| End |
🟡 Composable |
Use a Call Microflow activity as the throw event. Within the microflow, include a Notify Workflow activity to throw the error before the process completes. |
Signal Events
| Variant |
Support Level |
How |
| Start |
🟡 Composable |
Use a microflow with multiple Call Workflow activities to start multiple workflows and deliver the signal to all instances. |
| Event Subprocess (Interrupting) |
🟡 Composable |
Use an Interrupting Notification Event Subprocess Start to catch the event, and use a microflow with multiple Notify Workflow activities to deliver the signal to all waiting instances. |
| Event Subprocess (Non-Interrupting) |
🟡 Composable |
Use a Non-Interrupting Notification Event Subprocess Start to catch the event, and use a microflow with multiple Notify Workflow activities to deliver the signal to all waiting instances. |
| Intermediate Catch |
🟡 Composable |
Use a Wait for Notification activity to catch the event, and use a microflow with multiple Notify Workflow activities to deliver the signal to all waiting instances. |
| Intermediate Boundary (Interrupting) |
🔵 Planned |
Use an Interrupting Notification Event (Planned) to catch the event, and use a microflow with multiple Notify Workflow activities to deliver the signal to all waiting instances. |
| Intermediate Boundary (Non-Interrupting) |
🔵 Planned |
Use a Non-Interrupting Notification Event (Planned) to catch the event, and use a microflow with multiple Notify Workflow activities to deliver the signal to all waiting instances. |
| Intermediate Throw |
🟡 Composable |
Use a Call Microflow activity as the throw event. Within the microflow, include multiple Notify Workflow activities to deliver the signal to all waiting instances. |
| End |
🟡 Composable |
Use a Call Microflow activity as the throw event. Within the microflow, include multiple Notify Workflow activities to deliver the signal to all waiting instances before the process completes. |
Conditional Events
| Variant |
Support Level |
How |
| Start |
🟡 Composable |
Use a microflow that checks the condition and starts the workflow using the Call Workflow activity only when the condition is met. |
| Event Subprocess (Interrupting) |
🟡 Composable |
Use an Interrupting Notification Event Subprocess Start to catch the event, and use a microflow to evaluate or create the condition and send a notification using a Notify Workflow activity when the condition is met. |
| Event Subprocess (Non-Interrupting) |
🟡 Composable |
Use a Non-Interrupting Notification Event Subprocess Start to catch the event, and use a microflow to evaluate or create the condition and send a notification using a Notify Workflow activity when the condition is met. |
| Intermediate Catch |
🟡 Composable |
Use Call Microflow to evaluate the condition and return a result, then use a Decision to route the workflow based on that result. |
| Intermediate Boundary (Interrupting) |
🔵 Planned |
Use an Interrupting Notification Event (Planned) to catch the event, and use a microflow to evaluate or create the condition and send a notification using a Notify Workflow activity when the condition is met. |
| Intermediate Boundary (Non-Interrupting) |
🔵 Planned |
Use a Non-Interrupting Notification Event (Planned) to catch the event, and use a microflow to evaluate or create the condition and send a notification using a Notify Workflow activity when the condition is met. |
| Intermediate Throw |
N/A |
N/A |
| End |
N/A |
N/A |
Escalation Events
| Variant |
Support Level |
How |
| Start |
N/A |
N/A |
| Event Subprocess (Interrupting) |
🟡 Composable |
Use an Interrupting Notification Event Subprocess Start to catch the event, and use a microflow to evaluate the escalation condition and send a notification using a Notify Workflow activity when the escalation needs to happen. |
| Event Subprocess (Non-Interrupting) |
🟡 Composable |
Use a Non-Interrupting Notification Event Subprocess Start to catch the event, and use a microflow to evaluate the escalation condition and send a notification using a Notify Workflow activity when the escalation needs to happen. |
| Intermediate Catch |
N/A |
N/A |
| Intermediate Boundary (Interrupting) |
🔵 Planned |
Use an Interrupting Notification Event (Planned) to catch the event, and use a microflow to evaluate the escalation condition and send a notification using a Notify Workflow activity when the escalation needs to happen. |
| Intermediate Boundary (Non-Interrupting) |
🔵 Planned |
Use a Non-Interrupting Notification Event (Planned) to catch the event, and use a microflow to evaluate the escalation condition and send a notification using a Notify Workflow activity when the escalation needs to happen. |
| Intermediate Throw |
🟡 Composable |
Use a Call Microflow activity as the throw event. Within the microflow, include a Notify Workflow activity to throw the escalation and continue the flow. |
| End |
🟡 Composable |
Use a Call Microflow activity as the throw event. Within the microflow, include a Notify Workflow activity to throw the escalation before the process completes. |
Compensation Events
| Variant |
Support Level |
How |
| Start |
N/A |
N/A |
| Event Subprocess (Interrupting) |
🟡 Composable |
Use an Interrupting Notification Event Subprocess Start to catch the event, and use a microflow to evaluate the compensation condition and send a notification using a Notify Workflow activity when the compensation needs to happen. |
| Event Subprocess (Non-Interrupting) |
N/A |
N/A |
| Intermediate Catch |
N/A |
N/A |
| Intermediate Boundary (Interrupting) |
🔵 Planned |
Use an Interrupting Notification Event (Planned) to catch the event, and use a microflow to evaluate the compensation condition and send a notification using a Notify Workflow activity when the compensation needs to happen. |
| Intermediate Boundary (Non-Interrupting) |
N/A |
N/A |
| Intermediate Throw |
🟡 Composable |
Use a Call Microflow activity as the throw event. Within the microflow, include a Notify Workflow activity to throw the compensation and redirect the flow to the compensating activity. |
| End |
🟡 Composable |
Use a Call Microflow activity as the throw event. Within the microflow, include a Notify Workflow activity to throw the compensation before the process completes. |
Cancel Events
| Variant |
Support Level |
How |
| Start |
N/A |
N/A |
| Event Subprocess (Interrupting) |
N/A |
N/A |
| Event Subprocess (Non-Interrupting) |
N/A |
N/A |
| Intermediate Catch |
N/A |
N/A |
| Intermediate Boundary (Interrupting) |
🔵 Planned |
Use an Interrupting Notification Event (Planned) to catch the event, and use a microflow to send a notification using a Notify Workflow activity when the cancellation occurs. |
| Intermediate Boundary (Non-Interrupting) |
N/A |
N/A |
| Intermediate Throw |
N/A |
N/A |
| End |
🟡 Composable |
Use a Call Microflow activity as the throw event. Within the microflow, include a Notify Workflow activity to throw the cancellation before the process completes. |
Terminate Events
| Variant |
Support Level |
How |
| Start |
N/A |
N/A |
| Event Subprocess (Interrupting) |
N/A |
N/A |
| Event Subprocess (Non-Interrupting) |
N/A |
N/A |
| Intermediate Catch |
N/A |
N/A |
| Intermediate Boundary (Interrupting) |
N/A |
N/A |
| Intermediate Boundary (Non-Interrupting) |
N/A |
N/A |
| Intermediate Throw |
N/A |
N/A |
| End |
🔴 Not Supported |
Not Supported. |
Link Events
| Variant |
Support Level |
How |
| Start |
N/A |
N/A |
| Event Subprocess (Interrupting) |
N/A |
N/A |
| Event Subprocess (Non-Interrupting) |
N/A |
N/A |
| Intermediate Catch |
🟢 Workflow Native |
Jump Activity |
| Intermediate Boundary (Interrupting) |
N/A |
N/A |
| Intermediate Boundary (Non-Interrupting) |
N/A |
N/A |
| Intermediate Throw |
🟢 Workflow Native |
Jump Activity |
| End |
N/A |
N/A |
Multiple Events
| Variant |
Support Level |
How |
| Start |
🔴 Not Supported |
Not supported. |
| Event Subprocess (Interrupting) |
🔴 Not Supported |
Not supported. |
| Event Subprocess (Non-Interrupting) |
🔴 Not Supported |
Not supported. |
| Intermediate Catch |
🔴 Not Supported |
Not supported. |
| Intermediate Boundary (Interrupting) |
🔴 Not Supported |
Not supported. |
| Intermediate Boundary (Non-Interrupting) |
🔴 Not Supported |
Not supported. |
| Intermediate Throw |
🔴 Not Supported |
Not supported. |
| End |
🔴 Not Supported |
Not supported. |
Multiple Parallel Events
| Variant |
Support Level |
How |
| Start |
🔴 Not Supported |
Not supported. |
| Event Subprocess (Interrupting) |
🔴 Not Supported |
Not supported. |
| Event Subprocess (Non-Interrupting) |
🔴 Not Supported |
Not supported. |
| Intermediate Catch |
🔴 Not Supported |
Not supported. |
| Intermediate Boundary (Interrupting) |
🔴 Not Supported |
Not supported. |
| Intermediate Boundary (Non-Interrupting) |
🔴 Not Supported |
Not supported. |
| Intermediate Throw |
N/A |
N/A |
| End |
N/A |
N/A |