Scientific computing in Rust, without the C and Fortran toolchain that has followed NumPy and SciPy for thirty years.
Today we released SciRS2 0.1.0 — the first stable release of a Pure Rust scientific computing & AI/ML stack with SciPy-compatible APIs.
No C. No Fortran. No OpenBLAS. No FFTW (by default). NumPy and SciPy are built on layers of C and Fortran — OpenBLAS, LAPACK, sometimes MKL — and that lineage is the reason “just install it” so often turns into a fight with system libraries, compilers, and ABI mismatches. SciRS2 takes a different path: it compiles to a single static binary, BLAS and LAPACK are provided by Pure Rust OxiBLAS, and cargo add scirs2 needs no system library setup at all. Because it is plain Rust, targeting WebAssembly is a real goal and a natural benefit of the design — we keep that claim modest at 0.1.0, but the foundation is there.
Why 0.1.0 matters
If you have ever tried to pin a reproducible NumPy/SciPy environment across machines, you know the install hell: the right C compiler, the right BLAS, the right LAPACK, and version conflicts that surface only at runtime. This first stable release matters because it removes that whole category of problem for a meaningful slice of scientific work.
- Pure Rust by default — BLAS and LAPACK come from OxiBLAS, so there is nothing native to install and nothing to misconfigure.
- SciPy-compatible API surface — familiar function names and shapes across linalg, stats, optimize, integrate, interpolate, signal, and special functions, so porting code feels natural.
- Refactored into clean modules — the entire codebase was reorganized to meet a strict under-2000-lines-per-file policy: 21 large files totalling 58,000+ lines were split into 150+ well-organized modules, with the largest file now around 1,000 lines.
- Zero-warnings discipline — 0 compilation errors and 0 non-doc warnings, with full clippy compliance.
- Tested broadly — 10,861 tests passing across 170 test binaries (149 skipped), over roughly 1.68M lines of Rust across 4,727 files.
These are the real numbers from this release. We would rather under-promise here and let the test suite speak.
Technical Deep Dive: how the stack is layered
SciRS2 is a workspace of focused crates, and the architecture as of 0.1.0 falls into a few honest layers.
1. Core layer — scirs2-core. The foundation every other crate builds on. SIMD acceleration via wide, data parallelism via rayon, plus shared memory and profiling utilities. Common abstractions live here so the rest of the stack stays consistent.
2. Scientific computing crates. scirs2-linalg (decompositions, eigensolvers) sits on OxiBLAS; alongside it are scirs2-fft, scirs2-stats, scirs2-optimize, scirs2-integrate (ODE solvers, BVP), scirs2-interpolate (splines), scirs2-signal (FFT, wavelets, filtering), scirs2-sparse, scirs2-spatial (KD-trees, distances), and scirs2-special (Bessel, gamma, elliptic). There are also scirs2-ndimage, scirs2-cluster, scirs2-datasets, and scirs2-io.
3. AI/ML layer. scirs2-autograd provides automatic differentiation in both reverse and forward mode; scirs2-neural builds neural networks on top; scirs2-graph handles graph processing; and scirs2-metrics, scirs2-transform, scirs2-text, scirs2-vision, and scirs2-series cover metrics, data transformation, text processing, computer vision, and time series.
4. Modular workspace design. Every non-core crate is built on the scirs2-core abstractions, so behavior stays uniform and you can depend on just the piece you need.
Getting Started
cargo add scirs2
use scirs2::prelude::*;
use ndarray::Array2;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Create a matrix
let a = Array2::from_shape_vec((3, 3), vec![
1.0, 2.0, 3.0,
4.0, 5.0, 6.0,
7.0, 8.0, 9.0,
])?;
// Singular value decomposition
let (u, s, vt) = scirs2::linalg::decomposition::svd(&a)?;
println!("Singular values: {:.4?}", s);
// Condition number
let cond = scirs2::linalg::basic::condition(&a, None)?;
println!("Condition number: {:.4}", cond);
// Sample from a normal distribution
let normal = scirs2::stats::distributions::normal::Normal::new(0.0, 1.0)?;
let samples = normal.random_sample(5, None)?;
println!("Random samples: {:.4?}", samples);
Ok(())
}
What’s inside
- The first stable, production-ready release of SciRS2.
- A full codebase refactor to meet the under-2000-lines-per-file policy: 21 large files reorganized into 150+ modules, max file size reduced to ~1,000 lines.
- 150+ visibility and import fixes to enable complete test coverage.
- All compilation warnings and clippy issues resolved — zero-warnings maintained.
- 10,861 tests passing across 170 test binaries (149 skipped).
- Pure Rust by default: OxiBLAS for BLAS/LAPACK, RustFFT for FFT (FFTW optional).
- SciPy-compatible APIs across linalg, stats, optimize, integrate, interpolate, signal, and special, plus the AI/ML modules.
- Platform support across Linux, macOS (including Metal), and Windows.
- Optional features for those who need them:
fftw(C library, FFT speedup),cuda,mpsgraph(Apple Metal), andarbitrary-precision(GMP/MPFR).
Tips
-
Pull in the common API in one line with
use scirs2::prelude::*;— it brings the everyday types and traits into scope. -
The default build is 100% Pure Rust. There is nothing to install and no system BLAS to configure;
cargo add scirs2is the whole setup. -
Enable the optional FFT speedup only when you actually need it and accept a C dependency:
cargo add scirs2 --features fftw -
cudaandmpsgraphexist for GPU acceleration, but they are optional — reach for them deliberately, not by default. -
If you only need part of the stack, depend on the individual crate directly, for example
scirs2-linalgorscirs2-stats, and keep your build lean.
This is the foundation
SciRS2 0.1.0 lands among the very first COOLJAPAN projects, and it leans on Pure Rust OxiBLAS for its linear algebra so the whole stack stays free of native dependencies. It is meant to be a base that other early sibling projects can build on.
Repository: https://github.com/cool-japan/scirs
Star the repo if a Pure Rust SciPy/NumPy foundation is something you have been waiting for.
Pure Rust scientific computing is here — fast, safe, and sovereign.
— KitaSan at COOLJAPAN OÜ December 29, 2025