Benchmarks
Results, by technology
The leptris ecosystem ships three engines — libleptris for XML, XPath, XSLT and HTML, yeptris for YAML, and teptris for TOML — with bindings for Ruby and Python. Results are organized by technology, and within each technology page by language, so you can read only the race that concerns your stack. Every number is generated from versioned result files that record the exact versions measured, the machine, the date, the reported statistic and the harness the measurement reproduces from. The measurement rules are documented on themethodology page.
XML parsing and DOM
libleptris against libxml2 and pugixml in C, the leptris gem against Nokogiri and Ox in Ruby, and the leptris package against lxml, ElementTree and minidom in Python.
View the results →XPath 1.0
Query evaluation against libxml2 in C and through the Ruby and Python bindings, across simple paths, predicates, aggregates, unions and variable-bound expressions.
View the results →XSLT
The transform engine measured fixture by fixture against in-process libxslt, alongside the 205-test byte-identical conformance gate.
View the results →HTML (WHATWG)
The conformant WHATWG tree-construction engine measured against Nokogiri’s libxml2 HTML parser through Ruby and through the Python binding.
View the results →TOML
teptris against tomlc99, tomlc17, cpptoml, toml11 and tomlplusplus across nine document shapes on a deterministic seeded corpus, in C.
View the results →YAML
yeptris against libyaml and rapidyaml across eight document shapes, three consumption models and emission, in C.
View the results →Prefer to start from your language? Each technology page has one section per language:XML in Ruby,XML in Python,XML in C,XPath in Ruby,XSLT in C,YAML in C.
How to read the matrices. Each matrix cell summarizes one race against one competitor in one language. When every measured operation is ahead, the cell shows the smallest margin across those operations. When a race contains measured deficits, the cell shows the weakest and the strongest result together, and hovering over the cell lists the operations that remain behind. The tables beneath each matrix list every measured operation, including the ones that lose. Numbers marked with a dagger (†) are carried from published artifacts or ledgers rather than from a fresh run.
Conformance and capability gates
Some races are decided on conformance and capability before a cross-library timing harness exists. These are stated as gates and are excluded from the matrices until a committed harness publishes numbers for them.
| Area | Standing | Gate |
|---|---|---|
| RELAX NG validation | Native implementation; no JVM required | Jing conformance corpus; <include> and <param> supported |
| Schematron validation | Native implementation producing SVRL | Conformance corpus; abstract patterns; phase selection |
| XQuery | FLWOR expressions and constructors on the same core | W3C QT3 function sets adopted with exact-N semantics |
| XPath 1.0 conformance | Complete | 438 of 438 W3C test cases |
| XSLT conformance | Byte-identical output | 205 of 205 tests from the libxslt general suite |
| HTML conformance | Improving with every release | html5lib tree-construction suite, 1169 of 1753; Nokogiri byte-compatibility suite |
All harnesses are committed to the product repositories:libleptris benchmarks,yeptris benchmarks,leptris gem benchmarks, andleptris Python benchmarks.