Symbolic math, in pure Rust, with no C, no Fortran, and no Python in the loop — that is what ships today.
Today we released SciRS2 0.4.3 — a stability and refactoring release whose headline is the brand-new pure-Rust scirs2-symbolic crate, joined by a full WebAssembly TypeScript binding story and a sweep of dependency modernization.
No C. No Fortran. No NumPy system dependencies. SciRS2 is a scientific computing stack for Rust that aims to replace NumPy, SciPy, and scikit-learn without dragging along a decades-old native toolchain. The same code compiles to a single static binary on the server and to WebAssembly in the browser — no pip install, no shared-library hunt, no surprise ABI breaks.
Why SciRS2 0.4.3 matters
If you have shipped numerical Python to production, you know the pain points. NumPy and SciPy lean on system BLAS/LAPACK, Fortran runtimes, and a tangle of native wheels that differ per platform. scikit-learn pins you to a CPython interpreter and the GIL. Symbolic work usually means reaching for yet another heavyweight dependency. Reproducing a build six months later can be an archaeology project.
SciRS2 0.4.3 chips away at all of that with concrete wins:
- A real symbolic engine, in pure Rust. The new
scirs2-symboliccrate gives you expression trees, symbolic differentiation, algebraic simplification, and numeric evaluation — with no external dependency beyondthiserror. No SymPy, no native bindings, no interpreter. - The browser is a first-class target.
scirs2-wasmnow ships full TypeScript type declarations and React hooks, so frontend teams get autocomplete and type safety out of the box. - Modernized foundations. Dependencies were upgraded across the board (rayon 1.12, rand 0.10.1, nalgebra 0.34.2, oxiarc-* 0.2.7, blake3 1.8.5, uuid 1.23.1, oxifft 0.1.4), keeping the stack current.
- Maturity you can measure. 34,883 tests passing (34,299 via nextest plus 584 in the
scirs2-datasetslib), 2.94 million lines of Rust, 32 workspace crates, 80,800+ public API items, Apache-2.0, and zero warnings across clippy, rustdoc, and fmt. The no-unwrap policy passes.
And SciRS2 is not slow because it is safe. Established SciRS2 benchmarks against NumPy include element-wise operations at 14.17x, convolution at 25x, bootstrap resampling at 30x, and fractional FFT at 24.9x. Safety and speed are not a trade here.
Technical Deep Dive
Layer 1 — scirs2-core. The foundation provides a NUMA-aware work scheduler, GPU backends for Metal (MPS) and WGPU, and hand-tuned SIMD kernels. In 0.4.3 the GPU backends, JIT path, memory views, and random-ecosystem integration were refactored, and five new SIMD example programs were added so you can benchmark the kernels directly on your own hardware.
Layer 2 — scirs2-symbolic (new). This is the marquee addition. It models math as an expression tree and offers:
diffanddiff_nfor first- and higher-order symbolic differentiation,simplifyandsimplify_fullfor algebraic simplification (light and aggressive),evalfor numeric evaluation of an expression at concrete values.
It is pure Rust with thiserror as its only dependency — small, auditable, and dependency-light by design.
Layer 3 — scirs2-wasm. The WASM story grew up. The crate now ships TypeScript declarations (ts-src/index.d.ts, 1425 lines, roughly 96 exported symbols) spanning 19 API sections: stats, signal processing, linear algebra, FFT, a WasmMatrix class, the SciRS2 facade, ML models (WasmKMeans, WasmNaiveBayes), streaming primitives (OnlineStats, RollingWindow, StreamingFFT), eight SIMD128 ops (dot_product, matmul, softmax, relu, sigmoid, add, mul, l2_norm), and Web Worker utilities (TransferableArray, WorkerPool). On top of that sit React hooks (useScirs2, useScirs2Compute, useScirs2Array), Web Worker helpers (js/worker.js), and FinalizationRegistry-based WASM memory management. A Node.js usage example and a browser benchmark against TF.js-WASM round it out.
Layer 4 — the Pure-Rust foundation. Underneath everything, SciRS2 stands on COOLJAPAN’s pure-Rust building blocks: OxiBLAS for BLAS/LAPACK, OxiFFT (oxifft 0.1.4) for FFTs, and oxiarc-* 0.2.7 for compression. Python interop goes through PyO3; the browser path uses a WebGPU backend. There is no native math library to install and no Fortran in sight.
Getting Started
Add SciRS2 to your project:
cargo add scirs2
Here is a minimal example using the new scirs2-symbolic API — build x^2 + sin(x), differentiate it, simplify the result, and evaluate it at a point:
use scirs2::symbolic::{Expr, diff, simplify, eval};
fn main() {
// Build the expression: x^2 + sin(x)
let x = Expr::var("x");
let expr = x.pow(2) + Expr::sin(x.clone());
// Symbolically differentiate with respect to x:
// d/dx (x^2 + sin(x)) = 2*x + cos(x)
let derivative = diff(&expr, "x");
// Simplify the derivative algebraically
let simplified = simplify(&derivative);
println!("d/dx = {}", simplified);
// Evaluate the derivative at x = 0 -> 2*0 + cos(0) = 1
let value = eval(&simplified, &[("x", 0.0)]);
println!("value at x=0: {}", value);
}
Everything above is pure Rust — no Python, no native symbolic engine, and it compiles straight to a static binary or to WASM.
What’s New in 0.4.3
Added
scirs2-symbolic(new crate): symbolic expression trees, symbolic differentiation (diff,diff_n), algebraic simplification (simplify,simplify_full), and numeric evaluation (eval) — pure Rust, no deps beyondthiserror. This is the headline of the release.scirs2-fft: inverse wavelet packet transform (IWPT) for signal reconstruction.scirs2-neural: quantum-inspired machine learning plus classical adaptation modules.scirs2-special: additional special functions mirroring SciPy’sspecialmodule.scirs2-wasm: full TypeScript declarations across 19 API sections, React hooks (useScirs2,useScirs2Compute,useScirs2Array), Web Worker helpers,FinalizationRegistry-based memory management, a Node.js example, and a browser benchmark against TF.js-WASM.scirs2-core: five new SIMD example programs (simd_ml_operations_demo,simd_perf_comparison,simd_ultra_benchmark,simd_ultra_benchmark_csv,norm_l2_comparison).scirs2-python: enhanced async test setup withpyo3-async-runtimes.
Changed
scirs2-autograd: refactored tensor ops (advanced decompositions, Kronecker, special matrices).scirs2-cluster: refactored biclustering, co-clustering, deep clustering, stability analysis, and visualization export.scirs2-core: refactored GPU backends (Metal MPS, WGPU), JIT, memory views, and random-ecosystem integration.scirs2-graph: refactored algebraic operations, centrality, and community detection.- Dependencies upgraded: rayon 1.12, rand 0.10.1, nalgebra 0.34.2, oxiarc-* 0.2.7, blake3 1.8.5, uuid 1.23.1, oxifft 0.1.4.
scirs2-special:printpdfmoved behind a new optionalpdffeature gate (no longer a default dependency).
Fixed
- No-unwrap policy improvements across
scirs2-cluster,scirs2-core, andscirs2-autograd. - GPU dispatch reliability improvements (Metal + WGPU).
- Compilation stability across
scirs2-optimize,scirs2-stats, andscirs2-special. - Doctest stabilization (25+ doctest fixes during the 2026-05-02 release-check pass).
Tips
-
Reach for
simplify_fullwhen you want it aggressive.simplifykeeps things light;simplify_fullpushes harder on algebraic reduction. Use the latter when a derivative comes out tangled. -
scirs2-specialgot lighter.printpdfis no longer pulled in by default — it now lives behind the optionalpdffeature. If you need PDF export, enable it explicitly:scirs2-special = { version = "0.4.3", features = ["pdf"] } -
Do browser ML with the WASM SIMD128 ops + React hooks. The eight SIMD128 ops (
dot_product,matmul,softmax,relu,sigmoid,add,mul,l2_norm) plususeScirs2,useScirs2Compute, anduseScirs2Arraylet you run inference client-side with full TypeScript types. -
Benchmark the SIMD kernels on your own hardware. The five new
scirs2-coreexample programs (simd_ultra_benchmark,simd_perf_comparison,norm_l2_comparison, and friends) make it easy to see what your CPU actually does — including a CSV-emitting variant for plotting. -
Reconstruct signals with IWPT. The new inverse wavelet packet transform in
scirs2-fftcloses the loop on wavelet-packet analysis for denoising and reconstruction workflows. -
Offload heavy WASM work to a worker. Use the
WorkerPoolandTransferableArrayhelpers so big arrays move off the main thread and your UI stays responsive.
Part of the COOLJAPAN ecosystem
SciRS2 is the scientific-computing core of the COOLJAPAN pure-Rust ecosystem. It rests directly on OxiBLAS (BLAS/LAPACK), OxiFFT (FFT), and oxiarc (compression), with oxicode for serialization — all pure Rust, all without native toolchains. It sits alongside peers like optirs (optimization), numrs (n-dimensional arrays), pandrs (dataframes), and torsh (tensors), so you can assemble a complete numerical and ML stack that never leaves Rust.
Repository: https://github.com/cool-japan/scirs
Star the repo if you want symbolic math, SciPy-grade numerics, and browser-ready ML without a single line of C or Fortran.
Pure Rust scientific computing is here — fast, safe, and sovereign.
— KitaSan at COOLJAPAN OÜ May 3, 2026