# sgs98/warm-flow architecture

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

- Interactive diagram: https://gitdiagram.com/sgs98/warm-flow
- Repository: https://github.com/sgs98/warm-flow

## Overview

Warm-Flow is a lightweight workflow engine with a bundled design/chart UI and a runnable demo. Its main user journey is to define and publish a process, start an instance, then act on assigned tasks while the engine evaluates routes and records workflow state. The graph also preserves documented approval, expression, listener, and persistence capabilities. Core interfaces, selected implementations, and demo/UI entry points are represented; unsampled wiring is limited to the documented service boundaries and is not expanded into speculative call chains.

Main entry points: [`warm-flow-core/src/main/java/org/dromara/warm/flow/core/workflow/WorkflowServiceImpl.java`](https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/workflow/WorkflowServiceImpl.java) (Workflow orchestration), [`warm-flow-core/src/main/java/org/dromara/warm/flow/core/service/impl/DefServiceImpl.java`](https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/service/impl/DefServiceImpl.java) (Definition service), [`warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-core/src/main/java/org/dromara/warm/flow/ui/service/WarmFlowService.java`](https://github.com/sgs98/warm-flow/blob/main/warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-core/src/main/java/org/dromara/warm/flow/ui/service/WarmFlowService.java) (Designer service), [`warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowTaskDaoImpl.java`](https://github.com/sgs98/warm-flow/blob/main/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowTaskDaoImpl.java) (MyBatis-Plus adapter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_demo["Demo application"]
  node_web["Demo web client<br/>[TodoList.vue]"]
  node_controllers["Demo controllers"]
  node_demo_workflow["Demo workflow service"]
  node_definition_app["Definition management"]
end

subgraph group_designer["Design and charts"]
  node_designer_ui["Designer and chart UI<br/>[App.vue]"]
  node_designer_api["Designer service"]
  node_handler_select["Handler selection SPI"]
end

subgraph group_engine["Workflow engine"]
  node_workflow_api["Workflow facade"]
  node_workflow_impl["Workflow orchestration"]
  node_pipeline["Operation pipeline<br/>[FlowPipeline.java]"]
  node_routing["Path and conditions"]
  node_expressions["Expression strategies"]
  node_listeners["Workflow listeners<br/>[Listener.java]"]
end

subgraph group_domain["Process and tasks"]
  node_definition["Definition service"]
  node_task["Task service"]
  node_instance["Instance service"]
  node_chart["Chart service"]
end

subgraph group_persistence["Persistence adapters"]
  node_mybatis_plus["MyBatis-Plus adapter"]
  node_mybatis["MyBatis adapter"]
  node_database[("Workflow database")]
end

node_user(("Workflow user"))

node_user -->|"uses"| node_web
node_web -->|"calls API"| node_controllers
node_controllers -->|"delegates"| node_demo_workflow
node_demo_workflow -->|"issues commands"| node_workflow_api
node_workflow_api -->|"dispatches"| node_workflow_impl
node_workflow_impl -->|"runs steps"| node_pipeline
node_workflow_impl -->|"loads definitions"| node_definition
node_workflow_impl -->|"updates tasks"| node_task
node_workflow_impl -->|"updates instances"| node_instance
node_workflow_impl -->|"resolves paths"| node_routing
node_routing -->|"evaluates conditions"| node_expressions
node_workflow_impl -->|"notifies"| node_listeners
node_definition_app -->|"manages definitions"| node_definition
node_designer_ui -->|"calls designer API"| node_designer_api
node_designer_api -->|"loads and saves"| node_definition
node_designer_api -->|"gets chart data"| node_chart
node_designer_api -->|"queries handlers"| node_handler_select
node_chart -->|"reads process data"| node_definition
node_definition -->|"persists"| node_mybatis_plus
node_task -->|"persists"| node_mybatis_plus
node_instance -->|"persists"| node_mybatis_plus
node_mybatis_plus -->|"reads and writes"| node_database
node_mybatis -.->|"reads and writes"| node_database

click node_web "https://github.com/sgs98/warm-flow/blob/main/warm-flow-demo/warm-flow-demo-web/src/views/tasks/TodoList.vue"
click node_controllers "https://github.com/sgs98/warm-flow/blob/main/warm-flow-demo/warm-flow-demo/src/main/java/org/dromara/warm/demo/controller/TaskController.java"
click node_demo_workflow "https://github.com/sgs98/warm-flow/blob/main/warm-flow-demo/warm-flow-demo/src/main/java/org/dromara/warm/demo/service/impl/WorkflowServiceImpl.java"
click node_definition_app "https://github.com/sgs98/warm-flow/blob/main/warm-flow-demo/warm-flow-demo/src/main/java/org/dromara/warm/demo/service/impl/DefinitionServiceImpl.java"
click node_designer_ui "https://github.com/sgs98/warm-flow/blob/main/warm-flow-ui/src/App.vue"
click node_designer_api "https://github.com/sgs98/warm-flow/blob/main/warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-core/src/main/java/org/dromara/warm/flow/ui/service/WarmFlowService.java"
click node_handler_select "https://github.com/sgs98/warm-flow/blob/main/warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-core/src/main/java/org/dromara/warm/flow/ui/service/HandlerSelectService.java"
click node_workflow_api "https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/workflow/WorkflowService.java"
click node_workflow_impl "https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/workflow/WorkflowServiceImpl.java"
click node_pipeline "https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/service/impl/FlowPipeline.java"
click node_routing "https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/service/impl/FlowPathResolver.java"
click node_expressions "https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/strategy/ExpressionStrategy.java"
click node_listeners "https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/listener/Listener.java"
click node_definition "https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/service/impl/DefServiceImpl.java"
click node_task "https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/service/impl/TaskServiceImpl.java"
click node_instance "https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/service/impl/InsServiceImpl.java"
click node_chart "https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/service/impl/ChartServiceImpl.java"
click node_mybatis_plus "https://github.com/sgs98/warm-flow/blob/main/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowTaskDaoImpl.java"
click node_mybatis "https://github.com/sgs98/warm-flow/blob/main/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowTaskDaoImpl.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_web,node_controllers,node_demo_workflow,node_definition_app,node_user toneBlue
class node_designer_ui,node_designer_api,node_handler_select toneAmber
class node_workflow_api,node_workflow_impl,node_pipeline,node_routing,node_expressions,node_listeners toneMint
class node_definition,node_task,node_instance,node_chart toneRose
class node_mybatis_plus,node_mybatis,node_database toneIndigo
```

## Components

### Demo application

- [Demo web client](https://github.com/sgs98/warm-flow/blob/main/warm-flow-demo/warm-flow-demo-web/src/views/tasks/TodoList.vue): `warm-flow-demo/warm-flow-demo-web/src/views/tasks/TodoList.vue`
- [Demo controllers](https://github.com/sgs98/warm-flow/blob/main/warm-flow-demo/warm-flow-demo/src/main/java/org/dromara/warm/demo/controller/TaskController.java): `warm-flow-demo/warm-flow-demo/src/main/java/org/dromara/warm/demo/controller/TaskController.java`
- [Demo workflow service](https://github.com/sgs98/warm-flow/blob/main/warm-flow-demo/warm-flow-demo/src/main/java/org/dromara/warm/demo/service/impl/WorkflowServiceImpl.java): `warm-flow-demo/warm-flow-demo/src/main/java/org/dromara/warm/demo/service/impl/WorkflowServiceImpl.java`
- [Definition management](https://github.com/sgs98/warm-flow/blob/main/warm-flow-demo/warm-flow-demo/src/main/java/org/dromara/warm/demo/service/impl/DefinitionServiceImpl.java): `warm-flow-demo/warm-flow-demo/src/main/java/org/dromara/warm/demo/service/impl/DefinitionServiceImpl.java`

### Design and charts

- [Designer and chart UI](https://github.com/sgs98/warm-flow/blob/main/warm-flow-ui/src/App.vue): `warm-flow-ui/src/App.vue`
- [Designer service](https://github.com/sgs98/warm-flow/blob/main/warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-core/src/main/java/org/dromara/warm/flow/ui/service/WarmFlowService.java): `warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-core/src/main/java/org/dromara/warm/flow/ui/service/WarmFlowService.java`
- [Handler selection SPI](https://github.com/sgs98/warm-flow/blob/main/warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-core/src/main/java/org/dromara/warm/flow/ui/service/HandlerSelectService.java): `warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-core/src/main/java/org/dromara/warm/flow/ui/service/HandlerSelectService.java`

### Workflow engine

- [Workflow facade](https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/workflow/WorkflowService.java): `warm-flow-core/src/main/java/org/dromara/warm/flow/core/workflow/WorkflowService.java`
- [Workflow orchestration](https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/workflow/WorkflowServiceImpl.java): `warm-flow-core/src/main/java/org/dromara/warm/flow/core/workflow/WorkflowServiceImpl.java`
- [Operation pipeline](https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/service/impl/FlowPipeline.java): `warm-flow-core/src/main/java/org/dromara/warm/flow/core/service/impl/FlowPipeline.java`
- [Path and conditions](https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/service/impl/FlowPathResolver.java): `warm-flow-core/src/main/java/org/dromara/warm/flow/core/service/impl/FlowPathResolver.java`
- [Expression strategies](https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/strategy/ExpressionStrategy.java): `warm-flow-core/src/main/java/org/dromara/warm/flow/core/strategy/ExpressionStrategy.java`
- [Workflow listeners](https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/listener/Listener.java): `warm-flow-core/src/main/java/org/dromara/warm/flow/core/listener/Listener.java`

### Process and tasks

- [Definition service](https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/service/impl/DefServiceImpl.java): `warm-flow-core/src/main/java/org/dromara/warm/flow/core/service/impl/DefServiceImpl.java`
- [Task service](https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/service/impl/TaskServiceImpl.java): `warm-flow-core/src/main/java/org/dromara/warm/flow/core/service/impl/TaskServiceImpl.java`
- [Instance service](https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/service/impl/InsServiceImpl.java): `warm-flow-core/src/main/java/org/dromara/warm/flow/core/service/impl/InsServiceImpl.java`
- [Chart service](https://github.com/sgs98/warm-flow/blob/main/warm-flow-core/src/main/java/org/dromara/warm/flow/core/service/impl/ChartServiceImpl.java): `warm-flow-core/src/main/java/org/dromara/warm/flow/core/service/impl/ChartServiceImpl.java`

### Persistence adapters

- [MyBatis-Plus adapter](https://github.com/sgs98/warm-flow/blob/main/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowTaskDaoImpl.java): `warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowTaskDaoImpl.java`
- [MyBatis adapter](https://github.com/sgs98/warm-flow/blob/main/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowTaskDaoImpl.java): `warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowTaskDaoImpl.java`
- **Workflow database**

### Other components

- **Workflow user**

## Connections

- Workflow user → Demo web client: uses
- Demo web client → Demo controllers: calls API
- Demo controllers → Demo workflow service: delegates
- Demo workflow service → Workflow facade: issues commands
- Workflow facade → Workflow orchestration: dispatches
- Workflow orchestration → Operation pipeline: runs steps
- Workflow orchestration → Definition service: loads definitions
- Workflow orchestration → Task service: updates tasks
- Workflow orchestration → Instance service: updates instances
- Workflow orchestration → Path and conditions: resolves paths
- Path and conditions → Expression strategies: evaluates conditions
- Workflow orchestration → Workflow listeners: notifies
- Definition management → Definition service: manages definitions
- Designer and chart UI → Designer service: calls designer API
- Designer service → Definition service: loads and saves
- Designer service → Chart service: gets chart data
- Designer service → Handler selection SPI: queries handlers
- Chart service → Definition service: reads process data
- Definition service → MyBatis-Plus adapter: persists
- Task service → MyBatis-Plus adapter: persists
- Instance service → MyBatis-Plus adapter: persists
- MyBatis-Plus adapter → Workflow database: reads and writes
- MyBatis adapter → Workflow database: reads and writes
