Skip to main content
Version: 8.9 (unreleased)

Configure secondary storage

Configure secondary storage to enable features such as Operate, Tasklist, Identity, and search-based REST APIs in Camunda Self-Managed environments.

Configuration options

You can configure secondary storage using Helm charts, Docker Compose, or manual configuration files.

Camunda uses the data.secondary-storage configuration to define which database backend supports advanced web applications and APIs.

note

For the latest list of supported relational databases and versions, see the
RDBMS version support policy.

When deploying with Helm, set the secondary storage type and connection details in your values.yaml file:

data:
secondary-storage:
type: rdbms
rdbms:
url: jdbc:h2:mem:camunda
username: sa
password:

To configure Elasticsearch instead:

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

To explicitly disable secondary storage (for example, when running only the Zeebe engine), set:

global:
noSecondaryStorage: true

When this flag is set, all secondary-storage-dependent components are automatically disabled.

Choosing a storage backend

ScenarioRecommended backendReason
Local testing or Camunda 8 Run quickstartH2Fast, lightweight, and runs entirely in memory or file-based.
Production workloadsElasticsearch or a supported RDBMSScalable and persistent; designed for concurrent queries.
Debugging and troubleshootingH2 or PostgreSQLEasier to inspect and visualize data.
note

H2 is suitable for testing and local development only.
For production use, Operate and Tasklist require a persistent secondary storage backend such as a supported RDBMS or Elasticsearch.
Consult the RDBMS version support policy when choosing a relational database.

Run without secondary storage

If you want to run the Zeebe engine without secondary storage or web applications, you can use no secondary storage mode.

In this mode:

  • Operate, Tasklist, Identity, Optimize, and the REST API are disabled.
  • The Zeebe engine and primary storage remain active for process execution.
  • This configuration is best suited for local development or minimal-resource environments.

See run without secondary storage for configuration examples and limitations.