A release is only as trustworthy as the version strings in its docs — so we fixed them all.
Today we released OptiRS 0.3.1 — a maintenance patch that synchronizes documentation versions across the suite and ships a dedicated README for the WebAssembly bindings crate.
OptiRS is the Pure Rust ML Optimization Suite Powered by SciRS2. No Python. No PyTorch optimizers. No external crates. Where you would reach for torch.optim, optax, or a fragile C++/CUDA optimizer kernel, OptiRS gives you the same algorithms — Adam, SGD, K-FAC, L-BFGS — implemented strictly on top of scirs2-core. The rule is exact: only scirs2-core for arrays, RNG, and parallelism — no direct ndarray, rand, rayon, or wide. The result compiles to a single static binary (or WASM) — and with 0.3.1 the WASM path is now properly documented, so deploying optimizers to the browser or the edge is a first-class, written-down workflow rather than tribal knowledge.
Why 0.3.1 matters
Nine days ago, OptiRS 0.3.0 brought the big feature wave: the meta-learning optimizers, the structured-sparsity regularizers, the continual-learning and NAS crates. 0.3.1 is the cleanup that makes that release trustworthy.
When you ship a wave of features, version strings drift. Doc comments still say 0.1.0. The README claims one thing, the lib.rs headers claim another. 0.3.1 closes that gap: every crate’s documentation now reports the correct version, and the WebAssembly bindings crate — optirs-wasm — finally has a real README. That single document turns browser/edge deployment from an undocumented capability into a first-class, supported path.
The substance carried over from 0.3.0 is still all there: 22 optimizers spanning first-order SGD through second-order K-FAC, organized into 7 crates, with SIMD, parallel, and GPU acceleration. None of that changed. What changed in 0.3.1 is narrow and deliberate — the documentation and version sync, plus that new WASM README. This is housekeeping, and it is the good kind.
Technical Deep Dive: The Crate Layout
OptiRS is split into 7 crates, each with a clear job, all riding on the SciRS2 v0.4.0 line as of this release.
optirs-core— the optimizer algorithms themselves: SGD, Momentum, Adam, AdamW, RMSprop, LAMB, L-BFGS, K-FAC, and the rest of the 22. Schedulers, parameter groups, regularization, and optimizer composition all live here.optirs-gpu— GPU-accelerated optimizer steps for large parameter tensors (the 10–50x acceleration tier).optirs-tpu— TPU-targeted execution paths for the same algorithm set.optirs-learned— learned and continual-learning optimization: Elastic Weight Consolidation, Progressive Networks, and the domain optimizers (CV, NLP, attention).optirs-nas— neural architecture search optimizers (Memory-Efficient DARTS, Robust DARTS, Progressive NAS).optirs-bench— the benchmark harness that keeps the acceleration claims honest.optirs-wasm— WebAssembly bindings (Alpha, 29 tests). This is the focus of 0.3.1: it now has a comprehensive README documenting how to build towasm32and run OptiRS optimizers in the browser or at the edge.
Across all 7 crates the suite carries 1,249 unit tests plus 82 doc tests, all passing. The optirs-wasm crate contributes 29 of those tests and remains Alpha — but with this release it is a documented Alpha, not a silent one.
Getting Started
Add OptiRS and its required foundation:
cargo add optirs-core scirs2-core
Or pin them in your [dependencies]:
optirs-core = "0.3.1"
scirs2-core = "0.4.0" # required foundation
A minimal optimizer step — the API is unchanged from 0.3.0:
use optirs_core::optimizers::{Adam, Optimizer};
// ALWAYS use scirs2_core for arrays — NEVER direct ndarray!
use scirs2_core::ndarray::Array1;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let params = Array1::from_vec(vec![1.0, 2.0, 3.0, 4.0]);
let gradients = Array1::from_vec(vec![0.1, 0.2, 0.15, 0.08]);
let mut optimizer = Adam::new(0.001);
let updated_params = optimizer.step(¶ms, &gradients)?;
println!("Updated parameters: {:?}", updated_params);
Ok(())
}
What’s New in 0.3.1
This is a patch — the list is short on purpose.
- Version synchronization — all
lib.rsdoc comments now reflect the accurate version 0.3.1, and documentation version references are updated throughout the codebase. - New
optirs-wasmREADME — a comprehensiveREADME.mdfor the WebAssembly bindings crate, making browser and edge deployment a documented path. - Fixed stale doc-comment versions — the leftover
0.1.0version strings scattered across crate documentation are gone.
Tips
- Upgrading from 0.3.0 is a drop-in patch bump. Change
0.3.0to0.3.1in yourCargo.tomland rebuild — there are no code changes and no API changes to chase. - Going to the browser? Read the new
optirs-wasmREADME first. It walks through building to thewasm32target and running optimizers in the browser or at the edge. Treatoptirs-wasmas Alpha (29 tests) and validate against your workload before shipping. - Verify your toolchain doc strings. After the bump, the doc comments and
--versionoutput across the crates should all read0.3.1. If you generated docs against an older checkout, regenerate them sorustdocpicks up the synced versions. - The full 22-optimizer API is unchanged. Everything you built on 0.3.0 — SGD through K-FAC, L-BFGS, the meta-learning optimizers — behaves identically. This patch touches docs, not behavior.
- For advanced work, reach for the building blocks in
optirs-core. Schedulers, parameter groups, regularization, and optimizer composition (WeightedOptimizer) are all there when a single optimizer isn’t enough.
This is the foundation
OptiRS is the mature optimizer layer of a now-broad COOLJAPAN ML and scientific stack, anchored on SciRS2 (its foundation, now on the 0.4.0 line). It is the torch.optim/optax-class companion to the rest of the ecosystem: ToRSh (deep learning, PyTorch-class — OptiRS is its optimizer companion), SkleaRS (scikit-learn-class), TenfloweRS, and TrustformeRS (transformers). Around them sit NumRS2, PandRS, OxiBLAS, Oxicode, OxiFFT, OxiZ, OxiARC, OxiMedia (media + CV), OxiGDAL, OxiLean, Legalis-RS, and OxiRAG — a coherent, Pure Rust scientific computing platform where every layer extends SciRS2 rather than bolting on a foreign runtime.
Repository: https://github.com/cool-japan/optirs
Star the repo if you want your optimizers — and your docs — to tell the truth about which version you’re running. 0.3.1 is small, but small and honest is exactly what a release after a big one should be.
— KitaSan at COOLJAPAN OÜ March 27, 2026