Download Latest Version v1.1.0 source code.zip (305.6 kB) Google Add to Preferred Sources
Home / v1.1.0
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2026-09-21 7.6 kB
v1.1.0 source code.tar.gz 2026-09-21 278.1 kB
v1.1.0 source code.zip 2026-09-21 305.6 kB
Totals: 3 Items   591.2 kB 0

CSV v1.1.0

Diff since v1.0.0

CSV.jl 1.1.0 release notes

Released September 21, 2026. Requires Julia 1.10 or later.

CSV.Chunks streams windows of the source

CSV.Chunks no longer builds a structural index of the whole source. One batch is now one window of the source's data bytes: the window is indexed when its batch is produced and released with it, so a chunked read holds one window's index instead of the file's. The index of a narrow numeric file is several times the size of the file, so this is the difference between a bounded read and one that cannot start on a file larger than memory.

  • chunkbytes is the target size of that window, in source bytes. It defaults to 64 MiB, or the whole source when it is smaller. A window ends at a row boundary, so one complete row can push a batch past chunkbytes.
  • ntasks bounds the parallel work inside one window. It is not a batch count and no longer affects the batch size.
  • The constructor still validates every row it will yield, before the first batch, to settle one schema: every batch has the same column types, missingness, and settled text width, as in 1.0. That pass stops where limit stops, and its final run walks the same windows iteration walks, so it also counts them. length(chunks) is the batch count and costs no extra pass.
  • Only the structural index is bounded. The source bytes stay in memory for later batches, and each returned batch owns its own bytes.

Batch boundaries therefore differ from 1.0 for the same options. The rows, column types, values, and diagnostics do not.

Fixes

  • Generic ARM64 package precompilation works on Julia 1.13. The quote scanner retains its accelerated PMULL path behind a runtime CPU check, with a shift/XOR fallback. CI checks generic package images and JIT compilation on ARM64 and x86-64 with Julia 1.10 and current Julia.
  • Typed CSV.Rows column access avoids per-row allocations.
  • Floating-point output is quoted when its text conflicts with the delimiter or quote characters, including decimal separators, exponents, and NaN/Inf.
  • A quote that does not start its field makes a reader prepare the source again under the lenient quote rule. That retry now keeps the whole syntax the first pass resolved, including a sniffed ignorerepeated. 1.0 kept only the delimiter, so an aligned-column source such as "a b\n1 2\n3 x\"y\n" gained an empty column between a and b; it now reads as the two columns an explicit delim=' ', ignorerepeated=true always gave.

