Polars.NET.Core 0.2.1-beta1

This is a prerelease version of Polars.NET.Core.
There is a newer version of this package available.
See the version list below for details.
dotnet add package Polars.NET.Core --version 0.2.1-beta1
                    
NuGet\Install-Package Polars.NET.Core -Version 0.2.1-beta1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Polars.NET.Core" Version="0.2.1-beta1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Polars.NET.Core" Version="0.2.1-beta1" />
                    
Directory.Packages.props
<PackageReference Include="Polars.NET.Core" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Polars.NET.Core --version 0.2.1-beta1
                    
#r "nuget: Polars.NET.Core, 0.2.1-beta1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Polars.NET.Core@0.2.1-beta1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Polars.NET.Core&version=0.2.1-beta1&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Polars.NET.Core&version=0.2.1-beta1&prerelease
                    
Install as a Cake Tool

NuGet NuGet Downloads NuGet NuGet Downloads License Docs

Polars.NET

High-Performance, DataFrame Engine for .NET, powered by Rust & Apache Arrow.

Supported Platforms: Windows (x64), Linux (x64/ARM64, glibc/musl), macOS (ARM64).

Why Polars.NET exists

This is the game I'd like to play: binding the lightning-fast Polars engine to the .NET ecosystem. And it means a lot of fun to do this.

Installation

C# Users:

dotnet add package Polars.NET 

F# Users:

dotnet add package Polars.FSharp
  • Requirements: .NET 8+.
  • Hardware: CPU with AVX2 support (x86-64-v3). Roughly Intel Haswell (2013+) or AMD Excavator (2015+). If you have AVX-512 supported CPU, please try to compile Rust core on your machine use RUSTFLAGS='-C target-cpu=native'

Quick Start

C# Example

using Polars.CSharp;
using static Polars.CSharp.Polars; // For Col(), Lit() helpers

// 1. Create a DataFrame
var data = new[] {
    new { Name = "Alice", Age = 25, Dept = "IT" },
    new { Name = "Bob", Age = 30, Dept = "HR" },
    new { Name = "Charlie", Age = 35, Dept = "IT" }
};
var df = DataFrame.From(data);

// 2. Filter & Aggregate
var res = df
    .Filter(Col("Age") > 28)
    .GroupBy("Dept")
    .Agg(
        Col("Age").Mean().Alias("AvgAge"),
        Col("Name").Count().Alias("Count")
    )
    .Sort("AvgAge", descending: true);

// 3. Output
res.Show();
// shape: (2, 3)
// ┌──────┬────────┬───────┐
// │ Dept ┆ AvgAge ┆ Count │
// │ ---  ┆ ---    ┆ ---   │
// │ str  ┆ f64    ┆ u32   │
// ╞══════╪════════╪═══════╡
// │ IT   ┆ 35.0   ┆ 1     │
// │ HR   ┆ 30.0   ┆ 1     │
// └──────┴────────┴───────┘

F# Example


open Polars.FSharp

// 1. Scan CSV (Lazy)
let lf = LazyFrame.ScanCsv "users.csv"

// 2. Transform Pipeline
let res = 
    lf
    |> pl.filterLazy (pl.col "age" .> pl.lit 28)
    |> pl.groupByLazy 
        [ pl.col "dept" ]
        [ 
            pl.col("age").Mean().Alias "AvgAge" 
            pl.col("name").Count().Alias "Count"
        ]
    |> pl.collect
    |> pl.sort ("AvgAge", false)

// 3. Output
res.Show()

Polyglot Notebook Support

Polars.NET works seamlessly with .NET Interactive. Please refer to the example folder for a Polyglot Notebook demo.

Benchmark

  • Benchmark Code Here

  • Environment:

    • OS: Fedora Linux 43 (KDE Plasma)

    • CPU & Memory: Intel Core i7-10700 @ 2.90GHz,32G RAM

    • Runtime: .NET 10.0.2 (RyuJIT X64), Python 3.14.2

    • Polars.NET & Polars.FSharp Version: v0.2.1-beta1

1. CSV Parsing & GroupBy (100M Rows)
  • Winner: Polars.NET
Method Mean Managed Mem
Polars_Streaming 1.688 s 2.41 KB
DuckDB_SQL 2.298 s 5.86 KB
Microsoft_Data_Analysis 171.973 s 498 GB
Native_PLINQ 38.723 s 15.32 GB
2. Cosine Similarity (100M Elements)
  • Winner: TensorPrimitives / AVX2 For pure dense numerical computations, use .NET's TensorPrimitives. Polars.NET incurs overhead for expression planning.
Method Mean Managed Mem
TensorPrimitives_CosSim 37.31 ms 0 B
Polars_CosSim 261.96 ms 2024 B
MathNet_CosSim 1,381.02 ms 592 MB
Linq_CosSim 150.00 ms 104 B
3. Decimal Rolling Average (100M Rows)
  • Winner: PLINQ. To prevent OOM exception, DuckDB.NET and Polars.NET are recommended here.
