Spreadsheets, CSV & Excel
Reading, writing, and editing tabular data in browsers and Node.
CSV
- ★ PapaParse — browser + Node CSV parser. Streaming, web-worker-friendly, the default.
- csv-parse / csv-stringify — Node, mature, streaming.
@fast-csv/parse— fast, ergonomic.- csv (npm) — the umbrella package.
- d3-dsv — small, what D3 uses internally.
Excel (XLSX)
- ★ ExcelJS — read / write
.xlsxwith formatting, formulas, images, charts. The default for new Node projects. - ★ SheetJS (
xlsx) — read / write nearly every spreadsheet format ever (XLSX, XLS, ODS, CSV, etc.). The Pro version is paid; community version is fine for most uses. - node-xlsx — minimal wrapper around SheetJS.
@e965/xlsx— community fork of older SheetJS.
OpenDocument / Numbers / Google Sheets
- SheetJS — handles ODS in addition to XLSX.
googleapis+ Google Sheets API — read/write Google Sheets directly.- node-google-spreadsheet — friendlier wrapper around the Sheets API.
In-browser spreadsheet UIs
- ★ Univer — full open-source spreadsheet engine (Excel-compatible formulas, multi-sheet, collaborative). The biggest in this space in 2026.
- Handsontable — spreadsheet UI; non-commercial license is free, commercial paid.
- Glide Data Grid — canvas-rendered grid that scales to millions of cells.
- luckysheet — open-source spreadsheet UI.
- x-spreadsheet — older, still works.
- See also Tables.
Formula engines
- HyperFormula — JS formula engine; pluggable into any UI; commercial license required for commercial use.
- formula-parser — small alternative.
- mathjs — for math-heavy work, not a full spreadsheet formula engine.
Importing user CSV reliably
A common pattern for "user uploads a CSV and we ingest it":
- PapaParse in a Web Worker for parsing.
- Zod or Valibot schemas to validate each row.
- Show preview / mapping UI (column → field).
- Drizzle / Prisma batch insert in chunks of 500–5000.
- Surface row-level errors with line numbers.
Drop-in CSV import UIs
react-papaparse— file upload + parse with React.tableflow-importer-react— TableFlow's open source import widget.- OneSchema, Flatfile — paid hosted CSV-import services with polished UIs.
@evidence-dev/import— newer OSS importer.
Pick this if…
- Default CSV: PapaParse.
- Default Excel write: ExcelJS.
- Maximum format coverage: SheetJS.
- Spreadsheet UI in your app: Univer.
- User-uploaded CSV with mapping: TableFlow or roll your own with PapaParse + Zod.
- Google Sheets integration:
node-google-spreadsheet.