npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

n8n-nodes-bpmn-validator

v0.5.3

Published

BPMN 2.0 XML validation for n8n: XSD, references, structure, semantics, DI, quality and custom rules. Offline, based on OMG BPMN 2.0.2 / ISO/IEC 19510.

Readme

n8n-nodes-bpmn-validator

Systematische Prüfung von BPMN-2.0-XML-Dateien in n8n — vollständig offline, ohne Java/Python/xmllint.

Version 0.4 · Alle Prüfschichten des Regelkatalogs V0.1 implementiert (XML, XSD, REF, STR, EVT, GWY, FLW, ACT, DAT, DI, QLT + Custom Rules + Auto-Fix) plus P3: Engine-Profile (Camunda 7/8, Flowable, Activiti) und CI/CD-CLI bpmn-validate

Technische Referenz: OMG BPMN 2.0.2 · Normreferenz: ISO/IEC 19510:2013 (entspricht inhaltlich BPMN 2.0.1).

Prüfschichten (Version 0.1)

| Schicht | Regeln | Status | |---|---|---| | XML-Syntax + Namespaces | BPMN-XML-001…008 | ✅ | | XSD (normative OMG-Schemas, im Paket enthalten) | BPMN-XSD-001…006 | ✅ vollständige libxml2-Validierung via WebAssembly (xmllint-wasm) | | Referenzintegrität | BPMN-REF-001…017 | ✅ | | Struktur/Graph (Erreichbarkeit, Sackgassen, Zyklen-Klassifikation) | BPMN-STR-001…012 | ✅ | | Events | BPMN-EVT-001…022 | ✅ (EVT-004/007 via FLW-010/011) | | Gateways inkl. Event-Based Gateway | BPMN-GWY-001…014 | ✅ | | Flows & Collaboration | BPMN-FLW-001…014 | ✅ (FLW-003→STR-005, FLW-006→GWY-013/ACT-009, FLW-014→REF-005) | | Custom Rules (JSON, deklarativ, kein eval) | CUSTOM-* | ✅ | | Activities/SubProcesses (Event-SubProcess, Compensation, Multi-Instance, Loops, Call Activity, Default Flows) | BPMN-ACT-001…012 | ✅ (ACT-002→EVT-020/022, ACT-004→XSD-003) | | Daten & Data Associations (Flussrichtung, DataObject-/DataStore-Referenzen, ungenutzte Objekte) | BPMN-DAT-001…007 | ✅ (DAT-004→REF-014) | | BPMN DI: Plane/Shape/Edge-Konsistenz, Bounds, Waypoints, Doppeldarstellung; Vollständigkeit nur im Strict-DI-Modus, semanticOnly meldet fehlende Darstellung nie | BPMN-DI-001…010 | ✅ (unaufgelöstes bpmnElement→REF-007) | | Modellierungsqualität (Namen, Pfad-/Tiefen-Schwellenwerte, Platzhalternamen, Parallel-Split ohne Join, lineare Ketten, Doku) — nur WARNING/INFO | BPMN-QLT-001…015 | ✅ (Profil strict oder Layer explizit aktiviert) | | Auto-Fix-Engine: SAFE-Fixes auf DOM-Kopie (z. B. negative DI-Bounds → Betrag), REVIEW nur als Vorschlag, Change Log, Re-Validierung des Ergebnisses, Original bleibt unangetastet | DI-007 SAFE + REVIEW-Vorschläge | ✅ | | Engine-Profile (optional): Camunda 8/Zeebe (zeebe:taskDefinition, Complex Gateway/Transaction/Conditional nicht unterstützt, ignorierte Datenobjekte/Lanes), Camunda 7 / Flowable / Activiti (Implementierungs-/Zuweisungs-Attribute) — greifen nur bei isExecutable="true" | ENGINE-* (source ENGINE_PROFILE, nie OMG/ISO) | ✅ + Statusflag engineCompliant | | CI/CD-CLI bpmn-validate (gleiche Engine wie der Node) | Exit-Codes 0/1/2 | ✅ |

Grundsatz: Übersprungene Prüfungen werden im Output als skipped mit Grund ausgewiesen — niemals als bestanden vorgetäuscht. Schlägt die WASM-Initialisierung fehl, meldet xsd.mode = "unavailable" das ehrlich (keine Pseudo-XSD-Prüfung).

