COOLJAPAN
← All posts

OptiRS 0.3.2 Released — The Honesty Release: Real Secure Aggregation, Zero Warnings, No More Fabricated Numbers

OptiRS 0.3.2 is a production-hardening release: fabricated p-values, un-cancelled secure-aggregation masks, and simulated GPU latency are replaced with real implementations or explicit errors. Workspace-wide zero-warning policy, ~90 dead scaffolding types removed, 4,200+ tests passing on Pure Rust ML optimizers built on SciRS2.

release optirs ml-optimization scirs2 pure-rust machine-learning optimizer differential-privacy correctness

Every simulated result in OptiRS just got replaced — with a real implementation, or an honest error that says what it can’t do.

Today we released OptiRS 0.3.2 — a production-hardening release built around one organizing theme: honesty. Code that simulated a result — fabricated p-values, hardcoded success rates, thread::sleep standing in for device latency, secure-aggregation masks that were never actually cancelled — was either replaced with a real implementation or changed to return an explicit error naming what it cannot do. No path in this release reports a number it did not compute.

OptiRS is the Pure Rust ML Optimization Suite Powered by SciRS2. No Python. No PyTorch optimizers. No external crates outside the SciRS2/COOLJAPAN line — every array, RNG, numeric-trait, SIMD and parallelism operation goes through scirs2-core; no direct ndarray, rand, rayon, or wide. The result compiles to a single static binary (or WASM) and runs everywhere.

Why 0.3.2 matters

A codebase can compile, pass its tests, and still lie to you. 0.3.2 went looking for exactly that failure mode across the whole workspace, and found it repeatedly:

OptiRS 0.3.2 ends all of that:

Technical Deep Dive: Where the honesty pass landed

Streaming and privacy (optirs-core). The drift/anomaly stack (streaming::adaptive_streaming) now runs on a shared numerics module — median/quantile selection, the standard-normal and chi-square survival functions, KL/Jensen-Shannon/Hellinger divergences, 1-D Wasserstein distance — instead of ad hoc approximations. The federated-learning stack (privacy::federated) gained the real Bonawitz protocol above, plus coordinate-wise median, trimmed mean, Krum, Multi-Krum, Bulyan and centered-clipping robust aggregators, and a Merkle-tree audit trail (RFC-6962-style, HMAC-SHA256 pinned against RFC 4231 vectors).

Neural architecture search (optirs-nas). Exact hypervolume by HSO recursion now drives NSGA-II against a latched reference point; MOEA/D (Zhang & Li, 2007) ships with a Das-Dennis weight lattice; and grid, TPE and kernel-regression-surrogate hyperparameter search replace what used to fall through to random search.

Learned optimizers (optirs-learned). LSTM optimizers meta-train by real truncated BPTT, with gradients checked against finite differences and meta-training verified to reduce held-out meta-loss. The transformer-based optimizer gained a real backward pass through its output projection, layer norms, feed-forward blocks and input embedding.

Workspace hygiene. Every source file is now under 2,000 lines — the 17 files that exceeded it were split into roughly 90 module files with public APIs preserved through re-exports. A new deny.toml at the workspace root, enforced by cargo deny check bans, blocks BLAS/LAPACK FFI, bincode, z3, rusqlite, the C compression family, and TLS/crypto FFI in favor of the COOLJAPAN pure-Rust equivalents.

Getting Started

cargo add optirs-core scirs2-core
[dependencies]
optirs-core = "0.3.2"
scirs2-core = "0.6.5"  # required foundation

The optimizer API is unchanged from 0.3.1 — no optimizer, scheduler or regularizer was removed or renamed:

use optirs_core::optimizers::{Adam, Optimizer};
// Always use scirs2_core for arrays - never ndarray directly.
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(&params, &gradients)?;

    println!("Updated parameters: {:?}", updated_params);
    Ok(())
}

What’s New in 0.3.2

Tips

This is the foundation

OptiRS is the optimizer layer of the COOLJAPAN ML and scientific stack, anchored on SciRS2 — now on the 0.6.5 line as of this release. It is the torch.optim/optax-class companion to ToRSh (deep learning), SkleaRS (scikit-learn-class), TenfloweRS, and TrustformeRS (transformers), sitting alongside NumRS2, PandRS, OxiBLAS, Oxicode, OxiFFT, OxiZ, OxiARC, OxiMedia, OxiGDAL, OxiLean, Legalis-RS, and OxiRAG — a 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’d rather your optimizer suite return an honest error than a fabricated number. 0.3.2 is the release where OptiRS stopped simulating and started measuring.

KitaSan at COOLJAPAN OÜ August 18, 2026

↑ Back to all posts