The optimizer suite you already know, now settling into a maturing ecosystem — same API, cleaner license, fresh SciRS2 foundation.
Today we released OptiRS 0.2.0 — relicensed to Apache-2.0 only and aligned with SciRS2 v0.2.0 across every crate.
This is a maturity and alignment release, plain and simple. There are no new optimizers, no new benchmarks, and no API changes. What changed is the foundation underneath: OptiRS now tracks the SciRS2 0.2.0 line and ships under a single, unambiguous license. If you are running OptiRS 0.1.0 today, upgrading is a one-line dependency bump — your code does not change.
No Python. No PyTorch optimizers. No external crates. OptiRS is the torch.optim/optax-class optimizer layer of the COOLJAPAN ML stack, built exclusively as an extension of SciRS2-Core. There is no torch.optim import, no optax shim, and no fragile C++/CUDA optimizer wrapped behind FFI. There is no direct dependency on ndarray, rand, rayon, or wide either — every array, every random draw, every SIMD lane, and every parallel batch flows through scirs2-core. The result compiles to a single static binary (or WASM) with no system optimizer runtime to install, version-match, or apologize for.
Why 0.2.0 matters
When OptiRS 0.1.0 shipped, the COOLJAPAN ecosystem was young. SciRS2 was the foundation, and a handful of siblings were finding their footing. That ecosystem has since grown steadily, and as it matured two things became worth standardizing: the license and the SciRS2 baseline.
So OptiRS 0.2.0 does exactly that. The license moves to Apache-2.0 only, matching SciRS2 and the broader stack — one license file, one set of terms, no dual-license ambiguity for downstream legal review. And the entire dependency tree moves onto the SciRS2 v0.2.0 line, so OptiRS rides the same primitives, the same numerics, and the same release cadence as the foundation it is built on.
What does not change is the public API. It is unchanged from 0.1.0 and fully backward compatible. The suite you already know is all still here: 19 optimizers, SIMD acceleration in the 2-4x range, parallel batches in the 4-8x range. None of that moved. The new news is licensing and the SciRS2 0.2.0 foundation — not features. That is deliberate. A release that says “nothing in your code needs to change” is a release you can adopt on a Friday afternoon.
Technical Deep Dive: the architecture that carries over
The internals are unchanged from 0.1.0 — but every layer now rides on SciRS2 v0.2.0 primitives. Here is how the suite is organized.
Core optimizers (optirs-core). The heart of the suite: 19 optimizers covering the space you actually reach for. Seventeen first-order methods — SGD, SimdSGD, Adam, AdamW, RMSprop, Adagrad, AdaDelta, AdaBound, LAMB, LARS, Lion, Lookahead, RAdam, Ranger, SAM, SparseAdam, and GroupedAdam — plus two second-order methods, L-BFGS and Newton-CG. Each implements a common Optimizer trait, so swapping Adam for Lion is a single line.
Learning-rate schedulers. Five schedulers ship alongside the optimizers: ExponentialDecay, StepDecay, CosineAnnealing, LinearWarmup, and OneCycle. They compose with any optimizer in the suite, because the schedule is decoupled from the update rule.
SIMD, parallel, and GPU frameworks. SIMD-accelerated update paths (2-4x on the supported kernels) go through scirs2_core::simd_ops. Parallel batch processing (4-8x) goes through scirs2_core::parallel_ops. The GPU framework (optirs-gpu) targets CUDA, Metal, OpenCL, and WebGPU. All of it now sits on the SciRS2 v0.2.0 abstractions rather than reaching for hardware crates directly.
Metrics and tooling. Optimization metrics export to JSON and CSV for offline analysis, and the benchmark crate (optirs-bench) lets you measure your own configurations. The companion crates — optirs-tpu, optirs-learned, and optirs-nas — round out the suite for TPU targets, learned optimizers, and neural architecture search.
Every one of these layers was already real in 0.1.0. The 0.2.0 work was to lift the whole stack onto SciRS2 v0.2.0 and confirm it still behaves. The tests continue to pass.
Getting Started
Add OptiRS and its required foundation:
cargo add optirs-core scirs2-core
Or, in your [dependencies] block:
optirs-core = "0.2.0"
scirs2-core = "0.2.0" # required foundation, now on the 0.2.0 line
A minimal Adam step looks like this:
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(())
}
That example is identical to the one you would have written against 0.1.0 — because the API did not move.
What’s New in 0.2.0
- Apache-2.0 only. The license changed from dual MIT/Apache-2.0 to Apache-2.0 only, aligning with the broader SciRS2 ecosystem. The separate
LICENSE-MITandLICENSE-APACHEfiles are gone, replaced by a singleLICENSEfile. Every crate manifest and doc was updated to match. - SciRS2 v0.2.0 across the board. All SciRS2 dependencies were upgraded from v0.1.1 to v0.2.0: scirs2-core, scirs2-optimize, scirs2-neural, scirs2-metrics, scirs2-stats, scirs2-series, scirs2-datasets, scirs2-linalg, and scirs2-signal — all now at 0.2.0.
- Workspace bump. The workspace version moved to 0.2.0 across all crates, with refined workspace dependency management for the SciRS2 v0.2.0 line and an updated
optirs-gpudependency configuration. - Documentation refresh. Version references were updated to v0.2.0 throughout the docs,
MIGRATION_FROM_SCIRS2.mdwas updated, and every subcrate documentation header was brought current. - Migration (0.1.0 → 0.2.0). The license is now Apache-2.0 only — review your legal requirements if you depended on MIT. Update all SciRS2 deps to v0.2.0. No API changes. No breaking changes. Backward compatible at the API level.
Tips
-
Upgrade in one shot. Bump all your
scirs2-*dependencies to0.2.0together, and pinoptirs-core = "0.2.0". Keeping the SciRS2 crates on a single version line avoids resolver mismatches:optirs-core = "0.2.0" scirs2-core = "0.2.0" -
Flag the license change for legal. If your project relied on the MIT half of the old dual license, note that 0.2.0 is Apache-2.0 only and route it through your usual downstream license review before you ship.
-
No code changes required. The public API is unchanged. Once your dependencies resolve to 0.2.0, your existing optimizer setup, schedulers, and training loops compile and run as-is — there is nothing to rewrite.
-
Your 0.1-era knowledge still applies. SIMD kicks in above its internal size threshold, so very small arrays stay on the scalar path — size your batches accordingly. The
ParallelOptimizerpath is still there for multi-batch work, gradient accumulation still composes with any optimizer, the five schedulers still wrap any update rule, and metrics still export to JSON/CSV. -
Swap optimizers freely. Because every optimizer implements the same
Optimizertrait, trying Lion or Ranger in place of Adam is a one-line change — handy when you want to re-tune after moving onto the new foundation.
This is the foundation
OptiRS is the optimizer layer of the COOLJAPAN ML stack, and 0.2.0 is it maturing in step with the foundation beneath it. That foundation is SciRS2, now on its own 0.2.0 line — OptiRS depends on scirs2-core, scirs2-optimize, scirs2-neural, scirs2-stats, and more, so everything OptiRS does is anchored there.
Around SciRS2, the ecosystem has grown into a steady, real stack: NumRS2 and PandRS for arrays and dataframes; OxiBLAS for linear algebra under SciRS2; Oxicode for serialization; OxiFFT for transforms; OxiZ for SMT solving; OxiARC for Pure Rust compression; Legalis-RS for legal technology; MeCrab, Chie, and Mielin; OxiRAG for retrieval; and Spintronics, VoiRS, Tenrso, and TensorLogic. OptiRS sits in that lineup as the place where gradients become parameter updates — and as of 0.2.0, it shares the same license and the same SciRS2 baseline as the rest of them.
Repository: https://github.com/cool-japan/optirs
Star the repo if you want Pure Rust ML optimization that upgrades on a one-line bump and never asks you to install a CUDA toolchain first. More to come as the stack keeps growing.
— KitaSan at COOLJAPAN OÜ February 18, 2026