Missing Gateways

Hi, I’m currently looking through the code and am having trouble understanding where the definitions for the shapes are? The main reason being, after looking at some bpmn diagrams, I noticed a few gateways missing (e.g. the Exclusive Event-based gateway and the Parallel Event-based gateway). I was wondering how I would be able to either add those shapes or use them?

Thank you!

Hi @Henry11, welcome!

The definitions for the BPMN shapes are defined in bpmn-moddle, which is based on the BPMN 2.0 standard. It might be that some special cases are not supported by bpmn-js so far.

Exclusive Event-based gateway and the Parallel Event-based gateway

Seems like we already support different event-based gateway types in the definitions, and also bpmn-js is capable importing / rendering these types.

However, we currently consider exclusive as the default type when creating new shapes. Seems like there was a decision a couple of while ago to not support modeling the other types.

So you would have two options here:

  • Creating a new issue for adding modeling support for the two gateway types, giving some details for which case they are important to you
  • Creating them as custom elements yourself

Thank you for the reply Niklas!

I guess I’m still a little confused on how to interpret the bpmn-moddle as well as everything else as I’m fairly new to the tool. I noticed that bpmn-fonts has all the svg’s and I can go into the dist folder to view them as well but that’s as far as my understanding goes. And looking at the examples online does help a little but I’m just confused on where to start when it comes to setting up a blank page and adding custom images as well as properties.

If you have any very basic examples that might help out or even documentation that explains what all is happening, I would really appreciate it!


Did you already check out the custom elements example? It shows step by step how to provide customized elements inside a bpmn-js Modeler and which parts to extend.

It also depends a bit on what you want to achieve. If you have specific details to share, feel free to open another thread with your use case and we will try to help you :+1: