---
url: /bpmnlint-rules/guide/engines.md
---
# Camunda 7 / 8 engines

A model can pass every structural check and still fail at deploy, because the engine needs
properties plain BPMN does not know. The Camunda 7 and Camunda 8 deployability rules are bundled, so
there is nothing extra to install.

## What it looks like

The first run lints a Camunda 8 service task without a task definition. The second run lints the
same model after adding `zeebe:taskDefinition`. Both outputs come from the bundled rules at build
time.

## Switch it on

Deploying to a Camunda engine? Add its deployability layer (bundled — no separate install) to your
`extends`. These rules read engine-specific properties, so bpmnlint must also parse them with the
matching moddle extension — pick the config for your engine below.

**The `moddleExtensions` line is not optional.** Without it the parser doesn't recognize the engine
namespace, so those properties are invisible to the rules — they then report false findings (for
example a service task flagged as missing its task definition even though it has one). A modeler loads
the moddle already; it's the bare `npx bpmnlint` CLI that needs this line. Prefer to skip the wiring?
The programmatic `getDefaultLintConfig({ engine })` below sets up both the layer and its moddle
extension for you.

### Camunda 7

```jsonc
// .bpmnlintrc
{
  "extends": [
    "bpmnlint:recommended",
    "plugin:@miragon/rules/recommended-for-automation",
    "plugin:camunda-compat/camunda-platform-7-24",
  ],
  "moddleExtensions": {
    "camunda": "camunda-bpmn-moddle/resources/camunda.json",
  },
}
```

### Camunda 8 (Zeebe)

```jsonc
// .bpmnlintrc
{
  "extends": [
    "bpmnlint:recommended",
    "plugin:@miragon/rules/recommended-for-automation",
    "plugin:camunda-compat/camunda-cloud-8-10",
  ],
  "moddleExtensions": {
    "zeebe": "zeebe-bpmn-moddle/resources/zeebe.json",
  },
}
```
