| excel-bridge | 12.9 KB | |
|---|---|---|
| SheetJS | 95.8 KB | |
| ExcelJS | 272.1 KB |
Ships at 12.9 KB.
Read and write styled .xlsx in the browser and Node.js. The excel-bridge writer adds 12.9 KB to your bundle, where SheetJS adds 95.8 KB and ExcelJS 272.1 KB.
min+gzip · esbuild 0.28.2 · measured 2026-10-08 · method
Pack a workbook
Edit any cell, then print the label. The page builds a real .xlsx with the live library and hands you the file: open it in your spreadsheet app to check the styling, formulas, color scale, filter dropdowns and link.
Edit the sheet, then print. The label carries the real file's name, weight and contents.
Receive a parcel
Drop any .xlsx on the dock and excel-bridge unpacks it in your browser: values, cell types, formulas, styles, filters and links. Nothing is uploaded to a server.
Drop an .xlsx on the dock
or browse your files · step 2 of 2
Print a label above first, then read the same file straight back, all client-side.
Pay only for what you import
Bundlers keep the exports you import and drop the rest. Each entry point is weighed on its own.
| Import | Weight | Relative weight |
|---|---|---|
createExcelWorkbookStream | 12.3 KB | |
ExcelWriter | 12.9 KB | |
ExcelReader | 28.7 KB | |
Workbookreader + writer | 41.0 KB | |
ExcelBridgeconvenience object | 41.1 KB | |
| Everything | 43.7 KB | |
SheetJS utils + writexlsx 0.18.5 on npm | 95.8 KB | |
| ExcelJS 4.4.0default browser build | 272.1 KB |
Measured 2026-10-08 on excel-bridge 1.6.0: each row bundles a one-line export { … } entry with esbuild 0.28.2 (--bundle --minify --platform=browser --format=esm) and gzips it with Node's zlib; 1 KB = 1,000 bytes. Reproduce with pnpm run size.
| No. | Description of contents | Qty | Net weight |
|---|---|---|---|
| 1 | Read & writeStyling, fonts, per-side borders, formulas, dates, merged cells, freeze panes, row heights, conditional formatting, data validation, autofilters and hyperlinks, parsed back by the reader. | 12 | 12.9 KB write 28.7 KB read |
| 2 | Runtime dependenciesfflate and fast-xml-parser. No ExcelJS or SheetJS inside. | 2 | — |
| 3 | RuntimesFile/Blob in the browser, Uint8Array in Node.js, one API. | 2 | — |
| 4 | Streaming writerMillion-row exports from a sync or async iterable, never held whole in memory. | 1M rows | 12.3 KB |
| 5 | Workbook APILoad a workbook this library wrote, edit cells, styles, merges, freeze panes, filters and links, then save it back. Content it does not model is dropped. | 1 class | 41.0 KB |
| 6 | TypeScript typesIntelliSense for every export, in both ESM and CJS builds. | all exports | 0 KB at runtime |
| 7 | Signed releasesEvery version is published to npm with build provenance. | every release | — |
Net weight is the min+gzip cost of the matching import from the itemized manifest; types are erased at build time.
How it compares
The same common case, styled multi-sheet reports read and written from typed data, while staying small enough for a front-end bundle.
| Capability | excel-bridge | ExcelJS | SheetJS (community) |
|---|
¹ Min+gzip of what a browser bundle needs to write an .xlsx: ExcelWriter, ExcelJS's default browser build (not tree-shakeable), and SheetJS utils + write from npm xlsx@0.18.5. Bundled with esbuild 0.28.2 and gzipped on 2026-10-08; reproduce with pnpm run size. Reading adds the XML parser: ExcelReader is 28.7 KB and the whole library 43.7 KB. Bundlephobia measures whole packages with its own toolchain: excel-bridge · exceljs · xlsx.
Transit times
| Library | Write time | Relative write time | Output | vs excel-bridge |
|---|---|---|---|---|
| excel-bridge | 560 ms | 2.41 MiB | 1× | |
| exceljs | 1490 ms | 2.82 MiB | 2.7× | |
| xlsx / SheetJS | 510 ms | 18.23 MiB | 0.9× |
Writing 50,000 rows × 10 columns, median of 5 runs (Node 24.19, Apple M4). Numbers vary by machine; reproduce them with pnpm run bench. SheetJS is fast to write but its default output is far larger.
Packing instructions
Typed from the first import. These are the calls behind the demo above.