NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #2330 most downloaded on npm
CSV parsing implementing the Node.js `stream.Transform` API
Last release 1 months ago
02 Aug 2026
Release timing varies
gaps range from 2 weeks to 8 months
Nearly every release is documented
notes for 55 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
149 releases · first in 2013
ts: fix types declaration to a single file
types declaration to a single fileerrors: handle undefined captureStackTrace
errors: handle undefined captureStackTracerelax_column_count: ts definitions for less and more
relax_column_count: ts definitions for less and moreOne column per quarter.
package: move pad dependency to dev
relax_column_count: new less and more options
relax_column_count: new less and more optionsCSV_INCONSISTENT_RECORD_LENGTHCSV_RECORD_DONT_MATCH_COLUMNS_LENGTHon_record: user function to alter and filter records
New Feature:
on_record: user function to alter and filter recordsMinor improvements:
from_line: honours inferred column namesfrom_line: new sampleCSV_INVALID_ARGUMENTCSV_INVALID_COLUMN_DEFINITIONCSV_OPTION_COLUMNS_MISSING_NAMECSV_INVALID_OPTION_BOMCSV_INVALID_OPTION_CASTCSV_INVALID_OPTION_CAST_DATECSV_INVALID_OPTION_COLUMNSCSV_INVALID_OPTION_COMMENTCSV_INVALID_OPTION_DELIMITERProject management:
context: column is null when cast force the context creation, fix #260
errors: don't stringify/parse undefined and null values
CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTECSV_MAX_RECORD_SIZE- lint: integrate eslint
context: null column when columns number inferior to record length
- src: set const in for loop
skip_lines_with_empty_values: handle non string value
skip_lines_with_empty_values: handle non string valueINVALID_OPENING_QUOTEerrors: start normalizing errors with unique codes and context
CSV_INVALID_CLOSING_QUOTECSV_QUOTE_NOT_CLOSEDCSV_INVALID_RECORD_LENGTH_DONT_PREVIOUS_RECORDSCSV_INVALID_RECORD_LENGTH_DONT_MATCH_COLUMNSCSV_INVALID_COLUMN_MAPPINGtravis: remove node.js 8 and add 12
security: remove regexp vulnerable to DOS in cast option, npm report 69742
ts: add buffer as allowed type for input, fix #248
package: remove deprecated @types/should dependency
@types/should dependency- package: fix files declaration
bom: parsing for BOM character #239
bom: parsing for BOM character #239columns: allows returning an array of string, undefined, null or false
Fix:
columns: allows returning an array of string, undefined, null or falseNew features: - options: new bom option
New features:
bom optioncolumns: enrich error message when provided as literal object
columns: enrich error message when provided as literal objectcast: handle undefined columnsskip_lines_with_error: new sampleFix: columns: fix es5 generation
Fix: columns: fix es5 generation
Fix: - columns: immutable option
Fix:
ts: distribute definitions with es5
Minor enhancements:
Project management:
to_line: validation refinements
New features:
objname: accept a bufferMinor enhancements:
to_line: validation refinementstrim, ltrim, rtrim: validation refinementsto: validation refinementsfrom_line: validation refinementsobjname: validation refinementsfrom: validation refinementsescape: validation refinementsskip_empty_lines: validation refinementsskip_lines_with_empty_values: validation refinementsskip_lines_with_error: validation refinementsrelax_column_count: validation refinementsrelax: validation refinementsdelimiter: validation refinementsmax_record_size: validation refinementsrecord_delimiter: fix multi bytes with skip_empty_lines and from_line
Fix:
record_delimiter: fix multi bytes with skip_empty_lines and from_linertrim: accept taboptions: accept snake case and camel case
New features:
cast: dont call cast for non column-mappable fieldsFix:
cast: ensure column is a string and not an arraycast: function may return non-string valuesrelax_column_count: handle records with more columns
Fix:
relax_column_count: handle records with more columnsThis is a complete rewrite based with a Buffer implementation. There are no major breaking changes but it introduces multiple minor breaking changes:
This is a complete rewrite based with a Buffer implementation. There are no major breaking changes but it introduces multiple minor breaking changes:
rowDelimiter is now record_delimitermax_limit_on_data_read is now max_record_size{error type}: {error description}info objectcount is now info.recordslines is now info.linesempty_line_count is now info.empty_linesskipped_line_count is now info.invalid_field_lengthcontext.count is cast function is now context.recordsauto_parse and auto_parse_daterecord eventraw option, the row property is renamed recordmax_record_size is now 0 (unlimited)record event, use the readable event and this.read() insteadNew features:
info, from_line and to_linetrim: respect ltrim and rtrim when defineddelimiter: may be a Bufferdelimiter: handle multiple bytes/characterscast: catch error in user functionscomment_lines: count the number of commented lines with no recordsAPI management:
max_limit_on_data_read: update error msg
max_limit_on_data_read: update error msgrowDelimiter: fix overlap with delimiter
rowDelimiter: fix overlap with delimiterrowDelimiterMaxLengthreadme: fix links to project website
- src: generate code
- package: move to csv.js.org - samples: new cast sample - package: upgrade to babel 7 - samples: new mixed api samples - samples: new column script -
columns: skip empty values when null, false or undefined
Breaking changes:
columns: skip empty values when null, false or undefinedCleanup:
typescript: make definition header more relevant
to: ignore future records when to is reached
to: ignore future records when to is reachedtests: compatibility with Node.js 10
trim: after and before quotetrim: handle quote followed by escapeauto_parse: deprecated message on tests
cast: pass the header propertyauto_parse: deprecated message on testscast: inject lines propertyauto_parse: function get context as second argument
cast: deprecate auto_parseauto_parse: function get context as second argumentskip_lines_with_error: DRYed implementation
skip_lines_with_error: DRYed implementationskip_lines_with_error: Go process the next line on errorpackage: move babel to dev dependencies
package: es5 backward compatibility
package: only remove js files in lib
This major version use CoffeeScript 2 which produces a modern JavaScript syntax (ES6, or ES2015 and later) and break the compatibility with versions o
This major version use CoffeeScript 2 which produces a modern JavaScript syntax (ES6, or ES2015 and later) and break the compatibility with versions of Node.js lower than 7.6 as well as the browsers. It is however stable in term of API.
package: revert to CoffeeScript 1
Irrelevant release, forgot to generate the coffee files.
Irrelevant release, forgot to generate the coffee files.
package: preserve compatibility with Node.js < 7.6
options: auto_parse as a user function
auto_parse as a user functionauto_parse_date as a user functionrelax_column_count: honors count while preserving skipped_line_count
relax_column_count: honors count while preserving skipped_line_count- sync: catch err on write
- relax: handle double quote
src: group state variable initialisation
skip default row delimiters when quoted #58
auto_parse: cleaner implementationoptions: new to and from options
rowDelimiters: fix all last month issues
rowDelimiters: fix all last month issuesregression with trim and last empty field #123
fix regression when trim and skip_empty_lines activated #122
rowDelimiter: simplificationauto_parse = simplify internal functionsrc: trailing whitespace and empty headers #120
rowDelimiter: adding support for multiple row delimiters #119Parser.prototype.__write #114Your coding agent can read these notes before it upgrades. Set up the MCP server →