Gemessen, nicht behauptet

Validierungs-Engines im Vergleich

Beleggo, Mustangproject, phive und 21 weitere 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

Alle 24 Engines im Überblick

EngineLaufzeitLizenzProfileRichtigFehlalarmeÜbersehenRegel benanntMedianSpeicher
Beleggoartefacts 2026-08-31JavaScriptproprietaryalle100 %722 Dokumente003385 ms329 MB
dealerweb/einvoice1.1.0PHP 8MIT7 / 1198,7 %697 Dokumente1828946 ms149 MB
EU ITB eInvoicing validator1.14.0-SNAPSHOT (2026-09-25) · CEN 1.3.16Java 17+EUPL-1.21 / 1198 %449 Dokumente0927392 ms682 MB
KoSIT Validator1.6.3 · Validator Configuration XRechnung 3.0.2 2026-09-02 · ReferenzJava 11+Apache-2.01 / 1197,9 %187 Dokumente0028211 ms1.021 MB
verifaktura0.1.8Node.jsApache-2.02 / 1197,6 %455 Dokumente01125152 ms392 MB
einvoice-kit0.1.3Node.jsMIT1 / 1197,3 %449 Dokumente0122301,2 ms100 MB
phive4.6.0Java 17+Apache-2.0alle96,7 %722 Dokumente0223117,4 ms867 MB
en16931 (npm)0.1.0Node.jsMIT AND EUPL-1.21 / 1196,7 %449 Dokumente11125555 ms239 MB
Klarfakt1.0.0-preview.2.NET 10BUSL-1.1 (free for evaluation; Apache-2.0 after four years)3 / 1196,4 %687 Dokumente81727811 ms463 MB
@kontor-mcp/core1.0.4Node.jsApache-2.02 / 1195,9 %636 Dokumente019277195 ms507 MB
Mustangproject2.26.0Java 11+Apache-2.06 / 1195,4 %646 Dokumente72328144 ms955 MB
@aifind/mustangjs0.4.0Node.jsApache-2.02 / 1194 %636 Dokumente82426573 ms407 MB
core-invoice (Rust CLI)2.0.3RustMIT OR Apache-2.02 / 1194 %500 Dokumente10202182,7 ms10 MB
verifyhash-einvoice0.2.9Python 3Apache-2.02 / 1193,6 %636 Dokumente4372522,1 ms28 MB
International.EInvoicing (.NET CLI)1.1.0.NET 8+MIT2 / 1193,4 %636 Dokumente431259320 ms193 MB
john-wink/en16931-php0.3.0PHP 8MIT2 / 1193,1 %636 Dokumente14324236 ms51 MB
@attestwire/en169310.14.0Node.jsMIT3 / 1190,5 %687 Dokumente7582282,3 ms110 MB
en16931 (Dart)0.1.4Dart, AOT-compiledMIT7 / 1189 %697 Dokumente20572261 ms48 MB
speedata/einvoicev0.0.22GoBSD-3-Clause3 / 1188,9 %687 Dokumente15612087,4 ms17 MB
stampbench (@stampbench/core)0.1.1Node.jsMIT2 / 1184,9 %636 Dokumente8881541,5 ms83 MB
en16931 (Rust CLI)0.6.0RustMIT OR Apache-2.03 / 1176,4 %687 Dokumente116461943,1 ms10 MB
@fin.cx/einvoice11.1.1Node.jsMIT2 / 1169,5 %636 Dokumente14180579,4 ms161 MB
KoSIT Validator + ZUGFeRD configuration1.6.3 · Validator Configuration ZUGFeRD 2.5.2 2026-06-11 · ReferenzJava 11+Apache-2.04 / 1150 %10 Dokumente05315,7 ms831 MB
factur-x (akretion)6.8Python 3BSD-2-Clause4 / 1150 %10 Dokumente05140,4 ms45 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.

Im Detail: Beleggo, Mustangproject und phive

Richtige Urteile

