CSV.jl 1.0 release notes
CSV.jl 1.0 replaces the parsing and writing internals while keeping the main CSV.jl entry points. It requires Julia 1.10 or later.
Highlights
- A quote-aware structural index separates row and field discovery from typed value parsing. The same index drives eager files, row views, lazy access, and batches.
CSV.lazyreturns an indexed table that parses cells only when they are accessed.CSV.File(lazyfile)reuses the existing index.- Inferred text uses
DataStrings.DataStringby default. Short text is stored in the value; longer text lives in column-owned buffers, so eager tables never refer to the source or to a mapped file. - Typed value parsing uses the low-level parsers of Parsers, now even faster in version 3.
- Parse recovery produces structured
CSV.problems(file)data.on_errorselects one summary warning (:warn, the default), silent collection (:collect), or fail-fastCSV.ParseError(:error). CSV.Chunksuses one stable schema for its complete row window.- A
Tables.Scanprojection, filter, type request, offset, and limit go into the parser. - The writer has deterministic parallel output, explicit quote styles, Printf-style floating-point formatting, bounded row-block memory, gzip suffix detection, parallel gzip compression (one member per row block), and parallel partition output.
- String conversion (
stringtype=String,types=String, InlineStrings),CSV.Chunksbatch parsing, and gzip output run in parallel. Files withcommentrows,skipto, andfooterskipuse the vector scanner, and so do files with a separateescapecharor distinctopenquotecharandclosequotechar.CSV.Rowscarries its schema in its type, sorow.nameon a typed column returns a typed value without allocation. Transposed reads parse each row as a typed column. Several sources concatenate text asDataStringcolumns.
Compatibility changes
The most important default changes are:
- Julia 1.10 is the minimum runtime;
DataStrings.DataStringreplaces InlineStrings.jl as the default text type;- pooling is off unless requested;
- an unquoted empty field is always
missing; true,True,TRUE,false,False, andFALSEare the default Boolean spellings;- a date-time column is a
Timestamp{Nanosecond}(Durations.jl) instead of aDates.DateTime, ISO date-times acceptTor a space, and no fraction digit is truncated; and - parse problems are retained as problem objects, with one summary warning per read instead of one warning per problem.
See Migrating from 0.10 to 1.0 for option mappings, writer compatibility, source-memory behavior, and upgrade examples.