SVG renderer benchmark
novasvg against resvg, lunasvg, cairosvg, thorvg, nanosvg. Each of the 60 samples is rendered at its own aspect ratio,
fit within 320×320px, and timed as the median of 5 runs.
60 samples median of 5 runs generated 2026-10-15 02:17 UTC
At a glance
Chromium (ground truth) is the reference every other engine is checked
against, not a competitor. Its render time includes full browser page-navigation overhead (one shared
instance for the whole corpus, one render each, no median-of-N), so it is left out of the charts.
RMSE is the root mean squared error against the ground-truth render, at the same pixel
dimensions, over all 4 RGBA channels on the 0-255 scale. Squaring before the square root weights a handful
of badly wrong pixels (a missing filter, a wrong fill, a shifted shape) far more than the routine
anti-aliasing noise along every edge, so low single digits is essentially imperceptible and anything in
the tens or higher usually means something structural differs.
Accuracy Mean RMSE against the Chromium render. Lower is closer.
novasvg 15.4 resvg 19.2 lunasvg 30.9 cairosvg 46.0 nanosvg 48.3 thorvg 76.4 Speed Average render time per sample. Lower is faster.
thorvg 0.64 ms lunasvg 1.85 ms nanosvg 2.16 ms novasvg 2.28 ms resvg 3.38 ms cairosvg 42.92 ms
These charts and the table below are drawn from render_benchmark.json , which sits next to this page.
nanosvg is included as a lightweight baseline, not a fair fight with the other 5. It is a
minimal path and gradient rasterizer with no CSS, no filters and no text layout, so its FAILs and blank
renders on filter or text heavy samples below are expected scope, not bugs.
Engine versions
Engine Version Rendered OK Avg time / sample Total time
Chromium (ground truth) Chromium 141.0.7390.37 60/60 84.34 ms 5060.28 ms novasvg 0.10.0 60/60 2.28 ms 136.57 ms resvg 0.45.1 60/60 3.38 ms 202.54 ms lunasvg 3.5.0 60/60 1.85 ms 110.75 ms cairosvg 2.9.1 60/60 42.92 ms 2575.47 ms thorvg 1.0.0 60/60 0.64 ms 38.15 ms nanosvg git-master (no version macro upstream) 60/60 2.16 ms 129.54 ms
Rendered output
Same size (that sample's own aspect ratio, fit within 320×320px) from every engine, side by side, so visual differences (missing text, wrong fills, unapplied filters, ...) are easy to spot. Click any render to zoom in.
circle (320×320px) plain shape
Chromium (ground truth) 140.72 msreference novasvg 0.49 msRMSE 1.81 resvg 0.90 msRMSE 1.38 lunasvg 0.50 msRMSE 1.81 cairosvg 7.86 msRMSE 1.80 thorvg 0.43 msRMSE 1.62 nanosvg 1.74 msRMSE 2.39 rect (320×320px) plain shape
Chromium (ground truth) 56.26 msreference novasvg 0.21 msRMSE 0.00 resvg 0.16 msRMSE 0.00 lunasvg 0.08 msRMSE 0.00 cairosvg 6.51 msRMSE 0.00 thorvg 0.16 msRMSE 0.00 nanosvg 2.04 msRMSE 1.57 tiger (320×320px) complex path-heavy vector art
Chromium (ground truth) 103.47 msreference novasvg 11.68 msRMSE 5.96 resvg 10.46 msRMSE 5.24 lunasvg 10.56 msRMSE 5.96 cairosvg 96.39 msRMSE 5.61 thorvg 7.32 msRMSE 5.91 nanosvg 15.30 msRMSE 11.48 nova-logo (320×161px) logo, mixed shapes/gradients
Chromium (ground truth) 106.72 msreference novasvg 0.89 msRMSE 10.13 resvg 1.53 msRMSE 8.40 lunasvg 0.79 msRMSE 10.13 cairosvg 13.88 msRMSE 9.22 thorvg 0.68 msRMSE 9.03 nanosvg 2.40 msRMSE 25.05 clip-mask (320×160px) clip-path + luminance mask
Chromium (ground truth) 71.98 msreference novasvg 0.53 msRMSE 4.35 resvg 1.50 msRMSE 6.26 lunasvg 0.49 msRMSE 4.35 cairosvg 5.15 msRMSE 97.46 thorvg 0.38 msRMSE 4.17 nanosvg 1.39 msRMSE 118.00 gradient-filter (320×160px) gradients + SVG filter
Chromium (ground truth) 87.61 msreference novasvg 2.84 msRMSE 8.17 resvg 23.26 msRMSE 13.36 lunasvg 0.18 msRMSE 42.82 cairosvg 7.31 msRMSE 42.84 thorvg 0.59 msRMSE 15.63 nanosvg 1.50 msRMSE 49.63 filter-primitives (320×120px) chained filter primitives (blur/offset/flood/composite)
Chromium (ground truth) 82.73 msreference novasvg 2.03 msRMSE 2.41 resvg 14.32 msRMSE 2.07 lunasvg 0.04 msRMSE 9.07 cairosvg 6.43 msRMSE 36.92 thorvg 0.31 msRMSE 38.92 nanosvg 0.44 msRMSE 17.48 css-use-symbol (320×160px) CSS transform + <use>/<symbol>
Chromium (ground truth) 64.05 msreference novasvg 0.31 msRMSE 1.54 resvg 0.63 msRMSE 26.32 lunasvg 0.23 msRMSE 26.36 cairosvg 10.25 msRMSE 26.35 thorvg 0.14 msRMSE 26.33 nanosvg 0.38 msRMSE 69.54 base64-image (320×160px) embedded raster <image>
Chromium (ground truth) 81.56 msreference novasvg 0.84 msRMSE 24.61 resvg 2.43 msRMSE 18.98 lunasvg 0.91 msRMSE 24.67 cairosvg 5.83 msRMSE 28.86 thorvg 0.05 msRMSE 93.30 nanosvg 0.80 msRMSE 93.30 mermaid-flowchart (273×320px) <foreignObject> text, CSS classDef fills
Chromium (ground truth) 106.59 msreference novasvg 1.35 msRMSE 11.72 resvg 1.65 msRMSE 23.90 lunasvg 0.87 msRMSE 25.25 cairosvg 34.92 msRMSE 25.32 thorvg 0.40 msRMSE 39.77 nanosvg 1.57 msRMSE 31.11 embedded-font (320×80px) plain <text>, @font-face embedded TTF/OTF
Chromium (ground truth) 124.44 msreference novasvg 4.10 msRMSE 37.41 resvg 3.52 msRMSE 39.28 lunasvg 3.98 msRMSE 44.29 cairosvg 180.91 msRMSE 45.96 thorvg 0.26 msRMSE 39.28 nanosvg 1.20 msRMSE 39.28 embedded-font-distinctive (320×112px) embedded monospace font vs. an unresolvable family, side by side
Chromium (ground truth) 100.67 msreference novasvg 6.05 msRMSE 55.83 resvg 2.92 msRMSE 48.42 lunasvg 4.13 msRMSE 58.28 cairosvg 145.73 msRMSE 58.52 thorvg 0.21 msRMSE 48.42 nanosvg 1.40 msRMSE 48.42 mermaid-01-venn (320×180px) mermaid venn-beta diagram (mmdc render)
Chromium (ground truth) 69.69 msreference novasvg 1.92 msRMSE 6.99 resvg 1.11 msRMSE 16.28 lunasvg 0.97 msRMSE 198.51 cairosvg 20.57 msRMSE 198.39 thorvg 0.44 msRMSE 198.80 nanosvg 1.35 msRMSE 207.54 mermaid-02-flowchart (320×129px) mermaid graph diagram (mmdc render)
Chromium (ground truth) 65.44 msreference novasvg 3.56 msRMSE 4.99 resvg 2.53 msRMSE 8.57 lunasvg 1.34 msRMSE 201.84 cairosvg 41.52 msRMSE 202.10 thorvg 0.60 msRMSE 231.28 nanosvg 2.02 msRMSE 198.78 mermaid-03-block (320×154px) mermaid block diagram (mmdc render)
Chromium (ground truth) 82.94 msreference novasvg 1.33 msRMSE 3.77 resvg 1.22 msRMSE 8.48 lunasvg 0.89 msRMSE 203.35 cairosvg 23.69 msRMSE 203.35 thorvg 0.26 msRMSE 235.74 nanosvg 1.18 msRMSE 201.19 mermaid-04-simple-flowchart (315×320px) mermaid graph diagram (mmdc render)
Chromium (ground truth) 72.70 msreference novasvg 1.87 msRMSE 17.03 resvg 1.96 msRMSE 24.29 lunasvg 1.14 msRMSE 24.59 cairosvg 31.52 msRMSE 24.64 thorvg 0.33 msRMSE 103.14 nanosvg 1.76 msRMSE 29.35 mermaid-05-data-flow (320×57px) mermaid graph diagram (mmdc render)
Chromium (ground truth) 76.89 msreference novasvg 1.92 msRMSE 20.95 resvg 2.34 msRMSE 28.19 lunasvg 2.48 msRMSE 19.02 cairosvg 34.80 msRMSE 19.42 thorvg 0.71 msRMSE 115.38 nanosvg 1.47 msRMSE 34.38 mermaid-06-simple-sequence (320×181px) mermaid sequenceDiagram diagram (mmdc render)
Chromium (ground truth) 71.82 msreference novasvg 1.11 msRMSE 11.37 resvg 1.58 msRMSE 19.77 lunasvg 1.60 msRMSE 17.82 cairosvg 26.34 msRMSE 19.40 thorvg 0.32 msRMSE 24.96 nanosvg 1.11 msRMSE 25.18 mermaid-07-simple-state (254×320px) mermaid stateDiagram-v2 diagram (mmdc render)
Chromium (ground truth) 98.29 msreference novasvg 1.39 msRMSE 23.09 resvg 2.60 msRMSE 54.13 lunasvg 1.42 msRMSE 54.05 cairosvg 33.25 msRMSE 54.15 thorvg 0.40 msRMSE 69.62 nanosvg 1.21 msRMSE 55.41 mermaid-08-simple-mindmap (320×245px) mermaid mindmap diagram (mmdc render)
Chromium (ground truth) 85.49 msreference novasvg 1.40 msRMSE 14.06 resvg 6.29 msRMSE 13.36 lunasvg 1.80 msRMSE 14.68 cairosvg 78.42 msRMSE 66.61 thorvg 0.49 msRMSE 68.43 nanosvg 1.94 msRMSE 38.29 mermaid-09-complex-sequence (278×320px) mermaid sequenceDiagram diagram (mmdc render)
Chromium (ground truth) 103.87 msreference novasvg 2.07 msRMSE 12.50 resvg 2.75 msRMSE 17.03 lunasvg 1.92 msRMSE 17.35 cairosvg 36.82 msRMSE 41.80 thorvg 0.50 msRMSE 37.85 nanosvg 1.99 msRMSE 33.76 mermaid-10-complex-erd (110×320px) mermaid erDiagram diagram (mmdc render)
Chromium (ground truth) 92.41 msreference novasvg 2.18 msRMSE 23.99 resvg 4.07 msRMSE 27.65 lunasvg 1.17 msRMSE 29.44 cairosvg 52.43 msRMSE 146.83 thorvg 0.89 msRMSE 31.97 nanosvg 2.26 msRMSE 77.06 mermaid-11-flowchart-multiline-entities (164×320px) mermaid graph diagram (mmdc render)
Chromium (ground truth) 82.37 msreference novasvg 2.56 msRMSE 14.34 resvg 3.05 msRMSE 16.99 lunasvg 1.91 msRMSE 18.26 cairosvg 51.27 msRMSE 17.67 thorvg 0.88 msRMSE 86.42 nanosvg 2.14 msRMSE 24.54 mermaid-12-flowchart-subgraphs (320×79px) mermaid flowchart diagram (mmdc render)
Chromium (ground truth) 85.18 msreference novasvg 1.22 msRMSE 16.44 resvg 1.82 msRMSE 16.18 lunasvg 0.75 msRMSE 44.03 cairosvg 37.98 msRMSE 11.72 thorvg 0.35 msRMSE 149.67 nanosvg 1.10 msRMSE 34.25 mermaid-13-flowchart-long-label (188×320px) mermaid graph diagram (mmdc render)
Chromium (ground truth) 100.48 msreference novasvg 2.53 msRMSE 32.76 resvg 1.52 msRMSE 30.09 lunasvg 0.85 msRMSE 25.82 cairosvg 30.00 msRMSE 25.82 thorvg 0.23 msRMSE 163.36 nanosvg 1.63 msRMSE 34.81 mermaid-14-class-diagram (222×320px) mermaid classDiagram diagram (mmdc render)
Chromium (ground truth) 87.11 msreference novasvg 1.90 msRMSE 29.14 resvg 3.15 msRMSE 28.49 lunasvg 1.68 msRMSE 29.46 cairosvg 42.72 msRMSE 29.63 thorvg 0.51 msRMSE 30.89 nanosvg 1.65 msRMSE 34.60 mermaid-15-pie-chart (320×231px) mermaid pie diagram (mmdc render)
Chromium (ground truth) 79.23 msreference novasvg 1.38 msRMSE 3.65 resvg 1.86 msRMSE 11.41 lunasvg 1.70 msRMSE 10.87 cairosvg 21.07 msRMSE 50.31 thorvg 0.30 msRMSE 29.01 nanosvg 1.69 msRMSE 28.48 mermaid-16-gantt (320×63px) mermaid gantt diagram (mmdc render)
Chromium (ground truth) 80.68 msreference novasvg 1.57 msRMSE 19.85 resvg 2.12 msRMSE 22.24 lunasvg 2.22 msRMSE 20.20 cairosvg 57.24 msRMSE 20.20 thorvg 0.35 msRMSE 143.40 nanosvg 0.84 msRMSE 38.61 mermaid-17-journey (320×157px) mermaid journey diagram (mmdc render)
Chromium (ground truth) 69.45 msreference novasvg 4.67 msRMSE 55.06 resvg 1.83 msRMSE 39.94 lunasvg 2.78 msRMSE 55.15 cairosvg 28.54 msRMSE 13.83 thorvg 0.63 msRMSE 60.34 nanosvg 2.44 msRMSE 22.26 mermaid-18-timeline (320×172px) mermaid timeline diagram (mmdc render)
Chromium (ground truth) 85.41 msreference novasvg 2.45 msRMSE 14.25 resvg 3.50 msRMSE 10.59 lunasvg 1.81 msRMSE 15.10 cairosvg 57.34 msRMSE 77.11 thorvg 0.38 msRMSE 77.58 nanosvg 1.08 msRMSE 40.81 mermaid-19-sequence-notes-activation (320×227px) mermaid sequenceDiagram diagram (mmdc render)
Chromium (ground truth) 81.12 msreference novasvg 1.63 msRMSE 10.75 resvg 1.85 msRMSE 14.57 lunasvg 2.25 msRMSE 15.29 cairosvg 34.15 msRMSE 16.91 thorvg 0.46 msRMSE 21.89 nanosvg 1.59 msRMSE 27.01 mermaid-20-state-composite (56×320px) mermaid stateDiagram-v2 diagram (mmdc render)
Chromium (ground truth) 64.48 msreference novasvg 2.11 msRMSE 17.88 resvg 2.85 msRMSE 30.51 lunasvg 2.47 msRMSE 30.31 cairosvg 44.84 msRMSE 30.25 thorvg 0.69 msRMSE 164.88 nanosvg 2.05 msRMSE 44.19 mermaid-21-flowchart-shapes-styles (74×320px) mermaid flowchart diagram (mmdc render)
Chromium (ground truth) 68.85 msreference novasvg 4.20 msRMSE 19.80 resvg 3.62 msRMSE 23.54 lunasvg 3.97 msRMSE 42.16 cairosvg 61.17 msRMSE 23.74 thorvg 1.11 msRMSE 66.63 nanosvg 2.78 msRMSE 35.80 mermaid-22-gitgraph (320×166px) mermaid gitGraph diagram (mmdc render)
Chromium (ground truth) 83.52 msreference novasvg 2.08 msRMSE 11.62 resvg 3.17 msRMSE 18.15 lunasvg 2.12 msRMSE 16.51 cairosvg 38.52 msRMSE 46.90 thorvg 0.40 msRMSE 70.72 nanosvg 2.18 msRMSE 53.80 mermaid-23-quadrant-chart (320×320px) mermaid quadrantChart diagram (mmdc render)
Chromium (ground truth) 86.11 msreference novasvg 2.32 msRMSE 11.10 resvg 1.32 msRMSE 19.78 lunasvg 1.80 msRMSE 21.32 cairosvg 30.84 msRMSE 24.45 thorvg 0.37 msRMSE 19.80 nanosvg 1.99 msRMSE 27.93 mermaid-24-xychart (320×229px) mermaid xychart-beta diagram (mmdc render)
Chromium (ground truth) 96.67 msreference novasvg 1.33 msRMSE 8.54 resvg 1.55 msRMSE 15.18 lunasvg 1.13 msRMSE 13.86 cairosvg 34.65 msRMSE 12.49 thorvg 0.42 msRMSE 15.31 nanosvg 2.15 msRMSE 15.58 mermaid-25-sankey (320×216px) mermaid sankey-beta diagram (mmdc render)
Chromium (ground truth) 97.26 msreference novasvg 5.44 msRMSE 12.37 resvg 3.31 msRMSE 16.30 lunasvg 1.77 msRMSE 15.62 cairosvg 34.33 msRMSE 12.93 thorvg 2.09 msRMSE 73.44 nanosvg 2.08 msRMSE 57.63 mermaid-26-block (320×276px) mermaid block-beta diagram (mmdc render)
Chromium (ground truth) 91.17 msreference novasvg 1.63 msRMSE 21.34 resvg 2.15 msRMSE 18.26 lunasvg 0.94 msRMSE 19.76 cairosvg 27.92 msRMSE 19.76 thorvg 0.34 msRMSE 161.15 nanosvg 3.05 msRMSE 31.50 mermaid-27-c4-context (176×320px) mermaid C4Context diagram (mmdc render)
Chromium (ground truth) 113.54 msreference novasvg 4.01 msRMSE 13.20 resvg 2.06 msRMSE 21.15 lunasvg 3.14 msRMSE 13.25 cairosvg 54.32 msRMSE 13.43 thorvg 0.98 msRMSE 13.48 nanosvg 2.30 msRMSE 18.10 mermaid-28-requirement (215×320px) mermaid requirementDiagram diagram (mmdc render)
Chromium (ground truth) 86.84 msreference novasvg 2.57 msRMSE 24.92 resvg 2.25 msRMSE 33.38 lunasvg 0.75 msRMSE 34.99 cairosvg 36.85 msRMSE 34.46 thorvg 0.47 msRMSE 35.91 nanosvg 1.59 msRMSE 37.47 mermaid-29-kanban (320×81px) mermaid kanban diagram (mmdc render)
Chromium (ground truth) 76.86 msreference novasvg 3.75 msRMSE 29.34 resvg 5.91 msRMSE 24.67 lunasvg 1.49 msRMSE 28.69 cairosvg 82.93 msRMSE 77.71 thorvg 0.42 msRMSE 151.54 nanosvg 3.07 msRMSE 44.39 mermaid-30-architecture (309×320px) mermaid architecture-beta diagram (mmdc render)
Chromium (ground truth) 69.65 msreference novasvg 2.34 msRMSE 16.31 resvg 2.59 msRMSE 8.60 lunasvg 2.04 msRMSE 17.57 cairosvg 37.12 msRMSE 22.85 thorvg 0.82 msRMSE 106.80 nanosvg 3.01 msRMSE 69.34 mermaid-31-packet (320×132px) mermaid packet-beta diagram (mmdc render)
Chromium (ground truth) 64.68 msreference novasvg 1.55 msRMSE 5.35 resvg 1.08 msRMSE 12.94 lunasvg 1.15 msRMSE 7.69 cairosvg 33.84 msRMSE 7.26 thorvg 0.29 msRMSE 155.08 nanosvg 1.15 msRMSE 38.15 mermaid-32-radar (320×320px) mermaid radar-beta diagram (mmdc render)
Chromium (ground truth) 82.13 msreference novasvg 2.25 msRMSE 7.41 resvg 4.27 msRMSE 7.41 lunasvg 2.15 msRMSE 8.06 cairosvg 30.35 msRMSE 114.97 thorvg 0.59 msRMSE 142.58 nanosvg 6.86 msRMSE 39.40 mermaid-33-treemap (320×119px) mermaid treemap-beta diagram (mmdc render)
Chromium (ground truth) 98.39 msreference novasvg 0.97 msRMSE 7.21 resvg 1.52 msRMSE 16.29 lunasvg 0.77 msRMSE 29.10 cairosvg 24.49 msRMSE 159.09 thorvg 0.37 msRMSE 16.70 nanosvg 3.12 msRMSE 145.85 mermaid-34-venn (320×180px) mermaid venn-beta diagram (mmdc render)
Chromium (ground truth) 84.88 msreference novasvg 1.08 msRMSE 11.15 resvg 1.38 msRMSE 15.62 lunasvg 0.93 msRMSE 17.41 cairosvg 23.73 msRMSE 19.94 thorvg 0.44 msRMSE 17.41 nanosvg 1.98 msRMSE 22.14 mermaid-35-ishikawa (277×320px) mermaid ishikawa-beta diagram (mmdc render)
Chromium (ground truth) 89.25 msreference novasvg 2.03 msRMSE 9.95 resvg 1.99 msRMSE 18.38 lunasvg 1.77 msRMSE 18.08 cairosvg 46.67 msRMSE 21.54 thorvg 0.38 msRMSE 48.69 nanosvg 1.85 msRMSE 20.82 mermaid-36-wardley (320×233px) mermaid wardley-beta diagram (mmdc render)
Chromium (ground truth) 116.71 msreference novasvg 1.16 msRMSE 5.19 resvg 1.09 msRMSE 4.77 lunasvg 0.95 msRMSE 5.20 cairosvg 29.87 msRMSE 5.25 thorvg 0.53 msRMSE 4.97 nanosvg 3.17 msRMSE 5.65 mermaid-37-state-fork-choice (145×320px) mermaid stateDiagram-v2 diagram (mmdc render)
Chromium (ground truth) 78.51 msreference novasvg 2.58 msRMSE 13.23 resvg 3.63 msRMSE 17.19 lunasvg 2.49 msRMSE 18.98 cairosvg 67.28 msRMSE 19.08 thorvg 0.83 msRMSE 129.16 nanosvg 2.87 msRMSE 23.99 mermaid-38-sequence-control (197×320px) mermaid sequenceDiagram diagram (mmdc render)
Chromium (ground truth) 82.18 msreference novasvg 4.09 msRMSE 17.39 resvg 4.82 msRMSE 20.54 lunasvg 5.19 msRMSE 17.80 cairosvg 70.86 msRMSE 37.09 thorvg 0.94 msRMSE 35.95 nanosvg 4.82 msRMSE 73.36 mermaid-39-gantt-advanced (320×93px) mermaid gantt diagram (mmdc render)
Chromium (ground truth) 66.61 msreference novasvg 1.89 msRMSE 21.93 resvg 2.65 msRMSE 27.09 lunasvg 2.74 msRMSE 21.33 cairosvg 46.18 msRMSE 20.95 thorvg 0.48 msRMSE 162.56 nanosvg 1.42 msRMSE 43.48 mermaid-40-erd-relations (320×245px) mermaid erDiagram diagram (mmdc render)
Chromium (ground truth) 72.64 msreference novasvg 2.95 msRMSE 13.27 resvg 4.41 msRMSE 18.22 lunasvg 3.16 msRMSE 18.95 cairosvg 61.56 msRMSE 90.43 thorvg 1.11 msRMSE 42.56 nanosvg 2.64 msRMSE 48.35 mermaid-41-class-advanced (320×118px) mermaid classDiagram diagram (mmdc render)
Chromium (ground truth) 87.54 msreference novasvg 2.66 msRMSE 28.22 resvg 3.66 msRMSE 29.19 lunasvg 2.43 msRMSE 35.81 cairosvg 73.79 msRMSE 31.17 thorvg 0.74 msRMSE 32.09 nanosvg 1.35 msRMSE 36.25 mermaid-42-mindmap-shapes (320×214px) mermaid mindmap diagram (mmdc render)
Chromium (ground truth) 80.26 msreference novasvg 3.00 msRMSE 16.44 resvg 8.75 msRMSE 18.66 lunasvg 3.01 msRMSE 16.71 cairosvg 106.50 msRMSE 84.69 thorvg 0.93 msRMSE 85.65 nanosvg 3.09 msRMSE 47.61 mermaid-43-timeline-sections (320×131px) mermaid timeline diagram (mmdc render)
Chromium (ground truth) 90.49 msreference novasvg 1.66 msRMSE 18.13 resvg 6.89 msRMSE 12.97 lunasvg 2.72 msRMSE 18.54 cairosvg 75.28 msRMSE 90.62 thorvg 0.53 msRMSE 91.29 nanosvg 1.34 msRMSE 47.61 mermaid-44-pie-basic (320×252px) mermaid pie diagram (mmdc render)
Chromium (ground truth) 70.96 msreference novasvg 1.66 msRMSE 5.47 resvg 2.48 msRMSE 11.75 lunasvg 2.61 msRMSE 11.37 cairosvg 22.32 msRMSE 37.63 thorvg 0.36 msRMSE 31.44 nanosvg 1.81 msRMSE 20.67 mermaid-45-flowchart-markdown-labels (320×85px) mermaid flowchart diagram (mmdc render)
Chromium (ground truth) 66.12 msreference novasvg 1.52 msRMSE 18.67 resvg 3.07 msRMSE 30.35 lunasvg 1.14 msRMSE 25.39 cairosvg 30.54 msRMSE 23.80 thorvg 0.32 msRMSE 131.55 nanosvg 0.97 msRMSE 37.84 mermaid-46-sequence-actors-misc (320×254px) mermaid sequenceDiagram diagram (mmdc render)
Chromium (ground truth) 67.24 msreference novasvg 1.74 msRMSE 7.57 resvg 4.35 msRMSE 8.09 lunasvg 1.61 msRMSE 9.08 cairosvg 37.68 msRMSE 12.03 thorvg 0.71 msRMSE 47.07 nanosvg 1.49 msRMSE 48.48 mermaid-47-flowchart-br-bold-label (320×243px) mermaid flowchart diagram (mmdc render)
Chromium (ground truth) 64.36 msreference novasvg 0.66 msRMSE 15.24 resvg 2.67 msRMSE 27.70 lunasvg 0.36 msRMSE 27.73 cairosvg 23.95 msRMSE 27.66 thorvg 0.23 msRMSE 175.97 nanosvg 1.95 msRMSE 34.31 mermaid-48-flowchart-bold-italic-runs (320×45px) mermaid flowchart diagram (mmdc render)
Chromium (ground truth) 64.99 msreference novasvg 1.32 msRMSE 16.97 resvg 2.59 msRMSE 23.65 lunasvg 0.52 msRMSE 23.01 cairosvg 26.28 msRMSE 21.99 thorvg 0.27 msRMSE 152.20 nanosvg 0.79 msRMSE 37.22
Built entirely by benchmarks/CMakeLists.txt (cmake --build build --target novasvg_benchmark)
from novasvg's own data/ sample corpus. novasvg, resvg, lunasvg, thorvg and nanosvg are each driven
directly through their own C/C++ API in one process (native/*_native_bench.cpp), with no CLI, no
per-render subprocess and no Python bindings. cairosvg is the one exception (it has no native library of its
own to link against) and runs through its Python binding instead. Chromium (ground truth) is driven through
Playwright. Every render is a plain PNG under renders/ next to this page and the numbers are in
render_benchmark.json; keep the three together, no server or network is needed to view them, apart
from the web fonts, which fall back to system fonts offline.