Skip to content

Linting ​

Check your diagram with bpmnlint while you edit, with the same rules your CI runs.

Findings appear as overlays on the affected elements, as error and warning counts on the canvas, and in the VS Code Problems panel. Fix an issue and its overlay clears right away, no save needed. Hover an overlay to read its findings, or click it (or focus it and press Enter) to pin the list; Esc closes it.

Default rules ​

Without a .bpmnlintrc the modeler lints against a bundled default, offline and without installing anything:

  • bpmnlint:recommended for every diagram (missing start or end event, disconnected elements, implicit splits and joins, …).
  • For Camunda 7 and Camunda 8 diagrams, the bpmnlint-plugin-camunda-compat rules for the target engine, so constructs it cannot run are flagged while you model.

Any .bpmnlintrc replaces the default completely, even an empty {}.

Use your own config ​

Add a .bpmnlintrc at the workspace root or in the config folder (.camunda/ by default):

json
{
    "extends": "bpmnlint:recommended",
    "rules": {
        "label-required": "off",
        "no-overlapping-elements": "warn"
    }
}

The modeler walks from the diagram's folder up to the workspace root and uses the first <dir>/.bpmnlintrc or <dir>/<configFolder>/.bpmnlintrc it finds. Configs are not merged, so modeler and CI read the same file. Built-in presets are bpmnlint:recommended, bpmnlint:all and bpmnlint:correctness; see the rule reference.

Custom rules and plugins ​

Any bpmnlint-plugin-* package that resolves from the folder of the .bpmnlintrc works, from npm or local via file::

json
{
    "devDependencies": {
        "bpmnlint-plugin-custom-rules": "file:./bpmnlint-custom-rules"
    }
}

Run npm install, then reference the plugin by its short name:

json
{
    "extends": ["bpmnlint:recommended", "plugin:custom-rules/recommended"],
    "rules": { "custom-rules/no-todo-in-name": "error" }
}

Rules run in the extension host, which needs Workspace Trust. Check parity with npx bpmnlint <diagram>.bpmn. A runnable example lives in resources/example-process/.

If a referenced rule or plugin is not installed, only that entry is skipped. The status bar then shows BPMNlint: N rules skipped and the bpmn.modeler output channel names them.

Status bar ​

Status barMeaning
BPMNlintYour .bpmnlintrc is in use (hover for its path).
BPMNlint (default)No .bpmnlintrc found, the bundled default is in use.
BPMNlint: N rules skippedSome rules or plugins could not be resolved.
BPMNlint: offLinting is turned off.

Turn linting off ​

SettingDefaultDescription
miragon.bpmnModeler.linting.enabledtrueTurn off if you only design and do not want execution rules.

Miragon BPMN Modeler: Toggle Linting, the BPMNlint: off status bar item and the lint button on the canvas switch it too. Linting covers BPMN only, not DMN.

Next steps ​