Delegierte Regeln (bewusst nicht doppelt gemeldet): EVT-004/007→FLW-010/011 · FLW-003→STR-005 · FLW-006→GWY-013/ACT-009 · FLW-014→REF-005 · ACT-002→EVT-020/022 · ACT-004→XSD-003 · DAT-004→REF-014 · DI-003/004 bei unaufgelöster Referenz→REF-007. Noch nicht als eigenständige Prüfung umgesetzt: GWY-005-Teilfälle jenseits Message/ReceiveTask-Mix sowie exotische Choreography-/Conversation-Semantik (V1.0-Abgrenzung laut Katalog §26).

Installation

cd C:\n8n\n8n-inst\.n8n\nodes
npm install n8n-nodes-bpmn-validator   # bzw. Pfad zum Paketordner
# n8n neu starten!

Voraussetzungen: Node.js ≥ 20.19, selbstgehostetes n8n. Keine Internetverbindung zur Laufzeit nötig.

Node-Konfiguration

  • Input Source: Binary-Property, JSON-Feld oder direktes XML-Textfeld
  • Validation Profile: standard | strict | custom (Schichten einzeln wählbar)
  • Custom Rules (JSON): Array eigener Regeln, z. B.
[{
  "id": "CUSTOM-001",
  "name": "Tasks benötigen Namen",
  "severity": "ERROR",
  "scope": ["task", "userTask", "serviceTask"],
  "condition": { "field": "name", "operator": "notEmpty" },
  "message": "Jede Aktivität muss eine Bezeichnung besitzen."
}]

Operatoren: exists, notExists, empty, notEmpty, equals, notEquals, contains, notContains, matches, notMatches, in, notIn, greaterThan, lessThan, minLength, maxLength, hasIncoming, hasOutgoing, incomingCount, outgoingCount, forbidden sowie when + require (elementType, mustBePrecededBy, mustBeFollowedBy — z. B. Vier-Augen-Prinzip).

  • Options: failOnInvalid (Workflow-Gate), severityOverrides ({"BPMN-EVT-002":"WARNING","BPMN-STR-008":"off"}), HTML-Report als Feld und/oder Binary, Größenlimit.

Output (pro Item)

{
  "valid": false,
  "xmlValid": true, "schemaValid": true, "standardCompliant": false,
  "structurallySound": true, "qualityPassed": true, "customRulesPassed": true,
  "score": 78, "grade": "C",
  "xsd": { "mode": "full", "schemaVersion": "BPMN 2.0.2", "schemas": ["BPMN20.xsd", "…"] },
  "statistics": { "fatal": 0, "errors": 1, "warnings": 1, "info": 0, "byLayer": { } },
  "validation": { "xml": { "status": "ok" }, "semantics": { "status": "findings", "findingCount": 1 } },
  "findings": [ { "ruleId": "BPMN-EVT-001", "severity": "ERROR", "source": "OMG_BPMN_2_0_2",
                  "elementId": "Start_1", "message": "…", "line": 5, "fixType": "NONE" } ],
  "changes": [],
  "file": { "name": "prozess.bpmn", "bytes": 4821, "sha256": "…" },
  "htmlReport": "<!DOCTYPE html>…"
}

Ein einzelner normativer ERROR setzt standardCompliant=false — unabhängig vom Score.

CLI für CI/CD

npx bpmn-validate prozess.bpmn                          # Text-Ausgabe, Exit 1 bei ERROR/FATAL
npx bpmn-validate *.bpmn --profile strict --engine camunda8
npx bpmn-validate prozess.bpmn --json                   # vollständiges JSON-Ergebnis
npx bpmn-validate prozess.bpmn --report-dir reports --fix safe --corrected-dir fixed
npx bpmn-validate prozess.bpmn --fail-on warning        # streng: auch Warnungen brechen den Build

Exit-Codes: 0 bestanden · 1 Schwellenwert verletzt (--fail-on fatal|error|warning|never, Default error) · 2 Bedienungs-/IO-Fehler.

Entwicklung

npm install && npm run build && npm test   # 17 Tests, Fixtures unter test/fixtures/

Fachliche Spezifikation: REGELKATALOG-V0.1.md (136 Regeln) · Architektur: ARCHITEKTUR.md · Projektplan: PROJEKTPLAN.md.

Lizenz

Proprietäre Lizenz (siehe LICENSE): Installation und Betrieb in eigenen n8n-Instanzen erlaubt; die Kennzeichnung „Powered by Thomas Braun" in Berichten und die Copyright-Hinweise dürfen nicht entfernt oder verändert werden (wesentliche Bedingung). Die mitgelieferten OMG-XSD-Schemas unterliegen den Bedingungen der OMG.

Powered by Thomas Braun · © Thomas Braun