Skip to content

13. Extensions and plugins

Contents of DISL 0.1

13.1 Plugin declarations

Plugins provide what the declarative core does not: exotic shapes, special routers and layouts, domain-specific widgets, imports/exports, snapping to external data, custom actions. A specification declares every plugin it uses:

{
  "plugins": {
    "acme.bpmnRouter": {
      "version": "^2.0.0",
      "provides": ["routing", "layout"],
      "required": false,
      "fallback": { "routing": "orthogonal", "layout": "layered" },
      "args": { "gridAware": { "type": "bool", "default": true } },
      "doc": "Specialised BPMN router that keeps sequence flows off pool boundaries.",
      "source": { "npm": "@acme/disl-bpmn-router", "integrity": "sha256-…" }
    }
  }
}
Property Type Description
version SemVer range Accepted plugin versions.
provides string[] Extension points: shape, marker, lineEffect, routing, layout, snap, widget, action, celFunctions, import, export, persistenceFormat, collaboration.
required bool If true, runtimes without the plugin MUST refuse to open diagrams of the type for editing (read-only viewing MAY still be offered). If false, fallback is used.
fallback map extension point → built-in name Declarative fallbacks.
args map → Attribute Declared arguments with types, so uses of the plugin are validated.
source object Hints where implementations can be obtained (npm, maven, url, …) with integrity hashes. Runtimes MUST NOT download and execute code automatically without user or administrator approval.
celFunctions {name, params, returns, cost, doc}[] Declarations of CEL functions the plugin adds, so validators can type-check expressions that use them.
doc Doc

Every plugin use ({ "plugin": "acme.bpmnRouter", "args": {…} }) references a declared plugin; args are validated against the declaration.

13.2 Extension properties and profiles

x- properties (2.8) carry tool-specific data. A group of related extension properties MAY be documented as a profile — a JSON Schema published by a vendor or community that constrains x-<prefix>-* properties. Specifications list profiles they use in language.profiles: ["https://…/simulation-profile.json"]; validators that know a profile validate accordingly.

Referenced from