Performance
The matrix, automatic matrix, and SVG benchmarks compare QRCodeSDK with qrcode and qrcode-generator using its stock text encoder. Styled SVG generation compares QRCodeSDK with qr-code-styling. Benchmarks are environment-specific and should be read as relative comparisons, not universal guarantees.
The matrix and SVG fixtures supply explicit versions and masks. The qrcode-generator rows use the repository patch that applies each fixture’s mask and skips automatic mask evaluation. The automatic matrix fixtures omit both options so every library selects them.
Styled SVG generation uses all 60 shared styling fixtures at 1, 10, 50 repetitions. Both libraries select the mask automatically because qr-code-styling has no public mask option. Fixture module size and quiet zone determine the matching pixel dimensions and margin passed to qr-code-styling, which renders SVG through a shared JSDOM environment initialized before measurement.
Benchmark environment
Section titled “Benchmark environment”- Generated:
2026-09-04T13:03:58.339Z - Runtime:
v24.20.0ondarwin arm64 - CPU:
Apple M2 Pro(12 logical cores) - Libraries:
qrcodesdk@0.0.1,qrcode@1.5.4,qrcode-generator@2.0.4,qr-code-styling@1.9.2 - Samples: 3 timed samples after 5 static warm-up passes and 1 exhaustive warm-up pass
- SVG output: 4 px/module with a 4-module quiet zone
- Styled SVG fixtures: 60, with fixture-derived dimensions and automatic mask selection
The charts show throughput calculated from the median time. Higher is better, and each chart lists the fastest library first. Expand the exact benchmark data beneath each section for median time, min–max range, and throughput.
Matrix generation
Section titled “Matrix generation”---
config:
xyChart:
showDataLabel: true
showDataLabelOutsideBar: true
---
xychart horizontal
accTitle: Matrix generation: Static fixtures ×1 — 17 QR codes/sample
accDescr: Throughput calculated from median time. QRCodeSDK 11,663 QR codes per second, qrcode 6,112 QR codes per second, qrcode-generator 1,793 QR codes per second. Higher is better.
title "Static fixtures ×1 — 17 QR codes/sample"
x-axis "Library" ["QRCodeSDK", "qrcode", "qrcode-generator"]
y-axis "QR codes/second" 0 --> 15000
bar [11663, 6112, 1793]
---
config:
xyChart:
showDataLabel: true
showDataLabelOutsideBar: true
---
xychart horizontal
accTitle: Matrix generation: Static fixtures ×10 — 170 QR codes/sample
accDescr: Throughput calculated from median time. QRCodeSDK 11,605 QR codes per second, qrcode 6,105 QR codes per second, qrcode-generator 1,841 QR codes per second. Higher is better.
title "Static fixtures ×10 — 170 QR codes/sample"
x-axis "Library" ["QRCodeSDK", "qrcode", "qrcode-generator"]
y-axis "QR codes/second" 0 --> 15000
bar [11605, 6105, 1841]
---
config:
xyChart:
showDataLabel: true
showDataLabelOutsideBar: true
---
xychart horizontal
accTitle: Matrix generation: Static fixtures ×100 — 1,700 QR codes/sample
accDescr: Throughput calculated from median time. QRCodeSDK 11,786 QR codes per second, qrcode 5,990 QR codes per second, qrcode-generator 1,926 QR codes per second. Higher is better.
title "Static fixtures ×100 — 1,700 QR codes/sample"
x-axis "Library" ["QRCodeSDK", "qrcode", "qrcode-generator"]
y-axis "QR codes/second" 0 --> 15000
bar [11786, 5990, 1926]
---
config:
xyChart:
showDataLabel: true
showDataLabelOutsideBar: true
---
xychart horizontal
accTitle: Matrix generation: All combinations ×1 — 3,840 QR codes/sample
accDescr: Throughput calculated from median time. QRCodeSDK 6,396 QR codes per second, qrcode 5,307 QR codes per second, qrcode-generator 1,253 QR codes per second. Higher is better.
title "All combinations ×1 — 3,840 QR codes/sample"
x-axis "Library" ["QRCodeSDK", "qrcode", "qrcode-generator"]
y-axis "QR codes/second" 0 --> 7500
bar [6396, 5307, 1253]
Exact benchmark data
| Workload | QR codes/sample | Library | Median (ms) | Min–max (ms) | QR codes/second |
|---|---|---|---|---|---|
| Static fixtures ×1 | 17 | QRCodeSDK v0.0.1 | 1.458 | 1.452–1.566 | 11,663 |
| Static fixtures ×1 | 17 | qrcode v1.5.4 | 2.781 | 2.734–2.878 | 6,112 |
| Static fixtures ×1 | 17 | qrcode-generator v2.0.4 | 9.481 | 8.974–9.607 | 1,793 |
| Static fixtures ×10 | 170 | QRCodeSDK v0.0.1 | 14.649 | 14.434–14.662 | 11,605 |
| Static fixtures ×10 | 170 | qrcode v1.5.4 | 27.845 | 27.092–28.373 | 6,105 |
| Static fixtures ×10 | 170 | qrcode-generator v2.0.4 | 92.320 | 89.852–92.547 | 1,841 |
| Static fixtures ×100 | 1,700 | QRCodeSDK v0.0.1 | 144.241 | 141.503–151.893 | 11,786 |
| Static fixtures ×100 | 1,700 | qrcode v1.5.4 | 283.821 | 277.245–284.016 | 5,990 |
| Static fixtures ×100 | 1,700 | qrcode-generator v2.0.4 | 882.634 | 859.500–889.787 | 1,926 |
| All combinations ×1 | 3,840 | QRCodeSDK v0.0.1 | 600.381 | 593.616–610.568 | 6,396 |
| All combinations ×1 | 3,840 | qrcode v1.5.4 | 723.523 | 713.369–861.769 | 5,307 |
| All combinations ×1 | 3,840 | qrcode-generator v2.0.4 | 3065.471 | 3016.144–3080.619 | 1,253 |
Automatic matrix generation
Section titled “Automatic matrix generation”---
config:
xyChart:
showDataLabel: true
showDataLabelOutsideBar: true
---
xychart horizontal
accTitle: Automatic matrix generation: Static fixtures ×1 — 17 QR codes/sample
accDescr: Throughput calculated from median time. QRCodeSDK 1,365 QR codes per second, qrcode 889 QR codes per second, qrcode-generator 187 QR codes per second. Higher is better.
title "Static fixtures ×1 — 17 QR codes/sample"
x-axis "Library" ["QRCodeSDK", "qrcode", "qrcode-generator"]
y-axis "QR codes/second" 0 --> 2000
bar [1365, 889, 187]
---
config:
xyChart:
showDataLabel: true
showDataLabelOutsideBar: true
---
xychart horizontal
accTitle: Automatic matrix generation: Static fixtures ×10 — 170 QR codes/sample
accDescr: Throughput calculated from median time. QRCodeSDK 1,356 QR codes per second, qrcode 908 QR codes per second, qrcode-generator 187 QR codes per second. Higher is better.
title "Static fixtures ×10 — 170 QR codes/sample"
x-axis "Library" ["QRCodeSDK", "qrcode", "qrcode-generator"]
y-axis "QR codes/second" 0 --> 1500
bar [1356, 908, 187]
---
config:
xyChart:
showDataLabel: true
showDataLabelOutsideBar: true
---
xychart horizontal
accTitle: Automatic matrix generation: Static fixtures ×100 — 1,700 QR codes/sample
accDescr: Throughput calculated from median time. QRCodeSDK 1,357 QR codes per second, qrcode 798 QR codes per second, qrcode-generator 186 QR codes per second. Higher is better.
title "Static fixtures ×100 — 1,700 QR codes/sample"
x-axis "Library" ["QRCodeSDK", "qrcode", "qrcode-generator"]
y-axis "QR codes/second" 0 --> 1500
bar [1357, 798, 186]
Exact benchmark data
| Workload | QR codes/sample | Library | Median (ms) | Min–max (ms) | QR codes/second |
|---|---|---|---|---|---|
| Static fixtures ×1 | 17 | QRCodeSDK v0.0.1 | 12.454 | 12.393–12.585 | 1,365 |
| Static fixtures ×1 | 17 | qrcode v1.5.4 | 19.128 | 18.906–24.524 | 889 |
| Static fixtures ×1 | 17 | qrcode-generator v2.0.4 | 90.776 | 90.387–93.816 | 187 |
| Static fixtures ×10 | 170 | QRCodeSDK v0.0.1 | 125.333 | 124.775–125.402 | 1,356 |
| Static fixtures ×10 | 170 | qrcode v1.5.4 | 187.282 | 186.662–187.721 | 908 |
| Static fixtures ×10 | 170 | qrcode-generator v2.0.4 | 907.760 | 906.082–908.446 | 187 |
| Static fixtures ×100 | 1,700 | QRCodeSDK v0.0.1 | 1252.337 | 1247.044–1253.364 | 1,357 |
| Static fixtures ×100 | 1,700 | qrcode v1.5.4 | 2129.203 | 1869.964–2151.657 | 798 |
| Static fixtures ×100 | 1,700 | qrcode-generator v2.0.4 | 9134.096 | 9118.567–9154.573 | 186 |
SVG generation
Section titled “SVG generation”---
config:
xyChart:
showDataLabel: true
showDataLabelOutsideBar: true
---
xychart horizontal
accTitle: SVG generation: Static fixtures ×1 — 17 QR codes/sample
accDescr: Throughput calculated from median time. qrcode 4,040 QR codes per second, QRCodeSDK 2,891 QR codes per second, qrcode-generator 1,407 QR codes per second. Higher is better.
title "Static fixtures ×1 — 17 QR codes/sample"
x-axis "Library" ["qrcode", "QRCodeSDK", "qrcode-generator"]
y-axis "QR codes/second" 0 --> 4500
bar [4040, 2891, 1407]
---
config:
xyChart:
showDataLabel: true
showDataLabelOutsideBar: true
---
xychart horizontal
accTitle: SVG generation: Static fixtures ×10 — 170 QR codes/sample
accDescr: Throughput calculated from median time. qrcode 4,305 QR codes per second, QRCodeSDK 3,607 QR codes per second, qrcode-generator 1,589 QR codes per second. Higher is better.
title "Static fixtures ×10 — 170 QR codes/sample"
x-axis "Library" ["qrcode", "QRCodeSDK", "qrcode-generator"]
y-axis "QR codes/second" 0 --> 5000
bar [4305, 3607, 1589]
---
config:
xyChart:
showDataLabel: true
showDataLabelOutsideBar: true
---
xychart horizontal
accTitle: SVG generation: Static fixtures ×100 — 1,700 QR codes/sample
accDescr: Throughput calculated from median time. qrcode 4,648 QR codes per second, QRCodeSDK 3,595 QR codes per second, qrcode-generator 1,591 QR codes per second. Higher is better.
title "Static fixtures ×100 — 1,700 QR codes/sample"
x-axis "Library" ["qrcode", "QRCodeSDK", "qrcode-generator"]
y-axis "QR codes/second" 0 --> 5500
bar [4648, 3595, 1591]
---
config:
xyChart:
showDataLabel: true
showDataLabelOutsideBar: true
---
xychart horizontal
accTitle: SVG generation: All combinations ×1 — 3,840 QR codes/sample
accDescr: Throughput calculated from median time. qrcode 3,042 QR codes per second, QRCodeSDK 1,746 QR codes per second, qrcode-generator 963 QR codes per second. Higher is better.
title "All combinations ×1 — 3,840 QR codes/sample"
x-axis "Library" ["qrcode", "QRCodeSDK", "qrcode-generator"]
y-axis "QR codes/second" 0 --> 3500
bar [3042, 1746, 963]
Exact benchmark data
| Workload | QR codes/sample | Library | Median (ms) | Min–max (ms) | QR codes/second |
|---|---|---|---|---|---|
| Static fixtures ×1 | 17 | QRCodeSDK v0.0.1 | 5.880 | 4.574–7.027 | 2,891 |
| Static fixtures ×1 | 17 | qrcode v1.5.4 | 4.208 | 4.013–4.253 | 4,040 |
| Static fixtures ×1 | 17 | qrcode-generator v2.0.4 | 12.084 | 11.636–16.153 | 1,407 |
| Static fixtures ×10 | 170 | QRCodeSDK v0.0.1 | 47.130 | 47.039–47.626 | 3,607 |
| Static fixtures ×10 | 170 | qrcode v1.5.4 | 39.493 | 39.283–39.980 | 4,305 |
| Static fixtures ×10 | 170 | qrcode-generator v2.0.4 | 106.996 | 106.723–107.659 | 1,589 |
| Static fixtures ×100 | 1,700 | QRCodeSDK v0.0.1 | 472.856 | 472.120–473.321 | 3,595 |
| Static fixtures ×100 | 1,700 | qrcode v1.5.4 | 365.719 | 364.734–381.233 | 4,648 |
| Static fixtures ×100 | 1,700 | qrcode-generator v2.0.4 | 1068.605 | 1066.869–1084.734 | 1,591 |
| All combinations ×1 | 3,840 | QRCodeSDK v0.0.1 | 2199.083 | 2198.726–2200.344 | 1,746 |
| All combinations ×1 | 3,840 | qrcode v1.5.4 | 1262.302 | 1261.986–1263.098 | 3,042 |
| All combinations ×1 | 3,840 | qrcode-generator v2.0.4 | 3989.001 | 3983.264–3992.285 | 963 |
Styled SVG generation
Section titled “Styled SVG generation”---
config:
xyChart:
showDataLabel: true
showDataLabelOutsideBar: true
---
xychart horizontal
accTitle: Styled SVG generation: Styled fixtures ×1 — 60 QR codes/sample
accDescr: Throughput calculated from median time. QRCodeSDK 2,372 QR codes per second, qr-code-styling 107 QR codes per second. Higher is better.
title "Styled fixtures ×1 — 60 QR codes/sample"
x-axis "Library" ["QRCodeSDK", "qr-code-styling"]
y-axis "QR codes/second" 0 --> 3000
bar [2372, 107]
---
config:
xyChart:
showDataLabel: true
showDataLabelOutsideBar: true
---
xychart horizontal
accTitle: Styled SVG generation: Styled fixtures ×10 — 600 QR codes/sample
accDescr: Throughput calculated from median time. QRCodeSDK 2,537 QR codes per second, qr-code-styling 108 QR codes per second. Higher is better.
title "Styled fixtures ×10 — 600 QR codes/sample"
x-axis "Library" ["QRCodeSDK", "qr-code-styling"]
y-axis "QR codes/second" 0 --> 3000
bar [2537, 108]
---
config:
xyChart:
showDataLabel: true
showDataLabelOutsideBar: true
---
xychart horizontal
accTitle: Styled SVG generation: Styled fixtures ×50 — 3,000 QR codes/sample
accDescr: Throughput calculated from median time. QRCodeSDK 2,630 QR codes per second, qr-code-styling 108 QR codes per second. Higher is better.
title "Styled fixtures ×50 — 3,000 QR codes/sample"
x-axis "Library" ["QRCodeSDK", "qr-code-styling"]
y-axis "QR codes/second" 0 --> 3000
bar [2630, 108]
Exact benchmark data
| Workload | QR codes/sample | Library | Median (ms) | Min–max (ms) | QR codes/second |
|---|---|---|---|---|---|
| Styled fixtures ×1 | 60 | QRCodeSDK v0.0.1 | 25.293 | 23.933–26.665 | 2,372 |
| Styled fixtures ×1 | 60 | qr-code-styling v1.9.2 | 559.173 | 555.872–564.520 | 107 |
| Styled fixtures ×10 | 600 | QRCodeSDK v0.0.1 | 236.470 | 226.530–239.063 | 2,537 |
| Styled fixtures ×10 | 600 | qr-code-styling v1.9.2 | 5576.909 | 5552.169–5581.269 | 108 |
| Styled fixtures ×50 | 3,000 | QRCodeSDK v0.0.1 | 1140.588 | 1137.680–1141.704 | 2,630 |
| Styled fixtures ×50 | 3,000 | qr-code-styling v1.9.2 | 27882.020 | 27877.122–27922.017 | 108 |