COOLJAPAN
← All posts

PandRS 0.3.0 Released — Pure Rust DataFrames, Now C-SQLite-Free

High-performance pure Rust DataFrame library — a pandas-class API with SIMD, parallel processing, and distributed compute. 0.3.0 purges the entire SQL/database stack (sqlx, rusqlite, libsqlite3-sys) to enforce Pure Rust, modernizes the columnar engine to Arrow/Parquet 58.1 and DataFusion 53.0, and upgrades SciRS2 integration to 0.4.0. The DataFrame layer of the COOLJAPAN scientific stack, alongside NumRS2.

release pandrs dataframe pandas pure-rust parquet arrow scirs2

The DataFrame layer of the COOLJAPAN scientific stack just shed its last C dependency in the I/O surface.

Today we released PandRS 0.3.0 — a minor release with one big breaking change: PandRS ripped out its entire SQL/database stack to become C-SQLite-free, then modernized the columnar engine underneath.

No C. No Cython. No C SQLite. No Python GIL.
No libsqlite3-sys to compile. No bundled SQLite to link.
Just a pandas-class DataFrame that compiles to a single static binary (or WASM) and runs everywhere — laptops, browsers, edge devices, and clusters.

Why PandRS 0.3.0 matters

For a DataFrame library that prides itself on being Pure Rust, the SQL stack was the awkward exception. Pulling in sqlx and rusqlite dragged libsqlite3-sys along with them — and libsqlite3-sys is a full C SQLite build. That meant a C compiler in the loop, platform-specific link steps, and a feature surface that quietly broke the “single static binary” promise the rest of PandRS keeps.

0.3.0 cuts that drag away:

On top of the purge, the columnar engine got a fresh coat of paint: Arrow/Parquet jumped to 58.1 and DataFusion to 53.0, keeping the distributed query and columnar I/O layers current with the wider Arrow ecosystem.

Technical Deep Dive: A Cleaner Pure Rust DataFrame After the SQL Purge

1. The Pure Rust I/O surface.
With the SQL connector removed, PandRS standardizes on columnar and text formats for data exchange: CSV, Parquet, Arrow, and JSON. Parquet is now the recommended columnar path — it replaces what the removed SQL feature used to cover, with no C SQLite to link. Excel I/O via calamine (0.32 → 0.34) remains in place for spreadsheet workflows. Series and DataFrame keep their columnar storage with string pooling underneath.

2. The modernized columnar/distributed engine.
The columnar core tracks the Arrow ecosystem closely. This release bumps parquet/arrow from 57.3 to 58.1 and datafusion from 52.2 to 53.0, refreshing the distributed query engine and the Parquet reader/writer in one pass. A deprecated Parquet API was migrated along the way (set_max_row_group_sizeset_max_row_group_row_count).

3. The SciRS2 0.4.0 integration tier.
The optional scirs2 feature — which routes statistics and linear algebra through scirs2-core, scirs2-stats, and scirs2-linalg — moves from SciRS2 0.3.1 to 0.4.0. PandRS now sits on the same SciRS2 0.4.0 line as NumRS2, keeping the scientific stack coherent from arrays through DataFrames.

4. Leaner builds and the Cranelift 0.130 JIT.
0.3.0 adds a global debug-info reduction via .cargo/config.toml, trimming build size across the workspace. The optional JIT layer moves to Cranelift 0.130, and the async runtime to Tokio 1.50. Compatibility fixes round it out: the rand 0.10.x API (RngExt imports) and the toml parser (0.9.10 → 1.1.0) are both current.

Getting Started

cargo add pandrs
use pandrs::{DataFrame, Series};

fn main() -> pandrs::error::Result<()> {
    let mut df = DataFrame::new();
    df.add_column(
        "product".to_string(),
        Series::from_vec(vec!["Widget", "Gadget", "Gizmo"], Some("product")),
    )?;
    df.add_column(
        "units".to_string(),
        Series::from_vec(vec![1200, 980, 1540], Some("units")),
    )?;

    // No C SQLite to link — columnar I/O is the Pure Rust path
    let top = df.filter("units > 1000")?;
    let total: i64 = df.column("units")?.sum()?;
    println!("{} top products, {} units total", top.shape().0, total);
    Ok(())
}

The same DataFrame/Series API you already know — now with a Pure Rust I/O surface and no C SQLite anywhere in the build.

What’s New in 0.3.0

Tips

This is the foundation

PandRS is the DataFrame layer of the COOLJAPAN scientific stack, now on SciRS2 0.4.0 alongside NumRS2:

Repository: https://github.com/cool-japan/pandrs

Star the repo if you want pandas-class DataFrames without C SQLite, Cython, or Python overhead in your build.

Pure Rust DataFrames are here — fast, safe, and sovereign.

KitaSan at COOLJAPAN OÜ March 27, 2026

↑ Back to all posts