For the complete documentation index, see llms.txt.
Skip to main content
Version: 8.10 (unreleased)

Configure secondary storage in Camunda 8 Run

Camunda 8 Run supports multiple secondary storage options. H2 is the default secondary storage for lightweight Camunda 8 Run setups and quickstarts. If you need full-text indexing, search, or advanced analytics, use an external Elasticsearch instance.

Configure or switch secondary storage (H2 or Elasticsearch)​

Choose the backend that fits your local development and testing needs.

Default: H2 (Camunda 8 Run)​

The default Camunda 8 Run configuration uses an H2 database for secondary storage. This is convenient for local development and demos and stores data on disk.

File-based H2 example:

data:
secondary-storage:
type: rdbms
rdbms:
url: jdbc:h2:file:./camunda-data/h2db
username: sa
password:
Full example configuration
camunda:
data:
secondary-storage:
type: rdbms
rdbms:
url: jdbc:h2:file:./camunda-data/h2db
username: sa
password:
flushInterval: PT0.5S
queueSize: 1000
security:
initialization:
users:
- username: demo
password: demo
name: Demo
email: demo@example.com
authentication:
method: BASIC
unprotected-api: true
authorizations:
enabled: false

zeebe:
broker:
network:
host: localhost
advertisedHost: localhost
gateway:
cluster:
initialContactPoints: zeebe:26502
memberId: identity

spring:
profiles:
active: "broker,consolidated-auth,identity,tasklist"

External relational database options​

Use an external relational database for secondary storage: PostgreSQL, MariaDB, MySQL, Oracle, or Microsoft SQL Server.

  1. Set camunda.data.secondary-storage with the JDBC URL and credentials.
  2. Ensure the database is reachable before starting Camunda 8 Run.
  3. If you already run a database, reuse the same configuration and update the URL, host or port, and credentials.
  4. If a separate JDBC driver is required, add it with --extra-driver or drop the JAR into camunda-zeebe-<version>/lib.

Secondary storage config

camunda:
data:
secondary-storage:
type: rdbms
rdbms:
url: jdbc:postgresql://localhost:5432/camunda_secondary
username: camunda
password: camunda

Start database (Docker)

docker run -d --name camunda-postgres \
-e POSTGRES_USER=camunda \
-e POSTGRES_PASSWORD=camunda \
-e POSTGRES_DB=camunda_secondary \
-p 5432:5432 postgres:latest

Optional: Elasticsearch​

If you need indexing, search, or full Operate or Tasklist functionality, use an external Elasticsearch instance.

To use Elasticsearch:

camunda:
data:
secondary-storage:
type: elasticsearch
elasticsearch:
url: http://localhost:9200/

Start Camunda 8 Run with --config <file> and point the configuration to your external cluster.

Switching between storage types and migration notes​

  • Switching the secondary storage type, for example H2 to Elasticsearch, does not preserve existing secondary-store data. The system starts with a fresh secondary store.
  • To switch storage, update data.secondary-storage in application.yaml and restart Camunda 8 Run.

Choose H2 for quick local development and other supported RDBMS or Elasticsearch for production-like scenarios.

Primary vs. secondary storage​

Camunda 8 uses two layers of storage:

  • Primary storage is handled by the Zeebe Broker to store workflow execution data.
  • Secondary storage is used by applications like Operate, Tasklist, and Admin to read and present that data.

For more details on how these layers interact, see secondary storage architecture.

Camunda 8 Run uses v2 APIs by default, so you don't need to reconfigure the APIs when switching between secondary storage backends.

Known limitations​

  • H2 is intended for testing and local development only.
  • H2 data persists to the configured file path by default. Keep the path stable to avoid accidental data loss.
  • Performance and memory use may vary depending on the local environment.

Next steps​