# kiegroup/jbpm architecture

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

- Interactive diagram: https://gitdiagram.com/kiegroup/jbpm
- Repository: https://github.com/kiegroup/jbpm

## Overview

jBPM is a Java toolkit for embedding or hosting business-process and decision automation. A typical user-defined process is represented in BPMN, assembled into runtime processes, and executed through services; human tasks and process state can then be queried and audited. The repository also documents case management, document storage, and process-data export capabilities. The tree and excerpts establish several query and persistence relationships, but do not show the complete runtime wiring; those capability links are therefore marked unverified rather than presented as inspected call paths.

Main entry points: [`jbpm-runtime-manager/src/main/java/org/jbpm/runtime/manager/impl/RuntimeEngineImpl.java`](https://github.com/kiegroup/jbpm/blob/main/jbpm-runtime-manager/src/main/java/org/jbpm/runtime/manager/impl/RuntimeEngineImpl.java) (Runtime Engine), [`jbpm-services/jbpm-kie-services/src/main/java/org/jbpm/kie/services/impl/query/QueryServiceImpl.java`](https://github.com/kiegroup/jbpm/blob/main/jbpm-services/jbpm-kie-services/src/main/java/org/jbpm/kie/services/impl/query/QueryServiceImpl.java) (Query Service), [`jbpm-human-task/jbpm-human-task-jpa/src/main/java/org/jbpm/services/task/impl/model/TaskImpl.java`](https://github.com/kiegroup/jbpm/blob/main/jbpm-human-task/jbpm-human-task-jpa/src/main/java/org/jbpm/services/task/impl/model/TaskImpl.java) (Task Records), [`jbpm-human-task/jbpm-human-task-audit/src/main/java/org/jbpm/services/task/audit/service/TaskAuditQueryModificationService.java`](https://github.com/kiegroup/jbpm/blob/main/jbpm-human-task/jbpm-human-task-audit/src/main/java/org/jbpm/services/task/audit/service/TaskAuditQueryModificationService.java) (Task Audit Filters)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_process["Process Runtime"]
  node_builder["BPMN Assembly"]
  node_bpmn["BPMN Model<br/>[Expression.java]"]
  node_context["Process Context<br/>[Context.java]"]
  node_runtime["Runtime Engine"]
end

subgraph group_tasks["Human Tasks"]
  node_taskapi["Task Service API"]
  node_taskquery["Task Queries"]
  node_taskmodel[("Task Records<br/>[TaskImpl.java]")]
  node_case["Case Management<br/>[CaseService.java]"]
end

subgraph group_query["Query Services"]
  node_queryapi["Query API<br/>[QueryService.java]"]
  node_queryimpl["Query Service"]
  node_querydef["Query Definitions"]
  node_querywhere["Query Criteria<br/>[QueryWhere.java]"]
  node_criteria["Criteria Builder"]
  node_taskcriteria["Task Criteria"]
  node_taskauditcriteria["Task Audit Filters"]
end

subgraph group_state["State and Audit"]
  node_command["Command Service"]
  node_audit["Process Audit"]
  node_persistence[("Process Persistence")]
end

subgraph group_extensions["Product Extensions"]
  node_documents[("Document Storage")]
  node_executor["Job Executor"]
  node_xes["Process Data Export"]
end

node_user(("Application User"))

node_user -.->|"defines process"| node_builder
node_builder -.->|"assembles"| node_bpmn
node_bpmn -.->|"runs process"| node_runtime
node_runtime -.->|"uses context"| node_context
node_runtime -.->|"supports tasks"| node_taskapi
node_taskapi -.->|"queries tasks"| node_taskquery
node_taskquery -->|"queries records"| node_taskmodel
node_user -.->|"requests data"| node_queryapi
node_queryapi -.->|"implemented by"| node_queryimpl
node_queryimpl -->|"registers queries"| node_querydef
node_queryimpl -.->|"accepts filters"| node_querywhere
node_querywhere -.->|"builds criteria"| node_criteria
node_taskcriteria -->|"queries task data"| node_taskmodel
node_taskauditcriteria -->|"extends criteria"| node_criteria
node_taskauditcriteria -->|"filters task records"| node_taskmodel
node_runtime -.->|"stores process state"| node_persistence
node_runtime -.->|"records execution"| node_audit
node_runtime -.->|"supports cases"| node_case
node_runtime -.->|"uses documents"| node_documents
node_runtime -.->|"schedules work"| node_executor
node_audit -.->|"exports history"| node_xes

click node_builder "https://github.com/kiegroup/jbpm/blob/main/jbpm-flow-builder/src/main/java/org/jbpm/assembler/BPMN2AssemblerService.java"
click node_bpmn "https://github.com/kiegroup/jbpm/blob/main/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/core/Expression.java"
click node_context "https://github.com/kiegroup/jbpm/blob/main/jbpm-flow/src/main/java/org/jbpm/process/core/Context.java"
click node_runtime "https://github.com/kiegroup/jbpm/blob/main/jbpm-runtime-manager/src/main/java/org/jbpm/runtime/manager/impl/RuntimeEngineImpl.java"
click node_taskapi "https://github.com/kiegroup/jbpm/blob/main/jbpm-services/jbpm-services-api/src/main/java/org/jbpm/services/api/UserTaskService.java"
click node_taskquery "https://github.com/kiegroup/jbpm/blob/main/jbpm-human-task/jbpm-human-task-core/src/main/java/org/jbpm/services/task/impl/TaskQueryServiceImpl.java"
click node_taskmodel "https://github.com/kiegroup/jbpm/blob/main/jbpm-human-task/jbpm-human-task-jpa/src/main/java/org/jbpm/services/task/impl/model/TaskImpl.java"
click node_case "https://github.com/kiegroup/jbpm/blob/main/jbpm-case-mgmt/jbpm-case-mgmt-api/src/main/java/org/jbpm/casemgmt/api/CaseService.java"
click node_queryapi "https://github.com/kiegroup/jbpm/blob/main/jbpm-services/jbpm-services-api/src/main/java/org/jbpm/services/api/query/QueryService.java"
click node_queryimpl "https://github.com/kiegroup/jbpm/blob/main/jbpm-services/jbpm-kie-services/src/main/java/org/jbpm/kie/services/impl/query/QueryServiceImpl.java"
click node_querydef "https://github.com/kiegroup/jbpm/blob/main/jbpm-services/jbpm-services-api/src/main/java/org/jbpm/services/api/query/model/QueryDefinition.java"
click node_querywhere "https://github.com/kiegroup/jbpm/blob/main/jbpm-query-jpa/src/main/java/org/jbpm/query/jpa/data/QueryWhere.java"
click node_criteria "https://github.com/kiegroup/jbpm/blob/main/jbpm-query-jpa/src/main/java/org/jbpm/query/jpa/impl/QueryCriteriaUtil.java"
click node_taskcriteria "https://github.com/kiegroup/jbpm/blob/main/jbpm-human-task/jbpm-human-task-jpa/src/main/java/org/jbpm/services/task/persistence/TaskSummaryQueryCriteriaUtil.java"
click node_taskauditcriteria "https://github.com/kiegroup/jbpm/blob/main/jbpm-human-task/jbpm-human-task-audit/src/main/java/org/jbpm/services/task/audit/service/TaskAuditQueryModificationService.java"
click node_command "https://github.com/kiegroup/jbpm/blob/main/jbpm-services/jbpm-shared-services/src/main/java/org/jbpm/shared/services/impl/TransactionalCommandService.java"
click node_audit "https://github.com/kiegroup/jbpm/blob/main/jbpm-audit/src/main/java/org/jbpm/process/audit/AbstractAuditLogger.java"
click node_persistence "https://github.com/kiegroup/jbpm/blob/main/jbpm-persistence/jbpm-persistence-jpa/src/main/java/org/jbpm/persistence/ProcessStorage.java"
click node_documents "https://github.com/kiegroup/jbpm/blob/main/jbpm-document/src/main/java/org/jbpm/document/service/DocumentStorageService.java"
click node_executor "https://github.com/kiegroup/jbpm/blob/main/jbpm-services/jbpm-executor/src/main/java/org/jbpm/executor/impl/jpa/ExecutorQueryServiceImpl.java"
click node_xes "https://github.com/kiegroup/jbpm/blob/main/jbpm-xes/src/main/java/org/jbpm/xes/XESExportService.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_builder,node_bpmn,node_context,node_runtime,node_user toneBlue
class node_taskapi,node_taskquery,node_taskmodel,node_case toneAmber
class node_queryapi,node_queryimpl,node_querydef,node_querywhere,node_criteria,node_taskcriteria,node_taskauditcriteria toneMint
class node_command,node_audit,node_persistence toneRose
class node_documents,node_executor,node_xes toneIndigo
```

## Components

### Process Runtime

- [BPMN Assembly](https://github.com/kiegroup/jbpm/blob/main/jbpm-flow-builder/src/main/java/org/jbpm/assembler/BPMN2AssemblerService.java): `jbpm-flow-builder/src/main/java/org/jbpm/assembler/BPMN2AssemblerService.java`
- [BPMN Model](https://github.com/kiegroup/jbpm/blob/main/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/core/Expression.java): `jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/core/Expression.java`
- [Process Context](https://github.com/kiegroup/jbpm/blob/main/jbpm-flow/src/main/java/org/jbpm/process/core/Context.java): `jbpm-flow/src/main/java/org/jbpm/process/core/Context.java`
- [Runtime Engine](https://github.com/kiegroup/jbpm/blob/main/jbpm-runtime-manager/src/main/java/org/jbpm/runtime/manager/impl/RuntimeEngineImpl.java): `jbpm-runtime-manager/src/main/java/org/jbpm/runtime/manager/impl/RuntimeEngineImpl.java`

### Human Tasks

- [Task Service API](https://github.com/kiegroup/jbpm/blob/main/jbpm-services/jbpm-services-api/src/main/java/org/jbpm/services/api/UserTaskService.java): `jbpm-services/jbpm-services-api/src/main/java/org/jbpm/services/api/UserTaskService.java`
- [Task Queries](https://github.com/kiegroup/jbpm/blob/main/jbpm-human-task/jbpm-human-task-core/src/main/java/org/jbpm/services/task/impl/TaskQueryServiceImpl.java): `jbpm-human-task/jbpm-human-task-core/src/main/java/org/jbpm/services/task/impl/TaskQueryServiceImpl.java`
- [Task Records](https://github.com/kiegroup/jbpm/blob/main/jbpm-human-task/jbpm-human-task-jpa/src/main/java/org/jbpm/services/task/impl/model/TaskImpl.java): `jbpm-human-task/jbpm-human-task-jpa/src/main/java/org/jbpm/services/task/impl/model/TaskImpl.java`
- [Case Management](https://github.com/kiegroup/jbpm/blob/main/jbpm-case-mgmt/jbpm-case-mgmt-api/src/main/java/org/jbpm/casemgmt/api/CaseService.java): `jbpm-case-mgmt/jbpm-case-mgmt-api/src/main/java/org/jbpm/casemgmt/api/CaseService.java`

### Query Services

- [Query API](https://github.com/kiegroup/jbpm/blob/main/jbpm-services/jbpm-services-api/src/main/java/org/jbpm/services/api/query/QueryService.java): `jbpm-services/jbpm-services-api/src/main/java/org/jbpm/services/api/query/QueryService.java`
- [Query Service](https://github.com/kiegroup/jbpm/blob/main/jbpm-services/jbpm-kie-services/src/main/java/org/jbpm/kie/services/impl/query/QueryServiceImpl.java): `jbpm-services/jbpm-kie-services/src/main/java/org/jbpm/kie/services/impl/query/QueryServiceImpl.java`
- [Query Definitions](https://github.com/kiegroup/jbpm/blob/main/jbpm-services/jbpm-services-api/src/main/java/org/jbpm/services/api/query/model/QueryDefinition.java): `jbpm-services/jbpm-services-api/src/main/java/org/jbpm/services/api/query/model/QueryDefinition.java`
- [Query Criteria](https://github.com/kiegroup/jbpm/blob/main/jbpm-query-jpa/src/main/java/org/jbpm/query/jpa/data/QueryWhere.java): `jbpm-query-jpa/src/main/java/org/jbpm/query/jpa/data/QueryWhere.java`
- [Criteria Builder](https://github.com/kiegroup/jbpm/blob/main/jbpm-query-jpa/src/main/java/org/jbpm/query/jpa/impl/QueryCriteriaUtil.java): `jbpm-query-jpa/src/main/java/org/jbpm/query/jpa/impl/QueryCriteriaUtil.java`
- [Task Criteria](https://github.com/kiegroup/jbpm/blob/main/jbpm-human-task/jbpm-human-task-jpa/src/main/java/org/jbpm/services/task/persistence/TaskSummaryQueryCriteriaUtil.java): `jbpm-human-task/jbpm-human-task-jpa/src/main/java/org/jbpm/services/task/persistence/TaskSummaryQueryCriteriaUtil.java`
- [Task Audit Filters](https://github.com/kiegroup/jbpm/blob/main/jbpm-human-task/jbpm-human-task-audit/src/main/java/org/jbpm/services/task/audit/service/TaskAuditQueryModificationService.java): `jbpm-human-task/jbpm-human-task-audit/src/main/java/org/jbpm/services/task/audit/service/TaskAuditQueryModificationService.java`

### State and Audit

- [Command Service](https://github.com/kiegroup/jbpm/blob/main/jbpm-services/jbpm-shared-services/src/main/java/org/jbpm/shared/services/impl/TransactionalCommandService.java): `jbpm-services/jbpm-shared-services/src/main/java/org/jbpm/shared/services/impl/TransactionalCommandService.java`
- [Process Audit](https://github.com/kiegroup/jbpm/blob/main/jbpm-audit/src/main/java/org/jbpm/process/audit/AbstractAuditLogger.java): `jbpm-audit/src/main/java/org/jbpm/process/audit/AbstractAuditLogger.java`
- [Process Persistence](https://github.com/kiegroup/jbpm/blob/main/jbpm-persistence/jbpm-persistence-jpa/src/main/java/org/jbpm/persistence/ProcessStorage.java): `jbpm-persistence/jbpm-persistence-jpa/src/main/java/org/jbpm/persistence/ProcessStorage.java`

### Product Extensions

- [Document Storage](https://github.com/kiegroup/jbpm/blob/main/jbpm-document/src/main/java/org/jbpm/document/service/DocumentStorageService.java): `jbpm-document/src/main/java/org/jbpm/document/service/DocumentStorageService.java`
- [Job Executor](https://github.com/kiegroup/jbpm/blob/main/jbpm-services/jbpm-executor/src/main/java/org/jbpm/executor/impl/jpa/ExecutorQueryServiceImpl.java): `jbpm-services/jbpm-executor/src/main/java/org/jbpm/executor/impl/jpa/ExecutorQueryServiceImpl.java`
- [Process Data Export](https://github.com/kiegroup/jbpm/blob/main/jbpm-xes/src/main/java/org/jbpm/xes/XESExportService.java): `jbpm-xes/src/main/java/org/jbpm/xes/XESExportService.java`

### Other components

- **Application User**

## Connections

- Application User → BPMN Assembly: defines process (evidence: `README.md`)
- BPMN Assembly → BPMN Model: assembles
- BPMN Model → Runtime Engine: runs process (evidence: `README.md`)
- Runtime Engine → Process Context: uses context
- Runtime Engine → Task Service API: supports tasks
- Task Service API → Task Queries: queries tasks
- Task Queries → Task Records: queries records (evidence: `jbpm-human-task/jbpm-human-task-core/src/main/java/org/jbpm/services/task/impl/TaskQueryServiceImpl.java`)
- Application User → Query API: requests data
- Query API → Query Service: implemented by (evidence: `jbpm-services/jbpm-kie-services/src/main/java/org/jbpm/kie/services/impl/query/QueryServiceImpl.java`)
- Query Service → Query Definitions: registers queries (evidence: `jbpm-services/jbpm-kie-services/src/main/java/org/jbpm/kie/services/impl/query/QueryServiceImpl.java`)
- Query Service → Query Criteria: accepts filters
- Query Criteria → Criteria Builder: builds criteria (evidence: `jbpm-query-jpa/src/main/java/org/jbpm/query/jpa/impl/QueryCriteriaUtil.java`)
- Task Criteria → Task Records: queries task data (evidence: `jbpm-human-task/jbpm-human-task-jpa/src/main/java/org/jbpm/services/task/persistence/TaskSummaryQueryCriteriaUtil.java`)
- Task Audit Filters → Criteria Builder: extends criteria (evidence: `jbpm-human-task/jbpm-human-task-audit/src/main/java/org/jbpm/services/task/audit/service/TaskAuditQueryModificationService.java`)
- Task Audit Filters → Task Records: filters task records (evidence: `jbpm-human-task/jbpm-human-task-audit/src/main/java/org/jbpm/services/task/audit/service/TaskAuditQueryModificationService.java`)
- Runtime Engine → Process Persistence: stores process state
- Runtime Engine → Process Audit: records execution
- Runtime Engine → Case Management: supports cases
- Runtime Engine → Document Storage: uses documents
- Runtime Engine → Job Executor: schedules work
- Process Audit → Process Data Export: exports history
