# bpmn-engine

> BPMN 2.0 execution engine. Open source javascript workflow engine.

Latest version **26.0.5** (published 2026-09-14) · MIT license · 0 weekly downloads

## Install

```sh
npm install bpmn-engine
pnpm add bpmn-engine
yarn add bpmn-engine
bun add bpmn-engine
```

## Health

**Score 75/100 (B)** — status: active.

Positive: has types; esm support; no vulnerabilities; has provenance; recently updated; high maintenance score; high quality score.

Warnings: low downloads.

## Facts

| | |
|---|---|
| Version | 26.0.5 |
| Published | 2026-09-14 |
| First published | 2016-08-27 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=18 |
| Dependencies | 0 |
| Unpacked size | 64.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 966 |
| Author | Pål Edman |
| Maintainers | paed01 |
| Keywords | workflow, engine, process, automation, bpmn, bpmn 2 |

## Links

- npm: https://www.npmjs.com/package/bpmn-engine
- Repository: https://github.com/paed01/bpmn-engine
- Homepage: https://github.com/paed01/bpmn-engine#readme
- Issues: https://github.com/paed01/bpmn-engine/issues
- npm.io page: https://npm.io/package/bpmn-engine

## Recent versions

- 26.0.5 (latest) — 2026-09-14
- 26.0.4 (rc) — 2026-09-08
- 26.0.3 — 2026-08-22
- 26.0.2 — 2026-08-15
- 26.0.1 — 2026-07-07
- 26.0.0 — 2026-06-13
- 25.0.1 — 2025-11-14
- 25.0.0 — 2025-03-21
- 24.0.1 — 2025-03-14
- 24.0.0 — 2025-02-09
- 23.0.2 — 2024-10-22
- 23.0.1 — 2024-09-08
- 22.0.3 — 2024-08-22
- 23.0.0 — 2024-08-08
- 22.0.2 — 2024-07-10
- … 123 more at https://npm.io/package/bpmn-engine/versions

## README

# bpmn-engine

[![Project Status: Active - The project has reached a stable, usable state and is being actively developed.](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active)

[![Build](https://github.com/paed01/bpmn-engine/actions/workflows/build.yaml/badge.svg)](https://github.com/paed01/bpmn-engine/actions/workflows/build.yaml)[![Build (Windows)](https://github.com/paed01/bpmn-engine/actions/workflows/build-windows.yaml/badge.svg)](https://github.com/paed01/bpmn-engine/actions/workflows/build-windows.yaml)[![Coverage Status](https://coveralls.io/repos/github/paed01/bpmn-engine/badge.svg?branch=master)](https://coveralls.io/github/paed01/bpmn-engine?branch=master)

# Introduction

BPMN 2.0 execution engine. Open source javascript workflow engine.

Documentation:

- [API](/docs/API.md)
- [Examples](/docs/Examples.md)
- [Upgrade version](/docs/Upgrade.md)
- [bpmn-moddle 9 vs 10](/docs/bpmn-moddle.md)
- [Changelog](/CHANGELOG.md)

<!-- toc -->

- [Peer dependencies](#peer-dependencies)
- [Supported elements](#supported-elements)
- [Extensions](#extensions)
- [Debug](#debug)
- [A pretty image of a process](#a-pretty-image-of-a-process)
- [Acknowledgments](#acknowledgments)

<!-- /toc -->

# Peer dependencies

The runtime dependencies are declared as **peer dependencies**, so you install and pin them yourself and the engine reuses your single copy:

```sh
npm install bpmn-engine bpmn-elements bpmn-moddle moddle-context-serializer debug smqp
```

| Peer dependency                                                                    | Range       | Role                                              |
| ---------------------------------------------------------------------------------- | ----------- | ------------------------------------------------- |
| [`bpmn-elements`](https://github.com/paed01/bpmn-elements)                         | `>=18.0.25` | element behaviour functions                       |
| [`bpmn-moddle`](https://github.com/bpmn-io/bpmn-moddle)                            | `>=9`       | BPMN XML parser ([9 vs 10](/docs/bpmn-moddle.md)) |
| [`moddle-context-serializer`](https://github.com/paed01/moddle-context-serializer) | `>=6`       | persistable source context                        |
| [`smqp`](https://github.com/paed01/smqp)                                           | `>=15`      | message broker driving execution                  |
| [`debug`](https://github.com/debug-js/debug)                                       | `>=4`       | logging                                           |

`bpmn-moddle` spans a major version on purpose — see [bpmn-moddle 9 vs 10](/docs/bpmn-moddle.md) for the import change and how persisted state stays compatible across the upgrade.

# Supported elements

See [bpmn-elements](https://github.com/paed01/bpmn-elements) for supported elements. The engine only support elements and attributes included in the BPMN 2.0 scheme, but can be extended to understand other schemas and elements.

The aim is to, at least, have BPMN 2.0 [core support](https://www.omg.org/bpmn/Samples/Elements/Core_BPMN_Elements.htm).

# Extensions

The engine can be extended to understand other schemas and elements. Docs, guides, and ready-made extensions for the BPMN stack are published at [0dep.se](https://0dep.se) — check there before writing a new extension from scratch.

Two ready-made extensions:

- [`@0dep/bpmn-extensions`](https://github.com/zerodep/bpmn-extensions)
- [`@onify/flow-extensions`](https://github.com/onify/flow-extensions)

# Debug

This package is shipped with [debug](https://github.com/debug-js/debug) activated with environment variable `DEBUG=bpmn-engine:*`. You can also provide your own logger.

More granular debugging can be achieved by filtering on element type:

```sh
DEBUG=*scripttask*,*:error:*
```

or on Windows PowerShell:

```powershell
$env:DEBUG='bpmn-engine:*'
```

and to turn it off you need to:

```powershell
$env:DEBUG=''
```

# A pretty image of a process

![Mother of all](https://raw.github.com/paed01/bpmn-engine/master/images/mother-of-all.png)

# Acknowledgments

The **bpmn-engine** resides upon the excellent library [bpmn-io/bpmn-moddle](https://github.com/bpmn-io/bpmn-moddle) developed by [bpmn.io](https://bpmn.io/)

All diagrams are designed with [Camunda modeler](https://camunda.com/download/modeler/).

---
_Source: https://npm.io/package/bpmn-engine · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
