Lokad.Parquet
0.1.0
Prefix Reserved
dotnet add package Lokad.Parquet --version 0.1.0
NuGet\Install-Package Lokad.Parquet -Version 0.1.0
<PackageReference Include="Lokad.Parquet" Version="0.1.0" />
<PackageVersion Include="Lokad.Parquet" Version="0.1.0" />
<PackageReference Include="Lokad.Parquet" />
paket add Lokad.Parquet --version 0.1.0
#r "nuget: Lokad.Parquet, 0.1.0"
#:package Lokad.Parquet@0.1.0
#addin nuget:?package=Lokad.Parquet&version=0.1.0
#tool nuget:?package=Lokad.Parquet&version=0.1.0
Lokad.Parquet
Lokad.Parquet is an in-development, high-performance, read-only Parquet library for
.NET 10, designed for analytics workloads and a small dependency footprint.
The shipped reader is restricted to memory-safe managed C#: it has no unsafe
blocks, pinning, native interop, or APIs that bypass runtime memory safety.
The Core 0.1 surface includes bounded random-access input, immutable footer
metadata, projected asynchronous scans, row-group/range selection, and
disposable aligned column batches. It reads flat required or optional columns
of every Parquet physical type except INT96, using Data Page V1/V2, PLAIN or
dictionary encoding, and UNCOMPRESSED or SNAPPY payloads. Nested/repeated
schemas and other codecs remain intentionally unsupported; SPEC.md
is the exact support contract.
The primary scan API uses descriptors resolved once from immutable metadata:
await using var file = await ParquetFile.OpenAsync("data.parquet");
var columns = new[]
{
file.Metadata.Schema.GetColumn("quantity"),
file.Metadata.Schema.Columns[3],
};
await foreach (var batch in file.ScanAsync(new ParquetScanOptions(columns)))
{
using (batch)
{
// Consume row-aligned physical column buffers.
}
}
One ParquetFile permits one active scan. Dispose each current batch before
advancing; its memory views become invalid at disposal. Disposing the file ends
an active enumerator, while an already-yielded batch remains valid until that
batch is separately disposed.
In-memory content can be opened directly without wrapping or copying the whole input. If the memory has a separately disposable backing owner, the caller must keep that owner alive; the bytes must remain unchanged until the file is disposed:
ReadOnlyMemory<byte> content = GetParquetContent();
await using var file = await ParquetFile.OpenAsync(content);
Custom range sources fill an ArraySegment<byte> and can therefore bridge
managed array-plus-offset storage APIs without unsafe memory access. Streams
and custom sources remain caller-owned unless ownership is explicitly
transferred with ParquetSourceOwnership.ParquetFile.
Repository layout
src/Lokad.Parquet: the dependency-free library and future NuGet package.tests/Lokad.Parquet.Tests: the xUnit test project.bench/Lokad.Parquet.Benchmarks: the Release-only BenchmarkDotNet project.assets: source artwork for the NuGet icon.artifacts/nuget: generated packages (ignored by Git).
Build and test
The .NET 10 SDK is required.
dotnet restore Lokad.Parquet.slnx --tl:off -v minimal
./test.ps1
Package
Packages are intentionally restricted to Release builds and are emitted to
artifacts/nuget:
./pack.ps1
Benchmarks
Benchmark execution is restricted to Release builds:
./bench.ps1
The harness restricts each benchmark process to one logical processor. Linux
measurements must be built, run, and written on a native Linux filesystem, not
on a Windows-backed WSL path such as /mnt/c; see BENCHMARKS.md.
License
Lokad.Parquet is licensed under the MIT License.
| 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 | 120 | 9/2/2026 |
See https://github.com/Lokad/Parquet/blob/master/CHANGELOG.md for release notes.