Migrate from Flowable to Priostack
Last updated: 2026-04-06 · 11 min read
Concept Mapping
| Flowable | Priostack | Compatibility |
|---|---|---|
| Flowable Engine (BPMN) | Priostack BPMN Engine | Native |
| Flowable DMN Engine | Built-in DMN 1.3 | Native |
| Flowable CMMN Engine | Built-in CMMN 1.1 | Native |
| JavaDelegate (Service Task) | Job Worker (REST polling) | Rewrite required |
| flowable:serviceTask (HTTP task) | Job Worker calling external HTTP | Rewrite required |
| FlowableMail (mail task) | Worker that calls your mailer | Rewrite required |
Flowable REST API (/process-api) | Priostack REST API (/api/v1) | Path changes |
| Flowable IDM (users/groups) | Priostack accounts + admin console | Different model |
| Flowable Modeler | Camunda Modeler (Zeebe profile) | Use Camunda Modeler |
BPMN: Extension Namespace Changes
Flowable uses the flowable: namespace. Replace with zeebe: task definitions:
Before (Flowable):
<serviceTask id="validate-order" name="Validate Order"
flowable:class="com.example.ValidateOrderDelegate">
<extensionElements>
<flowable:field name="threshold" stringValue="500" />
</extensionElements>
</serviceTask>
After (Priostack):
<serviceTask id="validate-order" name="Validate Order">
<extensionElements>
<zeebe:taskDefinition type="validate-order" />
<zeebe:ioMapping>
<zeebe:input source="500" target="threshold" />
</zeebe:ioMapping>
</extensionElements>
</serviceTask>
flowable:class, flowable:expression, flowable:async, flowable:exclusive attributes. These are not parsed by Priostack and some will cause deployment errors.
DMN: Direct Compatibility
Flowable DMN 1.3 tables deploy to Priostack unchanged — same XML format. Deploy and evaluate:
# Deploy DMN
curl -X POST https://priostack.com/api/v1/deployments \
-H "X-API-Key: ps_your_key" \
-H "Content-Type: application/xml" \
--data-binary @risk-score.dmn
# Evaluate
curl -X POST https://priostack.com/api/v1/decisions/evaluate \
-H "X-API-Key: ps_your_key" \
-d '{"decision_id":"riskScore","variables":{"age":35,"income":60000}}'
CMMN: Direct Compatibility
Flowable CMMN 1.1 case models also deploy without changes. Priostack supports:
- Human tasks, process tasks, decision tasks
- Sentries (
onPart+ifPartwith FEEL conditions) - Entry/exit criteria on stages
- Milestone elements
# Deploy CMMN
curl -X POST https://priostack.com/api/v1/deployments \
-H "X-API-Key: ps_your_key" \
-H "Content-Type: application/xml" \
--data-binary @investigation.cmmn
# Start a case instance
curl -X POST https://priostack.com/api/v1/case-instances \
-H "X-API-Key: ps_your_key" \
-d '{"case_id":"investigation","variables":{"subject":"ABC Corp"}}'
REST API Endpoint Mapping
| Flowable REST | Priostack equivalent |
|---|---|
POST /process-api/repository/deployments | POST /api/v1/deployments |
POST /process-api/runtime/process-instances | POST /api/v1/process-instances |
GET /process-api/runtime/process-instances | GET /api/v1/process-instances |
GET /process-api/runtime/tasks | GET /api/v1/tasks |
POST /process-api/runtime/tasks/{id} (action: complete) | POST /api/v1/tasks/{key}/complete |
POST /dmn-api/dmn-rule/execute | POST /api/v1/decisions/evaluate |
POST /cmmn-api/cmmn-runtime/case-instances | POST /api/v1/case-instances |
POST /process-api/runtime/signals | POST /api/v1/messages (message events) |
Migration Steps
Step 1 — Export definitions
From Flowable Modeler or repository, export all .bpmn, .dmn, and .cmmn files.
Step 2 — Strip Flowable extensions from BPMN
# Patterns to find and replace in .bpmn files: flowable:class="..." → remove flowable:expression="..." → remove flowable:async="true" → remove flowable:exclusive="..." → remove flowable:formKey="..." → remove flowable:candidateGroups="..." → remove
For each replaced service task, add a zeebe:taskDefinition type="your-type".
Step 3 — Deploy all definitions
for f in *.bpmn *.dmn *.cmmn; do
curl -X POST https://priostack.com/api/v1/deployments \
-H "X-API-Key: ps_your_key" \
-H "Content-Type: application/xml" \
--data-binary @"$f"
echo "Deployed $f"
done
Step 4 — Port JavaDelegates to REST workers
Each JavaDelegate class becomes a polling worker. See the Activiti migration guide for a Node.js worker example — the same pattern applies.
Step 5 — Remove Flowable Spring configuration
Remove flowable-spring-boot-starter from your dependencies. Workers only need an HTTP client to communicate with Priostack.
Step 6 — Test with representative instances
Start one instance of each process type and validate the happy path before migrating production traffic.
Flowable-specific Features: Status
| Flowable feature | Status in Priostack |
|---|---|
| Async service tasks (flowable:async) | All service tasks are async by default |
| Mail task (flowable:mail) | Implement as a worker that calls your SMTP/SES |
| HTTP task (flowable:http) | Implement as a worker that calls the target URL |
| Script task (flowable:script) | Not supported — use a worker |
| Shell task | Not supported — use a worker |
| Camel task | Not supported — use a worker that delegates to Camel |
| Event registry | Use message events (POST /api/v1/messages) |
| Content API (attachments) | Not supported — store in your own object store |