XLSX Benchmarks & Evidence
This page exists for one reason: CmdCal XLSX should be judged with evidence, not category claims.
The numbers below come from the in-repo benchmark and teardown work already captured during the XLSX buildout. They are useful for directionally comparing package shape, local generation speed, and current limits.
They are not a claim that every environment, dataset, or spreadsheet app will behave identically.
Benchmark Environment
- Date:
2026-03-27 - Node.js:
v22.22.1 - Platform:
darwin arm64 - Python:
3.13.5
Small Package Comparison
This run used one Revenue sheet with 5 rows and mixed strings, numbers, and dates.
| Metric | ExcelJS Buffer | ExcelJS Stream | SheetJS | openpyxl | CmdCal |
|---|---|---|---|---|---|
| File size (bytes) | 6640 | 6529 | 16791 | 5083 | 5264 |
| ZIP entry count | 10 | 10 | 10 | 9 | 10 |
styles.xml size | 1624 | 1624 | 1199 | 2711 | 609 |
| String cell encoding | shared strings | shared strings | raw string | inline string | shared strings |
What this shows:
- CmdCal was already competitive on package size in this run
- the generated stylesheet was materially smaller than the other JS libraries in this comparison
- shared strings stayed enabled without inflating the package shape
Large Workbook Smoke Benchmarks
These runs come from the in-package benchmark harness and are best read as local generation evidence, not a final CI reference baseline.
| Dataset | p50 | p95 | max | rows/sec (p95) | cells/sec (p95) | file size |
|---|---|---|---|---|---|---|
large-10k | 330 ms | 340 ms | 340 ms | 29,435 | 588,703 | 845,255 bytes |
large-50k | 1,789 ms | 1,820 ms | 1,820 ms | 27,466 | 549,325 | 4,233,213 bytes |
large-100k | 1,965 ms | 1,979 ms | 1,979 ms | 50,527 | 505,272 | 4,515,979 bytes |
Styled Workload Snapshot
The styled benchmark matrix is intentionally stricter, and some targets are still above goal.
Current local highlights:
- styled
10K×20generation: about937.2ms - styled
50K×20generation: about5055.9ms - column-width computation on
50Krows: about173.1ms
This is useful because it shows where the real remaining local performance work lives:
- styled serialization overhead
styles.xmlsize efficiency- width computation cost
What This Evidence Does Prove
- CmdCal XLSX is not a toy serializer
- package shape is already competitive on representative local runs
- the engine has real benchmarking, preflight, planning, and render-metrics surfaces
- large deterministic workbook generation is already practical
What This Evidence Does Not Yet Prove
- final desktop-app compatibility across every target viewer
- public
renderStream(...)performance, because that surface is not public yet - full styled benchmark target attainment across the entire Phase 2 matrix
Current Validation Gaps
These are still blocked on real target apps or dedicated environments:
- Excel for Windows verification
- Excel for Mac verification
- Google Sheets import verification
- Apple Numbers verification
- LibreOffice round-trip verification on a machine with a working app bundle
How To Reproduce The Shape Of This Evidence
- Want runnable sample files: XLSX Examples & Downloads
- Want the comparison angle: CmdCal XLSX vs ExcelJS
- Want the planning APIs behind these numbers: Templates & Large Workbooks