CsvToolkit.Core
0.1.0
dotnet add package CsvToolkit.Core --version 0.1.0
NuGet\Install-Package CsvToolkit.Core -Version 0.1.0
<PackageReference Include="CsvToolkit.Core" Version="0.1.0" />
<PackageVersion Include="CsvToolkit.Core" Version="0.1.0" />
<PackageReference Include="CsvToolkit.Core" />
paket add CsvToolkit.Core --version 0.1.0
#r "nuget: CsvToolkit.Core, 0.1.0"
#:package CsvToolkit.Core@0.1.0
#addin nuget:?package=CsvToolkit.Core&version=0.1.0
#tool nuget:?package=CsvToolkit.Core&version=0.1.0
CsvToolkit.Core
<p align="center"> <img src="docs/assets/csvtoolkit-logo-dark.svg" alt="CsvToolkit.Core logo" width="760" /> </p>
CsvToolkit.Core is a high-performance CSV library for net10.0 focused on streaming and low allocations with Span<T>, Memory<T>, and ArrayPool<T>.
NuGet
Package name on NuGet.org: CsvToolkit.Core
dotnet add package CsvToolkit.Core --prerelease
Public API Overview
var options = new CsvOptions
{
Delimiter = ',',
HasHeader = true,
Quote = '"',
Escape = '"',
TrimOptions = CsvTrimOptions.Trim,
DetectColumnCount = true,
ReadMode = CsvReadMode.Strict,
CultureInfo = CultureInfo.InvariantCulture
};
using var reader = new CsvReader(streamOrTextReader, options);
using var writer = new CsvWriter(streamOrTextWriter, options);
// Row/field iteration
while (reader.TryReadRow(out var row))
{
ReadOnlySpan<char> field = row.GetFieldSpan(0);
string materialized = row.GetFieldString(1);
}
// Dictionary / dynamic
if (reader.TryReadDictionary(out var dict)) { /* header -> value */ }
if (reader.TryReadDynamic(out dynamic dyn)) { /* ExpandoObject */ }
// Strongly typed POCO
while (reader.TryReadRecord<MyRow>(out var record)) { }
writer.WriteHeader<MyRow>();
writer.WriteRecord(new MyRow());
// Async
await reader.ReadAsync();
await writer.WriteRecordAsync(new MyRow());
Features
- Read from
TextReaderand UTF-8Stream - Write to
TextWriterand UTF-8Stream - Streaming row-by-row parser (no full-file load)
- Quoted fields, escaped quotes, delimiters inside quotes, CRLF/LF handling
- Header support, delimiter/quote/escape/newline configuration
- Trim options and strict/lenient error handling with callback context
- Field access as
ReadOnlySpan<char>/ReadOnlyMemory<char> - POCO mapping with:
- Attributes:
[CsvColumn],[CsvIndex],[CsvIgnore] - Fluent mapping:
CsvMapRegistry.Register<T>(...)
- Attributes:
- Type conversion:
- primitives, enums, nullable,
DateTime,DateOnly,TimeOnly,Guid - culture-aware parsing/formatting
- custom converters (
ICsvTypeConverter<T>)
- primitives, enums, nullable,
- Async read/write entry points
Examples
Read POCOs
using var reader = new CsvReader(new StreamReader("people.csv"));
while (reader.TryReadRecord<Person>(out var person))
{
Console.WriteLine(person.Name);
}
Write POCOs
using var writer = new CsvWriter(File.Create("people.csv"), new CsvOptions { NewLine = "\n" });
writer.WriteHeader<Person>();
foreach (var person in people)
{
writer.WriteRecord(person);
}
Read Without String Allocations
while (reader.TryReadRow(out var row))
{
ReadOnlySpan<char> id = row.GetFieldSpan(0);
// parse directly from span
}
Fluent Mapping
var maps = new CsvMapRegistry();
maps.Register<Person>(map =>
{
map.Map(x => x.Id).Name("person_id");
map.Map(x => x.Name).Name("full_name");
});
Benchmarks
Benchmarks compare CsvToolkit.Core with CsvHelper for:
- Typed read (
100krows) - Dictionary/dynamic read
- Typed write
- Semicolon + high quoting parse
Performance design notes:
Run all benchmarks non-interactively:
dotnet run -c Release --project benchmarks/CsvToolkit.Benchmarks -- --filter "*"
Run one benchmark (faster while iterating):
dotnet run -c Release --project benchmarks/CsvToolkit.Benchmarks -- --filter "*CsvReadWriteBenchmarks.CsvToolkitCore_ReadTyped_Stream*"
Run from IDE:
- Project:
benchmarks/CsvToolkit.Benchmarks - Configuration:
Release - Program arguments:
--filter "*"
If you run without --filter, BenchmarkDotNet enters interactive selection mode and waits for input.
Benchmark dataset generation is deterministic (Random seed-based) inside benchmark setup.
Latest Results
Run date: 2026-02-10
Machine: Apple M3 Pro
Runtime: .NET 10.0.0
Command: dotnet run -c Release --project benchmarks/CsvToolkit.Benchmarks -- --filter "*CsvReadWriteBenchmarks*"
| Method | RowCount | Mean | Error | StdDev | Ratio | Gen0 | Gen1 | Gen2 | Allocated | Alloc Ratio |
|---|---|---|---|---|---|---|---|---|---|---|
| CsvToolkitCore_WriteTyped_Stream | 100000 | 20.76 ms | 0.110 ms | 0.098 ms | 0.42 | 1593.7500 | 406.2500 | 343.7500 | 25.97 MB | 1.35 |
| CsvHelper_WriteTyped_Stream | 100000 | 24.16 ms | 0.135 ms | 0.120 ms | 0.48 | 3281.2500 | 656.2500 | 343.7500 | 39.4 MB | 2.05 |
| CsvToolkitCore_ReadDictionary_Stream | 100000 | 26.78 ms | 0.060 ms | 0.050 ms | 0.54 | 6593.7500 | - | - | 52.64 MB | 2.74 |
| CsvHelper_ReadDynamic_Stream | 100000 | 43.98 ms | 0.238 ms | 0.186 ms | 0.88 | 9916.6667 | 250.0000 | - | 79.41 MB | 4.14 |
| CsvHelper_ReadTyped_Stream | 100000 | 45.86 ms | 0.318 ms | 0.298 ms | 0.92 | 4545.4545 | 181.8182 | - | 36.72 MB | 1.91 |
| CsvToolkitCore_ReadTyped_SemicolonHighQuote | 100000 | 48.81 ms | 0.121 ms | 0.107 ms | 0.98 | 2400.0000 | - | - | 19.2 MB | 1.00 |
| CsvHelper_ReadTyped_SemicolonHighQuote | 100000 | 49.88 ms | 0.187 ms | 0.166 ms | 1.00 | 4545.4545 | 181.8182 | - | 36.72 MB | 1.91 |
| CsvToolkitCore_ReadTyped_Stream | 100000 | 49.90 ms | 0.206 ms | 0.183 ms | 1.00 | 2400.0000 | - | - | 19.2 MB | 1.00 |
Raw benchmark artifacts:
BenchmarkDotNet.Artifacts/results/CsvToolkit.Benchmarks.CsvReadWriteBenchmarks-report-github.mdBenchmarkDotNet.Artifacts/results/CsvToolkit.Benchmarks.CsvReadWriteBenchmarks-report.csv
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.0 | 26 | 2/11/2026 |
| 0.1.0-beta.4 | 49 | 2/10/2026 |
| 0.1.0-beta.3 | 30 | 2/10/2026 |