Method Mean Managed Mem
Polars_Rolling_MA 16.739 s 2.73 KB
DuckDB_Rolling_MA 5.677 s 1.16 KB
Linq_Rolling_100M 28.110 s 1.29 GB
PLinq_Rolling_100M 3.349 s 7.87 GB
4. NDJSON Parsing (5M Rows)
  • Winner: DuckDB DuckDB's projection pushdown on JSON is superior. Polars.NET is still 3x faster than System.Text.Json and 10x faster than Newtonsoft.
Method Mean Managed Mem
DuckDB_ScanNdjson 764.1 ms 2.73 KB
Polars_ScanNdjson 2,279.5 ms 3.6 KB
SystemTextJson_Process 7,267.9 ms 5.51 GB
Newtonsoft_Dynamic 25,970.3 ms 42.78 GB
5. Excel Parsing (1M Rows, 20 Cols)
  • Winner: Polars.NET Leveraging Rust's calamine crate via FFI allows Polars.NET to outperform dedicated .NET Excel libraries.
Method Mean Managed Mem
Polars_Mixed 14.74 s 2.74 KB
MiniExcel_Mixed 28.26 s 15.94 GB
EPPlus_Mixed 34.84 s 10.33 GB
6. Join (20M Rows)
  • Winner: DuckDB / Polars.NET Both utilize high-performance Hash Joins. Traditional C# approaches (LINQ/MDA) are not viable for this scale.
Method Mean Managed Mem
Polars_Join 386.4 ms 3.45 KB
DuckDB_Join 286.9 ms 1.2 KB
Linq_Join 9,254.0 ms 1.16 GB
MDA_Join 15,346.4 ms 5.83 GB
7. Polars.FSharp vs Deedle(Quant, same as 3)
  • Winner: Polars.NET 45x faster than Deedle.
Method Mean Managed Mem
Deedle_Decimal_Rolling 1,824.86 ms 4.24 GB
Polars_Rolling 41.89 ms 1352 B
8. Polars.NET vs Python brothers(pandas and pypolars)
  • UDF

    Winner: Polars.NET. RyuJIT outperforms Python interpreter in UDF case.

Method Mean Managed Mem
Polars.NET_UDF 177.6 ms 228.74 MB
Pandas_UDF 656.6 ms
PyPolars_UDF 515.1 ms
  • GroupBy (10M Rows)

    Winner: Polars.NET. Very little diff between Polars.NET and pypolars.

Method Mean Managed Mem
Polars.NET_GroupBy 16.75 ms 741 B
Pandas_GroupBy 17.70 ms
PyPolars_GroupBy 145.73 ms

Architecture

3-Layer Architecture ensures stability even when the underlying Rust engine changes.

  1. Hand-written Rust C ABI layer bridging .NET and Polars. (native_shim)
  2. .NET Core layer for dirty works like unsafe ops, wrappers, LibraryImports. (Polars.NET.Core)
  3. High level C# and F# API layer here. No unsafe blocks. (Polars.CSharp & Polars.FSharp)

Roadmap & Documentation

  • Expanded SQL Support: Full coverage of Polars SQL capabilities (CTEs, Window Functions) to replace in-memory DataTable SQL queries.

  • Cloud Support : Direct IO integration with AWS S3, Azure Blob Storage, and Data Lakes.

  • Documentation: Docs Here

Contributing

Contributions are welcome! Whether it's adding new expression mappings, improving documentation, or optimizing the FFI layer.

  1. Fork the repo.

  2. Create your feature branch.

  3. Submit a Pull Request.

📄 License

MIT License. See LICENSE for details.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (4)

Showing the top 4 NuGet packages that depend on Polars.NET.Core:

Package Downloads
Polars.NET

A blazing fast DataFrame library for .NET, powered by the Rust Polars engine and Apache Arrow. Features multi-threaded query execution, lazy evaluation, and data extraction into modern .NET Tensors (ReadOnlyTensorSpan) for hardware-accelerated SIMD math and AI inference.

Polars.FSharp

Idiomatic F# API for Polars DataFrame library with strict type safety and pipeline support.

Polars.NET.Linq

LINQ Translation Engine for Polars.NET and Polars.FSharp. Write strong-typed C#/F# queries and execute them at native speed

Polars.NET.ML

The Machine Learning extension for Polars.NET. This package provides high-speed data bridges between Polars DataFrames, Apache Arrow memory, ML.NET (IDataView). Unlock hardware-accelerated SIMD math, train classic ML models, and seamlessly integrate with deep learning pipelines (ONNX).

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.5.0 88 5/26/2026
0.4.0 2,084 3/20/2026
0.3.1 257 2/28/2026
0.3.0 340 2/26/2026
0.2.1-beta1 455 2/6/2026
0.2.0-beta1 214 2/4/2026
0.1.0-beta1 149 1/14/2026
0.1.0-alpha2 136 1/10/2026
0.1.0-alpha1 146 1/4/2026