A scientific computing stack is only as trustworthy as the deepest line in its dependency tree.
Today we released SciRS2 0.3.4 — a focused dependency-hygiene release that finishes the job of removing every C/Fortran binding and the zip crate from the tree, leaving a leaner, fully auditable, 100% Pure Rust supply chain.
No C. No Fortran. No NumPy system dependencies. SciRS2 is a pure-Rust replacement for the NumPy/SciPy/scikit-learn stack that compiles to a single static binary — or to WebAssembly — and runs everywhere, with nothing to apt-install, no OpenBLAS to hunt down, and no Fortran toolchain to coax into building. As of 0.3.4, that promise now holds all the way to the bottom of cargo tree.
Why SciRS2 0.3.4 matters
The traditional scientific Python stack hides a sprawling, mostly non-Rust supply chain: wheels that bundle C and Fortran, transitive system libraries you can’t easily audit, and compression and bignum code written in languages your security team can’t reason about. Even Rust projects quietly inherit this debt — a single convenience crate can drag in zip, and a high-precision math helper can pull a GMP/MPFR C binding right back into a “pure Rust” build. The result is slow cold builds, painful cargo audit reviews, and an attack surface that grows with every transitive hop.
0.3.4 attacks that surface directly. Concrete wins, straight from the changelog:
- OxiARC upgraded to 0.2.5. All OxiARC compression libraries —
oxiarc-archive,oxiarc-lz4,oxiarc-bzip2,oxiarc-zstd,oxiarc-core,oxiarc-deflate— move from 0.2.4 to 0.2.5. snappyandbrotliare now real published deps.oxiarc-snappyandoxiarc-brotlimigrated from local path dependencies to the crates.io 0.2.5 release — so SciRS2 builds reproducibly and publishably for everyone, not just from a local checkout.zipis gone. Removingndarray-npyfromscirs2-coreeliminated thezipcrate from the dependency tree entirely — honoring the COOLJAPAN policy that all compression/decompression flows through OxiARC, neverzip.- A C library is gone.
gmp-mpfr-sys— a binding to the GMP/MPFR C libraries — was removed, furthering the Pure Rust Policy of no C/C++/Fortran by default. - Dead weight pruned. Removed unused workspace deps
x509-parser,itertools,num-rational; unused OpenTelemetry depsopentelemetry-prometheusandopentelemetry-semantic-conventions; and unusedscirs2-iostub depsmongodb,redis, and directprost. - Tree tidied. Fixed dangling feature references in
scirs2-coreandscirs2-graph.
Smaller attack surface. Faster cold builds. A dependency tree where “100% Pure Rust by default” is honored end to end, not just at the top level.
Technical Deep Dive
Three layers carry the weight, and 0.3.4 sharpens each one.
Compression & IO — OxiARC 0.2.5. Every compression codec SciRS2 touches now routes through the oxiarc-* family at 0.2.5: deflate, lz4, zstd, bzip2, snappy, and brotli, all pure Rust. This is what replaced zip/flate2/zstd/bzip2/lz4 in the 0.3.x line — and 0.3.4 closes the last gap by dropping ndarray-npy (and with it, zip) from core IO. The path→crates.io migration for oxiarc-snappy and oxiarc-brotli matters more than it looks: a published dependency means anyone can build SciRS2 reproducibly from crates.io, and SciRS2 itself remains publishable rather than tethered to a local workspace.
Core — scirs2-core. With ndarray-npy (and zip) removed, the core shrinks and stays pure. Memory profiling here already runs through OS-level APIs rather than a C allocator binding (a 0.3.3 change), so the core has no hidden native dependencies. Dangling feature references were cleaned up so the feature graph matches reality.
Numerics — OxiBLAS & OxiFFT. Linear algebra rides on OxiBLAS (pure-Rust BLAS/LAPACK, v0.2.1), replacing OpenBLAS/LAPACK/MKL, and transforms run on OxiFFT (pure-Rust FFT). Decompositions like SVD, QR, and Cholesky are native Rust top to bottom — no Fortran kernel underneath.
Getting Started
Add it to your project:
cargo add scirs2
A quick SVD to prove the numerics are real and the build needs nothing but Cargo:
use scirs2::prelude::*;
use ndarray::Array2;
fn main() -> Result<(), Box<dyn std::error::Error>> {
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,
])?;
let (_u, s, _vt) = scirs2::linalg::decomposition::svd(&a)?;
println!("Singular values: {:.4?}", s);
Ok(())
}
Want to see the cleanup with your own eyes? After upgrading, run cargo tree — you will no longer find zip or gmp-mpfr-sys anywhere in the graph.
What’s New in 0.3.4
Dependencies:
- Upgraded all OxiARC compression libraries (
oxiarc-archive,oxiarc-lz4,oxiarc-bzip2,oxiarc-zstd,oxiarc-core,oxiarc-deflate) from 0.2.4 to 0.2.5. - Migrated
oxiarc-snappyandoxiarc-brotlifrom local path dependencies to crates.io version 0.2.5.
Dependency Cleanup:
- Removed
ndarray-npyfromscirs2-core— eliminated thezipcrate from the dependency tree. - Removed unused workspace dependencies:
x509-parser,itertools,num-rational,gmp-mpfr-sys. - Removed unused OpenTelemetry dependencies:
opentelemetry-prometheus,opentelemetry-semantic-conventions. - Removed unused
scirs2-iostub dependencies:mongodb,redis,prost(direct). - Fixed dangling feature references in
scirs2-coreandscirs2-graph.
Still the same production scale: 2.59M SLoC, 19,700+ tests, 29 workspace crates, zero warnings (0 errors, 0 clippy warnings). Production-Ready Pure Rust Scientific Computing • No System Dependencies • 10-100x Performance Gains.
Tips
-
Route all compression through
oxiarc-*. Follow the COOLJAPAN pattern: reach foroxiarc-deflate/oxiarc-zstd/oxiarc-lz4/etc. instead ofzip,flate2, orzstd. It keeps your tree pure and your builds dependency-free. -
Hunt duplicates and C deps with
cargo tree. Runcargo tree -dto surface duplicate versions, and grep the output for*-syscrates — those are your native-code entry points:cargo tree | grep -- '-sys' -
If you forked SciRS2, drop
ndarray-npy. Replace it with OxiARC-based IO to removezipfrom your own tree and match 0.3.4’s surface. -
Upgrade is drop-in. Pin
scirs2 = "0.3.4"straight over 0.3.3 — there is no API breakage, only a smaller, cleaner dependency tree. -
Audit your own supply chain. A leaner SciRS2 is a head start, not a finish line; sweep your project for any remaining
*-syscrates and replace them with pure-Rust equivalents where you can.
This is the foundation
SciRS2 sits at the heart of the COOLJAPAN ecosystem of pure-Rust scientific and AI infrastructure. It builds on OxiBLAS (BLAS/LAPACK), OxiFFT (FFT), and OxiCode / the oxiarc compression family (now v0.2.5), and stands alongside ToRSh (deep learning), OxiMedia (media/CV), OxiHuman, OxiGDAL, OxiRAG, Spintronics, NumRS2, PandRS, and OptiRS — a full stack with not a line of C, C++, or Fortran in the default build.
Repository: https://github.com/cool-japan/scirs
Star the repo if you believe scientific computing should be auditable to the last dependency. Pure Rust scientific computing and AI is here — fast, safe, and sovereign.
— KitaSan at COOLJAPAN OÜ March 18, 2026