Merged pull requests:

  • Bump actions/upload-artifact from 4 to 7 (#1201) (@dependabot[bot])
  • Quote floats when their text conflicts with CSV syntax (#1202) (@quinnj)
  • Avoid per-row allocations in typed CSV.Rows access (#1203) (@quinnj)
  • Stream CSV.Chunks over windows of the source (#1204) (@quinnj)
  • Fix generic ARM package compilation and test CPU targets (#1206) (@quinnj)

Closed issues:

  • CSV.write - floats (#492)
  • Read CSV directly from URL (#506)
  • Using select with explicit header names requires all the column names to be specified (#701)
  • strict=true (#739)
  • Adapt multithreaded CSV write from R data.table (#751)
  • Improve performance of writing Time (#800)
  • Feature request: Auto-detect for repeated space delimited file (#853)
  • How can I delete a file after reading its content with CSV.Rows ? (#890)
  • Unable to parse really long CSV cell (breaks Parsers.jl) (#935)
  • CSV.read not working properly with StructArray (#941)
  • Slow CSV writing (#947)
  • Reading multiple CSV files with CSV.read fails when one file is pooled (#954)
  • Issue when reading file by chunks (#959)
  • Reading CSV hangs when Soss is loaded (#969)
  • First call of CSV.File very slow (#974)
  • PooledVectors for isbitstypes of small size? (#982)
  • Kernel dies sometimes when benchmark CSV.File() with 4 threads on Windows (#984)
  • Failed to precompile CSV (#987)
  • option to specify alternative location for mktemp (#988)
  • Select behaviour with normalizenames (#990)
  • Installing on Mac M1 Pro - hanging (#995)
  • Improve error message when IO source exhausted (#1000)
  • Undefined result when parsing tsv containing double quotes inside a field (#1002)
  • Numbers not detected with stripwhitespace (#1008)
  • Consider removing deprecated kwargs (#1011)
  • Can't skip rows with quote (#1012)
  • Bug when parsing complex CSV with multi-threading enabled (#1019)
  • CSV.read multithreadpostparse: erroring (#1029)
  • Confusing error message when failing to parse date (#1032)
  • CSV precompile error (#1044)
  • Error parsing compressed file multi-thread (#1054)
  • TaskFailedException on joins (#1055)
  • Large csv file crashes Julia with a status access violation (#1059)
  • Emit warning on nonsensical argument combinations to write (#1062)
  • Multiprocessing crash (#1063)
  • CSV.read error with limit on multiple threads (#1064)
  • UndefVarError: writeshortest not defined (#1067)
  • Parsing based on first row when select, header and skipto are provided (#1068)
  • CSV.io is not defined (#1070)
  • CSV.File breaks with multiple input CSVs (#1071)
  • Reading large CSV files is slow/crashes (#1074)
  • Performance regression since v0.8.0 (#1075)
  • stripwhitespace=true not removing trailing white space? (#1076)
  • skipto breaks if there is a quote in the skipped rows (#1079)
  • big integers are parsed as Float64 (#1082)
  • writeheader=true ineffective in combination with header= (#1085)
  • CSV.write should conditionally convert type unstable iterators (#1087)
  • pool kwarg documentation (#1090)
  • burntsushi's issue (#1092)
  • Error reading CSV - missing lines (#1096)
  • Formatting issues in examples (#1104)
  • Cannot compile this package on Julia 1.9.1 in Ubuntu 22.04 container (#1105)
  • CSV.write somehow cannot write file with name con.csv in Windows?! (#1111)
  • Segfault on Julia 1.9 on Intel Sapphire Rapids during precompilation (#1113)
  • bufsize of write is defined to be length of row but actually cells (#1114)
  • Formatting broken on Examples page in documentation (#1116)
  • Error on CSV.read attempt (#1118)
  • CSV is failing PkgEval (#1129)
  • Error when combining single row with multiple row CSV file into a DataFrame with pooling on. (#1130)
  • 1.12.0-DEV.317 ERROR: LoadError: TypeError: in typeassert, expected Tuple{Vector{UInt8}, Int64, Int64, Union{Nothing, String}}, got a value of type Tuple{Memory{UInt8}, Int64, Int64, Nothing} (#1135)
  • Error when passing as source a vector with fewer unique elements than files. (#1136)
  • CSV.write() with append=true allocating a lot of memory (#1138)
  • Cannot round-trip a file (read, write, read) in some circumstances (#1140)
  • Segfault when reading into dataframe with a transpose (#1141)
  • CSV.jl fails to parse a file that DuckDB is fine with (#1143)
  • ERROR: UndefVarError: A not defined in local scope (#1145)
  • source column-name missing when the input vector contains only one csv-file (#1146)
  • Not quoting strings automatically when required (#1153)
  • read fallback to ntasks=1 not always working (#1157)
  • Determine delimiter detection by number of occurrences first (#1159)
  • Linecount for limit and double-quotes (#1160)
  • Bug: spurious integer overflow (#1161)
  • Map cells (#1163)
  • memhash is to be deleted in 1.13 (#1164)
  • Unexpected behavior writing to existing IOStream (#1168)
  • Inconsistent escaping (#1169)
  • CSV.jl "corrupts" data when a field is very large (#1171)
  • CSV 1.0 cannot be precompiled under a generic aarch64 CPU target on Julia 1.13 (#1205)
Source: README.md, updated 2026-09-21