Camunda 8 in an hour: running your first process
A practical guide: installing Camunda 8 locally, modeling a simple process, and starting an instance via the REST API.
In this article we set up Camunda 8 on a local machine step by step and run our first BPMN process. The goal is to get a working environment in an hour where you can experiment with models.
What you will need
- Docker and Docker Compose (current versions)
- Camunda Modeler (a desktop app, downloadable from camunda.com)
- A browser to access the web consoles
- A basic understanding of REST APIs
Installing via Docker Compose
Camunda provides an official docker-compose file for local development. Create a camunda-local folder and download the official compose there:
mkdir camunda-local && cd camunda-local
curl -L -O https://github.com/camunda/camunda-platform/raw/main/docker-compose.yaml
docker compose up -d
The platform will spin up several containers:
- Zeebe — the process engine (gRPC port 26500)
- Operate — the monitoring UI (http://localhost:8081)
- Tasklist — the UI for user tasks (http://localhost:8082)
- Optimize — analytics (http://localhost:8083)
- Elasticsearch — storage for Operate, Tasklist, Optimize
After startup (1–2 minutes) check Operate in the browser. The default login/password is demo/demo.
The first model
Open Camunda Modeler and create a new BPMN diagram. Draw a simple process:
- Start Event → Service Task “Calculate amount” → User Task “Approve” → XOR gateway → End event “Approved” / “Rejected”
For the service task set the type to “Service Task” and in the properties specify Task Type: calculate-amount. This is the “address” of the handler that must be registered on the platform.
For the user task set the type to “User Task” and Assignee: demo.
Save the model as loan-process.bpmn.
Deploying the model
In Modeler click Deploy current diagram. Specify the Zeebe endpoint: localhost:26500. The model loads onto the platform.
After deployment you will see the new process in Operate under Processes.
Starting an instance
You can start the process through Operate (the Start Process Instance button) or via the REST API:
curl -X POST http://localhost:8080/v2/process-instances \
-H 'Content-Type: application/json' \
-d '{
"processDefinitionId": "loan-process",
"variables": {
"applicantId": "12345",
"amount": 50000
}
}'
Open Operate — you will see the running instance, stopped at the service task (waiting for a handler).
Registering a worker
Service tasks in Zeebe are carried out by “workers” — external processes that connect to the platform and take on the work. A simple worker in Node.js:
const { ZBClient } = require('zeebe-node');
const zbc = new ZBClient('localhost:26500');
zbc.createWorker({
taskType: 'calculate-amount',
taskHandler: (job) => {
const { amount } = job.variables;
const fee = amount * 0.02;
return job.complete({ fee, totalAmount: amount + fee });
}
});
Start the worker. In Operate you will see the service task complete and the process move to the user task.
Completing the user task
Open Tasklist in the browser. Log in as demo/demo. You will see the “Approve” task. Open it, fill in the form (if one was configured) and click Complete.
The process passes through the XOR gateway and finishes. In Operate you can see the full execution history.
Next steps
The basic environment is ready. Further steps to go deeper:
- Learn FEEL for conditional expressions in gateways
- Master incident management for error handling
- Connect external systems via REST/messaging
- Configure multi-instance and timers
- Learn DMN for business rules
All of this is covered in the official Camunda documentation. The local environment from this article is an excellent playground for experiments.