casen migrate c7 converts Camunda 7 models to Camunda 8. It rewrites what it can rewrite
mechanically and reports every Camunda 7 construct it finds, one line per element. The
migration guide explains what is converted and why.
casen migrate c7 order.bpmn
order.bpmn → order.c8.bpmn
19 convertible · 8 manual · 2 unsupported
UNSUPPORTED
order-fulfillment camunda:historyTimeToLive
Camunda 8 has no per-process history time to live (was "180").
→ Configure data retention for the cluster (Operate, Tasklist and Optimize archiving).
…
MANUAL
Task_ship camunda:class
Java delegate class "com.acme.orders.ShipOrderDelegate" runs inside the Camunda 7 engine; …
→ Implement a job worker for type "shipOrderDelegate" …
…
CONVERTIBLE
Task_charge camunda:type=external
External task topic "charge-payment" became job type "charge-payment".
…
The groups come in order of work: unsupported (Camunda 8 has no equivalent), manual
(Camunda 8 has one, but a person must write or check it), convertible (done).
A model Camunda 8 would refuse
The converted model must deploy. When Zeebe would reject it, nothing is written, the report is still printed, and the reasons come first:
order.bpmn
✖ Not deployable on Camunda 8.10: 2 error(s)
- Message_PaymentConfirmed: Must have exactly one zeebe:subscription extension element (zeebe/message-subscription)
- Task_summary: Must have either one 'zeebe:script' or one 'zeebe:taskDefinition' extension element (zeebe/script-task-implementation)
Nothing written. Pass --placeholders to fill placeholder values (reported as manual
work to replace), or --no-validate to write the model as it is.
19 convertible · 8 manual · 2 unsupported
…
The command exits 1 with 1 of 1 file would not deploy on Camunda 8 — pass --placeholders or --no-validate. With --placeholders, each value the conversion could not derive (a job type,
a correlation key) gets a placeholder such as placeholder-Task_summary, listed under MANUAL
as placeholder jobType; replace it before going live. In JSON, a refused file has
"refused": true, the error, and the counts and findings of the report.
Where the output goes
- By default, each
name.bpmnis written toname.c8.bpmnbeside it. The Camunda 7 file is never changed. - With
--out <dir>, files are written to that directory under their own names. The directory is created if it does not exist. - An existing output file is never overwritten unless you pass
--force. The command reports the file and exits 1.
The output keeps the source file’s formatting and element order, so a text diff against the Camunda 7 file shows only what the migration changed.
Flags
| Flag | Default | What it does |
|---|---|---|
--out <dir> | beside the input | Write converted files to this directory |
--check | off | Report only. Write nothing, and exit 1 if any manual or unsupported finding remains |
--format | text | text or json |
--force | off | Overwrite converted files that already exist |
--placeholders | off | Fill placeholder values the conversion cannot derive, instead of refusing the model |
--no-validate | validate | Write the converted model even when Camunda 8 would not deploy it |
Put the flags after the file names: casen migrate c7 models/*.bpmn --check.
As a pipeline gate
casen migrate c7 models/*.bpmn --check --format json
The JSON is an array with one entry per file: file, output (null with --check),
counts, and findings. Each finding has elementId, elementType, processId,
construct, severity, message, suggestion, and applied. applied tells you if the
converter wrote a Camunda 8 equivalent. A file that already targets Camunda 8, or that cannot
be read, is reported with an error and makes the command exit 1.