csv-pipe
v2.1.0
Published
A small, fast, zero-dependency CSV encoder and parser for TypeScript and JavaScript. It converts between arrays of objects and RFC 4180-compliant CSV, with typed streaming in both directions, and runs in Node, browsers, Deno, Bun, and edge runtimes.
Maintainers
Readme
csv-pipe
A small, fast, zero-dependency CSV encoder and parser for TypeScript and JavaScript. It converts between arrays of objects and RFC 4180-compliant CSV, with typed streaming in both directions, and runs in Node, browsers, Deno, Bun, and edge runtimes.
Documentation · Guide · API · Benchmarks · Conformance
Install
npm install csv-pipeUsage
Encode an array of objects into CSV:
import { stringify } from 'csv-pipe';
stringify([
{ name: 'Alex Johnson', email: '[email protected]', age: 29 },
{ name: 'Carlos Herrera', email: '[email protected]', age: 24 }
]);
// name,email,age
// Alex Johnson,[email protected],29
// Carlos Herrera,[email protected],24And parse it back into typed records:
import { parse } from 'csv-pipe';
type User = { name: string; email: string; age: number };
parse<User>('name,email,age\nAlex Johnson,[email protected],29');
// [{ name: 'Alex Johnson', email: '[email protected]', age: '29' }]The header comes from the record keys, quoting and escaping are correct out of the box, and both directions stream and run in every runtime.
Why csv-pipe
- Typed columns. Column names are checked against your data, so a typo is a compile error, not a broken export found in production.
- Encodes and parses.
stringifyandparseare mirror images, both typed and streaming, so encoding then parsing round-trips your rows, with dynamic typing to recover numbers and booleans. - Runs where your code runs. The core imports no
fsand no DOM, and streaming returns a WebReadableStream. One import for Node, the browser, Deno, Bun, and edge. - Flat memory. Parsing streams one record at a time, and encoding does too once the columns are declared, so a file or an HTTP body of any size stays at flat memory.
- Safe by a flag.
sanitizeFormulasneutralizes spreadsheet formula injection, so you never hand-sanitize cells. - Fast and small. The fastest common parser by a wide margin, and the fastest or on-par encoder, across every benchmark, at about 2 kB per direction with zero dependencies.
Documentation
The full documentation is at martsinlabs.github.io/csv-pipe:
- Getting started, Why csv-pipe, Comparison, and Migration
- Encoding: columns, formatting, streaming, and options
- Parsing: overview, columns, typing and validation, streaming and files, and options
- TypeScript, error handling, and security
- Benchmarks, Conformance, and the API reference
Contributing
Contributions are welcome. See CONTRIBUTING for setup and conventions, CODE_OF_CONDUCT for community standards, and SECURITY for reporting vulnerabilities.
License
MIT © Martsin Labs
