bpmn-server provides BPMN 2.0 Modeling, Execution and Persistence, as an open source Workflow Server for Node.js
This package is designed specifically for Node.js and developed entirely in TypeScript
A WebApp provides a UI from modeling and developing your workflow
A web based modeler is included based on http://bpmn.io , models definitions are saved at your server
Also included is BPMN-Properties-Panel to define the entire BPMN definition on-line, without the need to edit bpmn files.
bpmn-server provides an bpmnEngine to execute your workflow definition supporting BPMN 2.0
provides an environment to presist execution Instances while running and communicate with your application.
Applications can monitor and communicate to Instances whether they are running or offline, allowing user interface to query and process Workflow steps
Since instances are saved in MongoDB you can easily query your instances (running or completed)
Included is a sample web application (running Node.js and Express.js) to allow you to visualize your workflow
This package requires Node.js and an access to MongoDB () if you don't have MongoDB already installed you can create a free cloud account here
$ mkdir myBPMN
$ cd myBPMN
$ npm install bpmn-server
$ cp node_modules/bpmn-server/WebApp/. ./ -r
Windows:
xcopy /e /i /s /y node_modules\bpmn-server\WebApp\*.* .
npm install
Edit .env file to point to MongoDB and set api-key
the change would look like this:
MONGO_DB_URL=//localhost:27017?retryWrites=true&w=majority
or: MONGO_DB_URL=mongodb://:@ip?retryWrites=true&w=majority
node app
$ mkdir myClient
$ cd myClient
$ npm install bpmn-client
$ cp node_modules/bpmn-client/Sample/. ./ -r
Windows:
xcopy /e /i /s /y node_modules\bpmn-client\Sample\*.* .
npm update
Edit .env file to point to the server and set api-key
Add your own code in this directory
node test
a full demo site is available @ http://bpmn.omniworkflow.com
const server = new BPMNServer(configuration, logger);
let response = await server.engine.start('Buy Used Car');
// let us get the items
const items = response.items.filter(item => {
return (item.status == 'wait');
});
items.forEach(item => {
console.log(` waiting for <${item.name}> -<${item.elementId}> id: <${item.id}> `);
});
console.log('Invoking Buy');
response = await server.engine.invoke({ id: response.execution.id, "items.elementId": 'task_Buy' },
{ model: 'Thunderbird', needsRepairs: false, needsCleaning: false });
console.log("Ready to drive");
response = await server.engine.invoke({ id: response.execution.id, "items.elementId": 'task_Drive' });
console.log(`that is it!, process is now complete status=<${response.execution.status}>`)
for more complete examples see Examples
see RoadMap
see CHANGELOG
The bpmn-server resides upon the excellent library bpmn-io/bpmn-moddle developed by bpmn.io
The bpmn-server is inspired by the library bpmn-engine