Gemessen, nicht behauptet
Validierungs-Engines im Vergleich
24 Validierungs-Engines prüfen dieselben 722 E-Rechnungen aus dem Beleggo-Datenkit — XRechnung, ZUGFeRD / Factur-X, Peppol BIS 3 und nationale CIUS, gültige wie fehlerhafte — auf derselben Maschine, ein Dokument nach dem anderen. Der offizielle KoSIT-Validator läuft als Referenz mit. Mustangproject und phive, die verbreitetsten Open-Source-Validatoren, stehen danach im Detail neben Beleggo.
Gemessen am 30. September 2026 auf linux x64, Intel(R) Xeon(R) Processor @ 2.10GHz × 4, 16 GiB, Node v22.22.2
| Engine | Laufzeit | Lizenz | Profile | Richtig | Fehlalarme | Übersehen | Regel benannt | Median | Speicher |
|---|---|---|---|---|---|---|---|---|---|
| Beleggoartefacts 2026-08-31 | JavaScript | proprietary | alle | 100 %722 Dokumente | 0 | 0 | 338 | 5 ms | 329 MB |
| dealerweb/einvoice1.1.0 | PHP 8 | MIT | 7 / 11 | 98,7 %697 Dokumente | 1 | 8 | 289 | 46 ms | 149 MB |
| EU ITB eInvoicing validator1.14.0-SNAPSHOT (2026-09-25) · CEN 1.3.16 | Java 17+ | EUPL-1.2 | 1 / 11 | 98 %449 Dokumente | 0 | 9 | 273 | 92 ms | 682 MB |
| KoSIT Validator1.6.3 · Validator Configuration XRechnung 3.0.2 2026-09-02 · Referenz | Java 11+ | Apache-2.0 | 1 / 11 | 97,9 %187 Dokumente | 0 | 0 | 282 | 11 ms | 1.021 MB |
| verifaktura0.1.8 | Node.js | Apache-2.0 | 2 / 11 | 97,6 %455 Dokumente | 0 | 11 | 251 | 52 ms | 392 MB |
| einvoice-kit0.1.3 | Node.js | MIT | 1 / 11 | 97,3 %449 Dokumente | 0 | 12 | 230 | 1,2 ms | 100 MB |
| phive4.6.0 | Java 17+ | Apache-2.0 | alle | 96,7 %722 Dokumente | 0 | 22 | 311 | 7,4 ms | 867 MB |
| en16931 (npm)0.1.0 | Node.js | MIT AND EUPL-1.2 | 1 / 11 | 96,7 %449 Dokumente | 1 | 11 | 255 | 55 ms | 239 MB |
| Klarfakt1.0.0-preview.2 | .NET 10 | BUSL-1.1 (free for evaluation; Apache-2.0 after four years) | 3 / 11 | 96,4 %687 Dokumente | 8 | 17 | 278 | 11 ms | 463 MB |
| @kontor-mcp/core1.0.4 | Node.js | Apache-2.0 | 2 / 11 | 95,9 %636 Dokumente | 0 | 19 | 277 | 195 ms | 507 MB |
| Mustangproject2.26.0 | Java 11+ | Apache-2.0 | 6 / 11 | 95,4 %646 Dokumente | 7 | 23 | 281 | 44 ms | 955 MB |
| @aifind/mustangjs0.4.0 | Node.js | Apache-2.0 | 2 / 11 | 94 %636 Dokumente | 8 | 24 | 265 | 73 ms | 407 MB |
| core-invoice (Rust CLI)2.0.3 | Rust | MIT OR Apache-2.0 | 2 / 11 | 94 %500 Dokumente | 10 | 20 | 218 | 2,7 ms | 10 MB |
| verifyhash-einvoice0.2.9 | Python 3 | Apache-2.0 | 2 / 11 | 93,6 %636 Dokumente | 4 | 37 | 252 | 2,1 ms | 28 MB |
| International.EInvoicing (.NET CLI)1.1.0 | .NET 8+ | MIT | 2 / 11 | 93,4 %636 Dokumente | 4 | 31 | 259 | 320 ms | 193 MB |
| john-wink/en16931-php0.3.0 | PHP 8 | MIT | 2 / 11 | 93,1 %636 Dokumente | 1 | 43 | 242 | 36 ms | 51 MB |
| @attestwire/en169310.14.0 | Node.js | MIT | 3 / 11 | 90,5 %687 Dokumente | 7 | 58 | 228 | 2,3 ms | 110 MB |
| en16931 (Dart)0.1.4 | Dart, AOT-compiled | MIT | 7 / 11 | 89 %697 Dokumente | 20 | 57 | 226 | 1 ms | 48 MB |
| speedata/einvoicev0.0.22 | Go | BSD-3-Clause | 3 / 11 | 88,9 %687 Dokumente | 15 | 61 | 208 | 7,4 ms | 17 MB |
| stampbench (@stampbench/core)0.1.1 | Node.js | MIT | 2 / 11 | 84,9 %636 Dokumente | 8 | 88 | 154 | 1,5 ms | 83 MB |
| en16931 (Rust CLI)0.6.0 | Rust | MIT OR Apache-2.0 | 3 / 11 | 76,4 %687 Dokumente | 116 | 46 | 194 | 3,1 ms | 10 MB |
| @fin.cx/einvoice11.1.1 | Node.js | MIT | 2 / 11 | 69,5 %636 Dokumente | 14 | 180 | 57 | 9,4 ms | 161 MB |
| KoSIT Validator + ZUGFeRD configuration1.6.3 · Validator Configuration ZUGFeRD 2.5.2 2026-06-11 · Referenz | Java 11+ | Apache-2.0 | 4 / 11 | 50 %10 Dokumente | 0 | 5 | 31 | 5,7 ms | 831 MB |
| factur-x (akretion)6.8 | Python 3 | BSD-2-Clause | 4 / 11 | 50 %10 Dokumente | 0 | 5 | 14 | 0,4 ms | 45 MB |
„Profile“: wie viele der 11 Profile im Datenkit die Engine selbst zu prüfen angibt. „Richtig“: Anteil der Dokumente in diesen Profilen, bei denen das Urteil (gültig oder fehlerhaft) dem erwarteten entspricht; ein Dokument, das die Engine nicht beurteilen kann, zählt als falsch. Weil jede Engine andere Profile abdeckt, beziehen sich die Prozentwerte auf unterschiedlich viele Dokumente. Der KoSIT-Validator ist die amtliche Referenz für XRechnung. Gemessen 25.–30. September 2026.
„Regel benannt“: von 338 fehlerhaften Mustern im ganzen Kit, wie viele die Engine ablehnt und dabei die verletzte Regel nennt. „Median“: Laufzeit pro Dokument nach dem Aufwärmen; „Speicher“: Spitze des ganzen Prozesses.
| Kennzahl | Beleggo | Mustangproject | phive | Vorne |
|---|---|---|---|---|
| Richtige Urteile, alle Dokumentegegen das erwartete Urteil jedes Musters | 722 / 722 (100 %) | 668 / 722 (92,5 %) | 698 / 722 (96,7 %) | Beleggo |
| Richtige Urteile in Mustangs Profilennur die Profile, die Mustang selbst prüft | 646 / 646 (100 %) | 616 / 646 (95,4 %) | 623 / 646 (96,4 %) | Beleggo |
| Übereinstimmung mit dem KoSIT-Validatorauf allen XRechnung-Dokumenten — dem Bereich, für den der amtliche Validator zuständig ist | 183 / 183 (100 %) | 167 / 183 (91,3 %) | 175 / 183 (95,6 %) | Beleggo |
| Fehler mit der richtigen Regel benanntnicht nur abgelehnt, sondern die verletzte Regel genannt | 338 / 338 (100 %) | 281 / 338 (83,1 %) | 311 / 338 (92 %) | Beleggo |
| Geprüfte Profile im KitFormate, deren eigene Regeln die Engine kennt | 11 / 11 | 6 / 11 | 11 / 11 | Beleggo · phive |
| Kennzahl | Beleggo | Mustangproject | phive | Vorne |
|---|---|---|---|---|
| Laufzeit pro Dokument (Median)nach dem Aufwärmen | 5 ms | 44 ms | 7,4 ms | Beleggo |
| Laufzeit pro Dokument (95 %)die langsamen Dokumente | 20 ms | 88 ms | 25 ms | Beleggo |
| Dokumente pro Sekundeein Dokument nach dem anderen | 112 | 17,2 | 56,8 | Beleggo |
| Rechenzeit pro Dokumentaller Threads zusammen | 13 ms | 118 ms | 48 ms | Beleggo |
| Einzelaufruf (Start + erstes Dokument)was ein Kommandozeilenaufruf kostet | 345 ms | 3.822 ms | 5.325 ms | Beleggo |
| Arbeitsspeicher (Spitze)des ganzen Prozesses | 329 MB | 955 MB | 867 MB | Beleggo |
| InstallationsgrößeRegelwerke und Laufzeit, ohne Node.js bzw. Java | 15 MB | 56 MB | 58 MB | Beleggo |
Beleggo führt die amtlichen Schematron-Regeln als nach JavaScript übersetzten Code aus, gelesen aus denselben Stylesheets, die Saxon-JS ausführt, und auf allen Testkorpora mit Saxon-JS als Referenz gegengeprüft: gleiche Befunde, gleicher Text, gleiche Reihenfolge. Ein Dokument, das die übersetzten Regeln nicht genau beurteilen können, geht an Saxon-JS. Die Rechenzeit liegt über der Laufzeit, weil die Speicherbereinigung von Node.js auf eigenen Threads läuft. Im Browser läuft dieselbe Engine.
| Beleggo | Mustangproject | phive | |
|---|---|---|---|
| EN 16931 (UBL und CII) | ja | ja | ja |
| XRechnung 3 mit den amtlichen KoSIT-Schweregraden | ja | teilweise | teilweise |
| Peppol BIS 3 und Peppol-Länderregeln | ja | nein | ja |
| NLCIUS, CIUS-RO, HR-CIUS, CIUS-PT | ja | nein | ja |
| Factur-X-/ZUGFeRD-Profile (XSD und Schematron) | ja | ja | ja |
| Sichtbare PDF-Seite gegen das XML abgleichen | ja | nein | nein |
| Prüfziffern (IBAN, USt-IdNr., Leitweg-ID, Steuernummer …) | ja | nein | nein |
| Läuft im Browser, ohne Upload, ohne Server | ja | nein | nein |
| Vollständige PDF/A-3-Prüfung (alle Regeln der veraPDF-Profile) | ja | ja | nein |
| ZUGFeRD 1.0 und Order-X | ja | ja | nein |
| Französische CTC-Regeln (BR-FR Flux 2) als Fehler, in UBL und CII | ja | teilweise | ja |
| XRechnung-Schematron in der aktuellen Fassung (2.6.0) | ja | teilweise | ja |
| Peppol BIS 3 in CII | ja | nein | nein |
| EXTENDED-CTC-FR und Flux-10-E-Reporting (Frankreich) | ja | teilweise | ja |
| Nachrechnen jeder Position (Menge × Preis) | ja | ja | nein |
| Warnung, die schon als künftiger Fehler angekündigt ist | ja | nein | nein |
| Peppol PINT (EU, A-NZ, SG, JP, MY, AE, OM) — bei Beleggo in CLI und MCP, Regeln direkt von OpenPeppol geladen | ja | nein | ja |
| Peppol Invoice Response und Message Level Status | ja | nein | ja |
Mustang weicht bei 54 von 722 Dokumenten vom erwarteten Urteil ab, 24 davon in Profilen, die es gar nicht prüft. Die übrigen haben fünf Ursachen:
| Profil | Dokumente | Beleggo | Mustangproject | phive |
|---|---|---|---|---|
en16931 · cii | 49 | 49 | 44 | 45 |
en16931 · ubl | 264 | 264 | 260 | 259 |
en16931 · zugferd | 136 | 136 | 136 | 135 |
hr-cius · ubl | 6 | 6 | 2 | 6 |
nlcius · ubl | 5 | 5 | 4 | 5 |
peppol-bis3 · cii | 1 | 1 | 1 | 1 |
peppol-bis3 · ubl | 49 | 49 | 37 | 48 |
peppol-bis3 · zugferd | 1 | 1 | 1 | 1 |
pt-cius · ubl | 5 | 5 | 3 | 5 |
ro-cius · ubl | 9 | 9 | 4 | 9 |
xrechnung · cii | 126 | 126 | 114 | 119 |
xrechnung · ubl | 47 | 47 | 43 | 46 |
xrechnung · zugferd | 14 | 14 | 14 | 14 |
zugferd-basic · cii | 1 | 1 | 1 | 1 |
zugferd-basic · zugferd | 2 | 2 | 2 | 2 |
zugferd-basicwl · cii | 1 | 1 | 0 | 0 |
zugferd-basicwl · zugferd | 1 | 1 | 0 | 0 |
zugferd-extended · cii | 1 | 1 | 1 | 1 |
zugferd-extended · zugferd | 1 | 1 | 1 | 1 |
zugferd-minimum · cii | 1 | 1 | 0 | 0 |
zugferd-minimum · zugferd | 2 | 2 | 0 | 0 |
Datenkit 0.1.0 (969f6f3ec8fdccbc), 722 Dokumente, mit dem erwarteten Urteil jedes Musters als Maßstab. Dieses Urteil stammt aus dem Beleggo-Projekt; damit es nicht nur Beleggo bestätigt, ist jede Abweichung von Mustang von Hand gegen die Spezifikationen geprüft, und der amtliche KoSIT-Validator läuft als unabhängige Referenz mit. Wo er anders urteilt als Beleggo, fehlt ihm die Regel: die französischen CTC-Regeln und eine Factur-X-Codeliste.
Beleggo artefacts 2026-08-31, Mustangproject 2.26.0, phive 4.6.0 (mit allen phive-rules-Modulen; das Regelwerk wählt phives eigene Dokumenterkennung), KoSIT-Validator 1.6.3 · Validator Configuration XRechnung 3.0.2 2026-09-02. Jede Engine läuft in einem eigenen Prozess, der die ganze Messung über lebt — so misst die Laufzeit die Engine und nicht den Start der Java-VM.