Home › Docs › Migration › Camunda 7

Migrate from Camunda 7 to Priostack

Last updated: 2026-04-06 · 12 min read

Priostack runs BPMN 2.0 and DMN 1.3 models. Most Camunda 7 process models deploy as they are, because camunda: attributes are ignored; what changes is who does the work (a worker you run, over HTTPS and JSON) and how you deploy. Compatibility is at the model level and in the shape of the REST calls, not on the wire: there is no /engine-rest API, no gRPC and no Zeebe client support.

Concept Mapping

Before migrating, understand how Camunda 7 concepts map to Priostack equivalents.

Camunda 7PriostackNotes
Process Engine (embedded/server)Priostack Engine (hosted)No local JVM required
External Task PatternJob Worker (polling)Same poll-activate-complete cycle
Java Delegate / ExpressionService Task + workerMove logic to a worker process
Cockpit (monitoring)Dashboard / ConsoleWeb UI + REST API
Tasklist (user tasks)/tasklistSame task claim/complete model
REST API /engine-rest/api/v1Different paths - see mapping below
DMN Engine (decision tables)Built-in DMN 1.3 evaluationPOST /api/v1/decisions/{decisionId}/evaluate
Form Fields (embedded forms)Variable map in task completePass variables in POST /api/v1/tasks/{id}/complete
Tenants (multi-tenancy)Per-account isolationEach API key = one tenant namespace

REST API Endpoint Mapping

Camunda 7 endpointPriostack equivalent
POST /engine-rest/deployment/createPOST /api/v1/process-definitions (BPMN, free) or POST /api/v1/models (BPMN, DMN, CMMN, ArchiMate; 1 credit)
POST /engine-rest/process-definition/{id}/startPOST /api/v1/process-instances
GET /engine-rest/process-instanceGET /api/v1/process-instances
GET /engine-rest/external-taskPOST /api/v1/jobs/activate (poll model)
POST /engine-rest/external-task/{id}/completePOST /api/v1/jobs/{key}/complete
POST /engine-rest/external-task/{id}/failurePOST /api/v1/jobs/{key}/fail
GET /engine-rest/taskGET /api/v1/tasks
POST /engine-rest/task/{id}/completePOST /api/v1/tasks/{id}/complete (1 credit)
POST /engine-rest/messageNo hosted equivalent. A message wait is offered to workers as a job (message:<name> for a receive task, event:message:<elementId> for a catch event), with no correlation-key matching
POST /engine-rest/decision-definition/{id}/evaluatePOST /api/v1/decisions/{decisionId}/evaluate

Migration Steps

Step 1 - Export your process definitions

From Camunda 7 Cockpit or the filesystem, collect all .bpmn and .dmn files. Priostack accepts the same XML format.

Step 2 - Remove Java-specific extensions

Camunda 7 uses Java Delegates and expression language that Priostack does not support. Strip or replace these elements:

Remove camunda:class, camunda:expression, camunda:delegateExpression from Service Tasks. Replace with zeebe:taskDefinition type="your-worker-type".

Before (Camunda 7):

<serviceTask id="credit-check" name="Credit Check"
  camunda:class="com.example.CreditCheckDelegate" />

After (Priostack, with zeebe:taskDefinition): a fragment, to paste inside a <definitions> element that declares xmlns:zeebe="http://camunda.org/schema/zeebe/1.0".

<serviceTask id="credit-check" name="Credit Check">
  <extensionElements>
    <zeebe:taskDefinition type="credit-check" />
  </extensionElements>
</serviceTask>

Step 3 - Deploy to Priostack

curl -X POST "https://priostack.com/api/v1/process-definitions?resourceName=loan-approval.bpmn" \
  -H "X-API-Key: ps_your_key" \
  -H "Content-Type: application/xml" \
  --data-binary @loan-approval.bpmn

This route deploys BPMN only and is free. It answers 200 with a deployments array; a model that does not parse answers 422.

Step 4 - Port your External Task workers

Camunda 7 External Task workers poll /engine-rest/external-task/fetchAndLock. In Priostack, poll POST /api/v1/jobs/activate:

Camunda 7 worker (conceptual):

// fetchAndLock
POST /engine-rest/external-task/fetchAndLock
{"workerId":"w1","maxTasks":10,"topics":[{"topicName":"credit-check","lockDuration":30000}]}

Priostack worker:

// activate (answers 200 at once, {"jobs":[]} when nothing waits)
POST /api/v1/jobs/activate
{"type":"credit-check","worker":"w1","maxJobsToActivate":10}

// complete a job (answers 204 No Content)
POST /api/v1/jobs/{jobKey}/complete
{"variables":{"score":720,"approved":true}}

There is no lock duration to port. lockDuration has no equivalent: an activated job stays with the worker until it completes it or fails it, and timeout is accepted and ignored. Job keys are strings. Always send type, and sleep 1 to 5 seconds after an empty poll.

Step 5 - Migrate DMN decision tables

Camunda 7 DMN tables deploy through POST /api/v1/models, which detects the model kind and costs 1 credit (refunded if the deploy fails). Input entries must be unary tests such as "gold", > 500 or [100..500]; see DMN Elements. A table the engine cannot read answers 422.

curl -X POST "https://priostack.com/api/v1/models?resourceName=credit-score.dmn" \
  -H "X-API-Key: ps_your_key" \
  -H "Content-Type: application/xml" \
  --data-binary @credit-score.dmn

Evaluate standalone. The body is a flat JSON object of inputs, and the call costs 1 credit:

curl -X POST https://priostack.com/api/v1/decisions/creditScore/evaluate \
  -H "X-API-Key: ps_your_key" \
  -H "Content-Type: application/json" \
  -d '{"score":720,"employment":"full-time"}'

It answers {"result":{...}} with the outputs of the matched rule, as strings.

Step 6 - Update User Task handling

Camunda 7 task query and claim API maps directly:

# List open tasks (filters: status=open|claimed, definition_key=)
GET /api/v1/tasks?status=open

# Complete a task (equivalent to setVariables + complete; 1 credit on this route)
POST /api/v1/tasks/{taskId}/complete
{"variables":{"approved":true,"comment":"Looks good"}}

Step 7 - Remove Spring / CDI dependencies

If your workers were embedded in a Spring Boot app using camunda-bpm-spring-boot-starter, extract the business logic into standalone worker processes. Your workers can be any language - Priostack workers speak plain HTTP.

Unsupported Features

Camunda 7 featureStatus in Priostack
Embedded subprocess history (full audit trail)Instance state + events - no fine-grained history DB
BPMN compensation eventsSupported: a compensation boundary event with an associated handler (isForCompensation="true"), run when the model throws compensation explicitly
Script tasks (Groovy, JavaScript)Not run inline: a script task becomes a worker job of type script:<name or id>, so move the script into a worker
Case execution (CMMN 1.0 embedded in Camunda 7)CMMN 1.1 supported as a separate deployment through POST /api/v1/models
Message correlation (/engine-rest/message)Not available on the hosted API
Batch operations APINot yet supported
Need help migrating a specific model? Contact support@priostack.com with your BPMN file and the current Camunda 7 behavior you need to preserve.

← Troubleshooting · Activiti Migration Guide →