# flowable/flowable-engine architecture

> Architecture diagram of the GitHub repository flowable/flowable-engine, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/flowable/flowable-engine
- Repository: https://github.com/flowable/flowable-engine

## Overview

Flowable is a Java workflow/BPM platform combining BPMN process, CMMN case, and DMN decision engines, with Java and REST APIs and Spring integration. Its principal user journey is to submit work through an API, have an engine orchestrate process/case activity and decisions, and retrieve resulting state; the README describes these capabilities but does not establish detailed runtime routing. The sampled code confirms shared command/session infrastructure, entity persistence/event handling, CMMN agenda creation, and external-worker job querying. Dashed, uncited links represent documented capabilities whose implementation wiring was not sampled.

Main entry points: [`modules/flowable-engine/src/main/java/org/flowable/engine/RuntimeService.java`](https://github.com/flowable/flowable-engine/blob/main/modules/flowable-engine/src/main/java/org/flowable/engine/RuntimeService.java) (Java APIs), [`modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/agenda/CmmnEngineAgendaSessionFactory.java`](https://github.com/flowable/flowable-engine/blob/main/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/agenda/CmmnEngineAgendaSessionFactory.java) (CMMN cases), [`modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/entity/AbstractProcessEngineEntityManager.java`](https://github.com/flowable/flowable-engine/blob/main/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/entity/AbstractProcessEngineEntityManager.java) (Process persistence)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["API interfaces"]
  node_java_api["Java APIs"]
  node_rest_api["REST APIs"]
end

subgraph group_engines["Workflow engines"]
  node_bpmn["BPMN processes<br/>engine"]
  node_cmmn["CMMN cases<br/>engine"]
  node_dmn["DMN decisions<br/>engine"]
end

subgraph group_runtime["Execution runtime"]
  node_cmmn_agenda["CMMN agenda<br/>agenda factory"]
end

subgraph group_persistence["State persistence"]
  node_process_persistence["Process persistence<br/>entity manager"]
  node_state_store[("Workflow state<br/>state store")]
end

node_user(("User or client<br/>external actor"))

node_user -.->|"submits work"| node_java_api
node_user -.->|"submits work"| node_rest_api
node_java_api -.->|"submits work"| node_bpmn
node_rest_api -.->|"submits work"| node_bpmn
node_bpmn -.->|"orchestrates cases"| node_cmmn
node_bpmn -.->|"uses decisions"| node_dmn
node_cmmn -->|"creates agenda"| node_cmmn_agenda
node_bpmn -.->|"persists state"| node_process_persistence
node_process_persistence -.->|"stores entities"| node_state_store
node_state_store -.->|"returns state"| node_java_api
node_state_store -.->|"returns state"| node_rest_api

click node_java_api "https://github.com/flowable/flowable-engine/blob/main/modules/flowable-engine/src/main/java/org/flowable/engine/RuntimeService.java"
click node_cmmn "https://github.com/flowable/flowable-engine/blob/main/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/agenda/CmmnEngineAgendaSessionFactory.java"
click node_cmmn_agenda "https://github.com/flowable/flowable-engine/blob/main/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/agenda/CmmnEngineAgendaSessionFactory.java"
click node_process_persistence "https://github.com/flowable/flowable-engine/blob/main/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/entity/AbstractProcessEngineEntityManager.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_java_api,node_rest_api,node_user toneBlue
class node_bpmn,node_cmmn,node_dmn toneAmber
class node_cmmn_agenda toneMint
class node_process_persistence,node_state_store toneRose
```

## Components

### API interfaces

- [Java APIs](https://github.com/flowable/flowable-engine/blob/main/modules/flowable-engine/src/main/java/org/flowable/engine/RuntimeService.java): API · `modules/flowable-engine/src/main/java/org/flowable/engine/RuntimeService.java`
- **REST APIs**: API

### Workflow engines

- **BPMN processes**: engine
- [CMMN cases](https://github.com/flowable/flowable-engine/blob/main/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/agenda/CmmnEngineAgendaSessionFactory.java): engine · `modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/agenda/CmmnEngineAgendaSessionFactory.java`
- **DMN decisions**: engine

### Execution runtime

- [CMMN agenda](https://github.com/flowable/flowable-engine/blob/main/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/agenda/CmmnEngineAgendaSessionFactory.java): agenda factory · `modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/agenda/CmmnEngineAgendaSessionFactory.java`

### State persistence

- [Process persistence](https://github.com/flowable/flowable-engine/blob/main/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/entity/AbstractProcessEngineEntityManager.java): entity manager · `modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/entity/AbstractProcessEngineEntityManager.java`
- **Workflow state**: state store

### Other components

- **User or client**: external actor

## Connections

- User or client → Java APIs: submits work
- User or client → REST APIs: submits work
- Java APIs → BPMN processes: submits work
- REST APIs → BPMN processes: submits work
- BPMN processes → CMMN cases: orchestrates cases
- BPMN processes → DMN decisions: uses decisions
- CMMN cases → CMMN agenda: creates agenda (evidence: `modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/agenda/CmmnEngineAgendaSessionFactory.java`)
- BPMN processes → Process persistence: persists state
- Process persistence → Workflow state: stores entities
- Workflow state → Java APIs: returns state
- Workflow state → REST APIs: returns state
