Python JavaScript HTML CSS



Reusable workflow library for Django

Viewflow is the workflow library based on BPMN concepts. BPMN - business process modeling and notations - is the wide adopted industry standard for business process modeling. BPMN provides a standard notation readily understandable by all business stakeholders. Viewflow bridging the gap between picture and executable, ready to use web application.


After over than 10 years history of the BPMN standard, it contains whole set of battle-proven primitives for all occasions, helps you to describe all real life business process scenarios. Viewflow helps you to build a bpmn diagram in code and keep business logic separate from django forms and views code.


Read the documentation at the


Viewflow is an Open Source project licensed under the terms of the AGPL license - The GNU Affero General Public License v3.0

Viewflow Pro has a commercial-friendly license allowing private forks and modifications of Viewflow. You can find the commercial license terms in COMM-LICENSE. Please see FAQ for more detail.

Latest changelog

0.12.0 - 2017-02-14

This is the cumulative release with many backward incompatibility changes.

  • Django 1.6 now longer supported.
  • Frontend now a part of the open-source package.
  • Flow chart visualization added
  • Every _cls suffix, ex in flow_cls, activation_cls, was renamed to _class. The reason for that is just to be consistent with django naming theme.
  • Django-Extra-Views integration is removed. This was a pretty creepy way to handle Formsets and Inlines within django class-based views. Instead, django-material introduce a new way to handle Form Inlines same as a standard form field. See details in the documentation.
  • Views are no longer inherits and implement an Activation interface. This change makes things much simple internally, and fixes inconsistency, in different scenarios. @flow_view, @flow_start_view decorators are no longer callable.
  • Activation now passed as a request attribute. You need to remove explicit activation parameter from view function signature, and use request.activation instead.
  • Built-in class based views are renamed, to be more consistent. Check the documentation to find a new view name.
  • If().OnTrue().OnFalse() renamed to If().Then().Else()
  • All conditions in If, Switch and other nodes receives now a node activation instance instead of process. So you can gen an access to the current task via activation.task variable.
  • Same for callable in the .Assign() and .Permissions definitions.
  • task_loader not is the attribute of a flow task. In makes functions and signal handlers reusable over different flows.
  • Flow namespace are no longer hardcoded. Flow views now can be attached to any namespace in a URL config.
  • flow_start_func, flow_start_signal decorators need to be used for the start nodes handlers. Decorators would establish a proper locking avoids concurrent flow process modifications in the background tasks.
  • To use celery job with django 1.8, django-transaction-hooks need to be enabled.