bpmn-server is a lightweight, embeddable BPMN 2.0 engine for Node.js — with built-in persistence, a visual modeler, and a ready-to-deploy web app.
Features
From simple approvals to complex long-running processes — bpmn-server handles the hard parts.
Design workflows in a browser-based BPMN 2.0 modeler powered by bpmn.io — no XML editing required.
Tasks, gateways, events, sub-processes, timers, messages, signals — the complete BPMN 2.0 element set.
Instances, items, and variables are automatically persisted to MongoDB. Resume exactly where you left off.
Assign tasks to users or groups, enforce candidate rules, and integrate with your existing auth via Passport.js.
Processes survive server restarts, handle wait states, and resume across distributed clusters.
Production-ready Express web app with full REST API, modeler UI, task lists, and instance detail views.
Coordinate across process instances with BPMN message flows, signal broadcasts, and event correlation.
Drop into any Node.js app with a few lines of code. Extend with custom delegates and application listeners.
Built-in Google OAuth support — users sign in with their Google account, no password management needed.
How it works
bpmn-server bridges the gap between BPMN diagrams and production workflow execution.
Open the built-in modeler, drag and drop BPMN elements, and define data fields, assignments, and scripts in the property panel.
Save your model to the server. bpmn-server stores the BPMN XML and makes it instantly available for execution.
Call engine.start('myProcess', data) or hit the REST API. A new instance is created and persisted automatically.
User tasks appear in task lists. Users fill in forms, assign work, and invoke tasks — all tracked in the datastore.
Use the Data API to query instance state, view history, replay from save points, and track process metrics.
Quick start
Clone the demo app, configure MongoDB, and start automating.
1 — Clone & install
# Clone the demo web app
git clone https://github.com/
bpmnServer/bpmn-web.git
cd bpmn-web
npm install
# Run interactive setup
npm run setup
# Edit .env — set your MongoDB URL
npm run setup # creates DB objects
npm run start
2 — Or embed directly in your app
const { BPMNServer, DefaultAppDelegate }
= require('bpmn-server');
const { configuration }
= require('./configuration');
const server = new BPMNServer(
configuration,
new DefaultAppDelegate()
);
// Start a process instance
const result = await
server.engine.start(
'invoice',
{ amount: 1200 }
);
console.log(result.instance.id);
Open source, MIT licensed, runs on your own infrastructure. No vendor lock-in.