KennzahlBeleggoMustangprojectphiveVorne
Richtige Urteile, alle Dokumentegegen das erwartete Urteil jedes Musters722 / 722 (100 %)668 / 722 (92,5 %)698 / 722 (96,7 %)Beleggo
Richtige Urteile in Mustangs Profilennur die Profile, die Mustang selbst prüft646 / 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 ist183 / 183 (100 %)167 / 183 (91,3 %)175 / 183 (95,6 %)Beleggo
Fehler mit der richtigen Regel benanntnicht nur abgelehnt, sondern die verletzte Regel genannt338 / 338 (100 %)281 / 338 (83,1 %)311 / 338 (92 %)Beleggo
Geprüfte Profile im KitFormate, deren eigene Regeln die Engine kennt11 / 116 / 1111 / 11Beleggo · phive

Geschwindigkeit und Aufwand

KennzahlBeleggoMustangprojectphiveVorne
Laufzeit pro Dokument (Median)nach dem Aufwärmen5 ms44 ms7,4 msBeleggo
Laufzeit pro Dokument (95 %)die langsamen Dokumente20 ms88 ms25 msBeleggo
Dokumente pro Sekundeein Dokument nach dem anderen11217,256,8Beleggo
Rechenzeit pro Dokumentaller Threads zusammen13 ms118 ms48 msBeleggo
Einzelaufruf (Start + erstes Dokument)was ein Kommandozeilenaufruf kostet345 ms3.822 ms5.325 msBeleggo
Arbeitsspeicher (Spitze)des ganzen Prozesses329 MB955 MB867 MBBeleggo
InstallationsgrößeRegelwerke und Laufzeit, ohne Node.js bzw. Java15 MB56 MB58 MBBeleggo

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.

Was jede Engine kann

BeleggoMustangprojectphive
EN 16931 (UBL und CII)jajaja
XRechnung 3 mit den amtlichen KoSIT-Schweregradenjateilweiseteilweise
Peppol BIS 3 und Peppol-Länderregelnjaneinja
NLCIUS, CIUS-RO, HR-CIUS, CIUS-PTjaneinja
Factur-X-/ZUGFeRD-Profile (XSD und Schematron)jajaja
Sichtbare PDF-Seite gegen das XML abgleichenjaneinnein
Prüfziffern (IBAN, USt-IdNr., Leitweg-ID, Steuernummer …)janeinnein
Läuft im Browser, ohne Upload, ohne Serverjaneinnein
Vollständige PDF/A-3-Prüfung (alle Regeln der veraPDF-Profile)jajanein
ZUGFeRD 1.0 und Order-Xjajanein
Französische CTC-Regeln (BR-FR Flux 2) als Fehler, in UBL und CIIjateilweiseja
XRechnung-Schematron in der aktuellen Fassung (2.6.0)jateilweiseja
Peppol BIS 3 in CIIjaneinnein
EXTENDED-CTC-FR und Flux-10-E-Reporting (Frankreich)jateilweiseja
Nachrechnen jeder Position (Menge × Preis)jajanein
Warnung, die schon als künftiger Fehler angekündigt istjaneinnein
Peppol PINT (EU, A-NZ, SG, JP, MY, AE, OM) — bei Beleggo in CLI und MCP, Regeln direkt von OpenPeppol geladenjaneinja
Peppol Invoice Response und Message Level Statusjaneinja

Wo und warum sie sich unterscheiden

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:

Nach Profil

ProfilDokumenteBeleggoMustangprojectphive
en16931 · cii49494445
en16931 · ubl264264260259
en16931 · zugferd136136136135
hr-cius · ubl6626
nlcius · ubl5545
peppol-bis3 · cii1111
peppol-bis3 · ubl49493748
peppol-bis3 · zugferd1111
pt-cius · ubl5535
ro-cius · ubl9949
xrechnung · cii126126114119
xrechnung · ubl47474346
xrechnung · zugferd14141414
zugferd-basic · cii1111
zugferd-basic · zugferd2222
zugferd-basicwl · cii1100
zugferd-basicwl · zugferd1100
zugferd-extended · cii1111
zugferd-extended · zugferd1111
zugferd-minimum · cii1100
zugferd-minimum · zugferd2200

Wie gemessen wurde

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.