A one-line packaging fix with an outsized payoff: OxiFFT now installs cleanly on Windows.
Today we released OxiFFT 0.1.2 — a packaging patch for the Pure Rust FFTW replacement that fixes a crate-unpacking failure on Windows.
No C. No Fortran. No FFI.
And now, no platform left behind at install time.
OxiFFT stays a single Pure Rust crate that builds to a static binary — or to WASM.
Why 0.1.2 matters
OxiFFT sits underneath a lot of code — SciRS2, NumRS2, and the Python-facing crates that wrap them. If OxiFFT can’t unpack on a platform, nothing above it can ship there either. That’s exactly what was happening on Windows.
The published package included an examples/**/CLAUDE.md path. Windows does not allow ** as a directory or filename, so unpacking the crate failed with:
The filename, directory name, or volume label syntax is incorrect. (os error 123)
0.1.2 removes that offending path. The fix is tiny, but it restores clean cross-platform installs and — crucially — unblocks PyPI publishing for dependent crates such as scirs2-python, which package OxiFFT transitively and were tripping over the same error on Windows runners.
What’s New in 0.1.2
Fixed
- Windows compatibility: removed the
examples/**/CLAUDE.mddirectory that caused package unpacking errors on Windows (os error 123), because Windows does not permit**as a directory or filename. This restores cross-platform installs and enables PyPI publishing for dependent crates (for example,scirs2-python).
Getting Started
cargo add oxifft
The FFT API is unchanged — a forward then inverse 1D transform:
use oxifft::api::{fft, ifft};
use oxifft::Complex;
fn main() {
let input: Vec<Complex<f64>> = (0..16)
.map(|k| Complex::new((k as f64).sin(), 0.0))
.collect();
let spectrum = fft(&input); // time -> frequency
let recovered = ifft(&spectrum); // frequency -> time
let max_error: f64 = input
.iter()
.zip(&recovered)
.map(|(a, b)| (a.re - b.re).hypot(a.im - b.im))
.fold(0.0, f64::max);
println!("max roundtrip error: {max_error:.2e}");
}
Tips
- Windows users: upgrade straight to 0.1.2. If
cargo(or a transitive Python build) failed to unpack OxiFFT withos error 123, this is the release that fixes it. - No code changes required. The public API is identical to 0.1.1 — this patch only changes what ships inside the package.
- Refresh your lockfile downstream. If you depend on OxiFFT through
scirs2-pythonor another crate, re-resolve so the 0.1.2 package is the one your Windows CI unpacks. - Avoid glob-shaped paths in your own crates. Literal
**(or other Windows-reserved characters) in committed file or directory names will break packaging the same way — a good lint to add to your release checklist.
This is the foundation
OxiFFT is the Pure Rust spectral layer for the SciRS2 numerical stack and the mandated replacement for rustfft, alongside SciRS2, NumRS2, OptiRS, PandRS, OxiBLAS, OxiCode, and same-day siblings OxiArc and OxiZ. Cross-platform packaging is part of being a dependable foundation — and now Windows installs and Python wheels build cleanly on top of it.
Repository: https://github.com/cool-japan/oxifft
Star the repo if you want fast, safe FFTs without ever linking FFTW again.
Pure Rust spectral computing is here — fast, safe, and sovereign.
— KitaSan at COOLJAPAN OÜ January 26, 2026