Feature Comparison: modern-xlsx vs SheetJS
Exhaustive capability matrix — every feature either library supports, compared side-by-side.
Legend
Meaning
✅
Fully supported
⭐
Supported + superior implementation
🔒
SheetJS Pro only (paid license)
❌
Not supported
🚧
Partial / limited support
modern-xlsx
SheetJS
Categories won
31
5
Ties
2
Total features
310+
175
modern-xlsx wins: Workbook ops, worksheet ops, cell ops, formulas, merge cells, styling (free), frozen panes, data validation, conditional formatting, hyperlinks, comments, named ranges, page setup, sheet protection, document properties, date utilities, number formatting, rich text, images, barcodes, charts, table layout, tables, print layout, validation/repair, web workers, performance, API design, pivot tables (read-only), threaded comments, slicers, timelines, CLI tool, feature-gated WASM
SheetJS wins: Read formats (18 vs 1), write formats (20 vs 1), I/O ops, sheet conversion, streaming
Ties: Cell reference utilities, shared strings
Format
modern-xlsx
SheetJS
Notes
XLSX (Office Open XML)
✅
✅
Both full support
XLSM (Macro-enabled)
❌
✅
Data only, no macros
XLSB (Binary)
❌
✅
XLS (BIFF8/5/4/3/2)
❌
✅
Legacy Excel 97-2003
XLML (SpreadsheetML 2003)
❌
✅
ODS (OpenDocument)
❌
✅
FODS (Flat ODS)
❌
✅
CSV
❌
✅
TSV / TXT
❌
✅
HTML tables
❌
✅
SYLK
❌
✅
DIF
❌
✅
PRN
❌
✅
ETH (EtherCalc)
❌
✅
DBF (dBASE)
❌
✅
WK1/WK3/WKS (Lotus)
❌
✅
QPW (Quattro Pro)
❌
✅
Numbers (Apple)
❌
✅
Requires numbers option
Format
modern-xlsx
SheetJS
Notes
XLSX
⭐
✅
modern-xlsx: 8x smaller output
XLSM
❌
✅
XLSB
❌
✅
XLS (BIFF8/5)
❌
✅
XLS (BIFF4/3/2)
❌
✅
XLML
❌
✅
ODS / FODS
❌
✅
CSV
❌
✅
modern-xlsx: string only via sheetToCsv
HTML
❌
✅
modern-xlsx: string only via sheetToHtml
Others (SYLK, DIF, RTF, etc.)
❌
✅
10+ additional legacy formats
Feature
modern-xlsx
SheetJS
Notes
Read from buffer
✅
✅
Read from file
✅
✅
Read sync
❌
✅
modern-xlsx: async-only (WASM)
Write to buffer
✅
✅
Write to file
✅
✅
Write sync
❌
✅
Write to Blob (browser)
⭐
✅
Native WASM Blob
Parse CFB / ZIP
❌
✅
Custom FS / codepage
❌
✅
WASM init
⭐
❌
Encrypted XLSX read/write
⭐
❌
Agile + Standard encryption
Feature
modern-xlsx
SheetJS
Create / get / add / remove sheets
✅
✅ (no remove)
Sheet visibility
❌
✅
Date system
✅
✅
Workbook views
⭐
🚧
Document properties (15 fields)
⭐
🚧
Serialize to JSON
✅
❌
Validate workbook
⭐
❌
Repair workbook
⭐
❌
Feature
modern-xlsx
SheetJS
Notes
Strings, numbers, booleans
✅
✅
Error values
✅
✅
Date values (native type)
✅
✅
cell.dateValue getter
Stub/empty cells
✅
✅
Type "stub" / "z"
Inline strings
✅
❌
Formula strings (type)
✅
❌
Style index
⭐
🔒
modern-xlsx free
Number format getter
✅
✅
cell.numberFormat
Feature
modern-xlsx
SheetJS
Notes
Style builder (fluent API)
⭐
❌
Font (name, size, bold, italic, color, underline, strike)
⭐
🔒
Free vs paid
Fill (solid, 18 patterns, gradient)
⭐
🔒
Border (4 sides + diagonal, 13 styles, colors)
⭐
🔒
Alignment (H/V, wrap, rotation, indent, shrink)
⭐
🔒
Cell protection (locked/hidden)
⭐
🔒
Number format (custom/built-in)
⭐
✅
Community has per-cell .z
DXF / Cell styles / CellXf / Theme colors
⭐
❌
7. Data Validation & Conditional Formatting
Feature
modern-xlsx
SheetJS
All validation types (list, whole, decimal, date, time, textLength, custom)
⭐
🔒
Input prompts and error alerts
⭐
🔒
Color scales / data bars / icon sets
⭐
🔒
DXF style references / CFVO
⭐
🔒
8. Hyperlinks, Comments, Named Ranges
Feature
modern-xlsx
SheetJS
Add/remove hyperlinks with tooltip
✅
✅ (no tooltip, no remove)
Add/remove comments
✅
✅ (no remove)
Full CRUD named ranges
✅
🚧 (read-only)
9. Page Setup, Protection, Frozen Panes
Feature
modern-xlsx
SheetJS
Notes
Orientation, paper size, fit-to, scale
✅
❌
Page margins
✅
✅
Sheet protection (14 granular fields)
⭐
🚧
Frozen panes
✅
✅
Auto filter + filter columns
⭐
✅
Headers & footers (odd/even/first)
⭐
❌
HeaderFooterBuilder API
Print titles (repeating rows/cols)
✅
🔒
Print areas
✅
🔒
Row/column grouping (outline 0-7)
⭐
🔒
Collapse/expand API
10. Cell Reference & Date Utilities
Feature
modern-xlsx
SheetJS
Column ↔ letter, cell encode/decode, range encode/decode
✅
✅
Encode/decode row, split cell ref
✅
✅
Date ↔ serial, Temporal-like input
⭐
❌
Parse date code
❌
✅
Feature
modern-xlsx
SheetJS
Format cell value
✅
✅
Rich format result (text + color)
⭐
❌
Load custom format / bulk table
✅
✅
Conditional sections
✅
✅
Color codes ([Red], [Color3])
✅
✅
Locale codes ([$-409])
🚧
✅
12. Sheet Conversion Utilities
Feature
modern-xlsx
SheetJS
AoA/JSON → sheet, sheet → JSON/CSV/HTML
✅
✅
Add AoA/JSON to existing sheet
✅
✅
Sheet → TXT
✅
✅
Sheet → formulae
✅
✅
Sheet → row objects (alias)
❌
✅
DOM table → sheet/book
❌
✅
Feature
modern-xlsx
SheetJS
Stream to JSON/CSV/HTML/XLML
❌
✅
WASM streaming reader (SAX)
⭐
❌
Parallel sheet parsing (rayon)
⭐
❌
Feature
modern-xlsx
SheetJS
RichTextBuilder (bold, italic, colored, styled)
⭐
❌
Image embedding (PNG/JPEG/GIF)
⭐
🔒
Charts (create)
⭐ 10 types, ChartBuilder API, trendlines, error bars, 3D, combo
🔒
15. Barcode, Table Layout, Validation
Feature
modern-xlsx
SheetJS
Notes
9 barcode types + PNG renderer + XLSX embed
⭐
❌
Table layout engine (drawTable/drawTableFromData)
⭐
❌
Native Excel Tables (ListObjects)
⭐
🔒
Full CRUD + 60 built-in styles
Workbook validation & repair
⭐
❌
Web Worker support
⭐
❌
Feature
modern-xlsx
SheetJS
Notes
Used range (ws.usedRange)
✅
✅
Tab color (ws.tabColor)
✅
🚧
Dynamic array formulas (SPILL)
✅
✅
cm="1" attribute
Benchmark
modern-xlsx
SheetJS
Ratio
Read 100K rows
faster
baseline
~4.0x
Write 100K batch
faster
baseline
~8.4x
Write 10K cell-by-cell
baseline
faster
~0.7x
Output file size
smaller
baseline
~8x
aoaToSheet 50K rows
faster
baseline
~1.6x
sheetToJson 10K rows
baseline
faster
~0.6x
sheetToCsv 10K rows
tied
tied
~1.0x
Bundle size
~300KB (WASM)
~200KB (JS)
1.5x larger
Zero runtime deps
✅
❌
TypeScript types
120+ types
basic
Multi-threading
rayon flag
❌
Feature
modern-xlsx
SheetJS
Notes
Pivot tables (read-only)
⭐
🔒
Full OOXML parsing
Threaded comments (read + write)
⭐
❌
Modern Excel threads
Slicers (read-only)
⭐
❌
Pivot table filtering
Timelines (read-only)
⭐
❌
Date-based filtering
CLI tool (info/convert)
⭐
❌
npx modern-xlsx
Feature-gated WASM
⭐
❌
Cargo features
Structured error handling
⭐
❌
ModernXlsxError with .code
See the full comparison with 310+ features in __tests__/feature-comparison.test.ts