Not every release is a feature release. Some releases are just you, catching up on your reading.
Today we released OxiProj 0.1.3 — a maintenance release on top of the 0.1.2 hardening pass. There is no new roadmap surface area here, no bug fixed in OxiProj’s own code, and no public API change. What changed is which versions of five upstream COOLJAPAN crates OxiProj now depends on — and each of those upstream releases shipped real work worth inheriting.
OxiProj is still exactly what it was on day one: a 100% Pure-Rust reimplementation of PROJ 9.8.0 — not a binding to libproj, no proj-sys, no C toolchain. Every crate is still #![forbid(unsafe_code)], wasm included. 0.1.3 doesn’t touch any of that; it just moves the floor OxiProj stands on.
Why bumping dependencies is still worth a release
A “just bump deps” release sounds unglamorous until you look at what the deps actually did:
- OxiH5 0.2.2 ran a 44-agent differential interop audit against real h5py 3.16 and netCDF4-python 1.7.4 — not just its own reader — and fixed 33 confirmed conformance defects. OxiProj uses OxiH5 for GGXF grid files; any file OxiProj writes is now verified byte-openable by the reference HDF5 tooling, not merely round-trippable through OxiH5 itself.
- OxiCUDA 0.5.3 fixed an asynchronous-copy race condition: on a non-blocking stream,
cuMemcpy*Asynccould return before the transfer actually landed in memory, letting the next read see stale or zeroed data. OxiProj’s optional GPU reprojection path inherits that fix directly. - OxiARC 0.4.0 rewrote the DEFLATE/zlib decoder for performance and added zero-copy
inflate_into/zlib_decompress_intoentry points — no wire-format change, existing callers just get faster. - OxiZ 0.3.2 (0.2.4→0.3.2 across this cycle) closed out a soundness sweep triggered by an external differential-testing bug report: EUF congruence, Bool/EUF encoding, and NLSAT conflict-analysis bugs that could make a formerly-
satverdictunsator vice versa. OxiProj’s SMT-backed scale-bounds verification (verify_helmert_scale_bounds,verify_invertible_at) runs on a more trustworthy solver as of this release. - OxiFFT 0.4.1 forwarded its own optional GPU backends to the OxiCUDA 0.5.3 fix above.
None of that is code OxiProj wrote. All of it is code OxiProj now runs on.
Technical Deep Dive: the one line of OxiProj’s own
The only change inside OxiProj’s own source this cycle: wide 1.6 marked f64x4::powf(scalar) #[deprecated] in favor of powf_simd. oxiproj-projections::simd_scalar::SimdF64x4::powi/powf — the internal SIMD scalar-power helpers behind exact-autodiff distortion factors — now call powf_simd(f64x4::splat(..)) directly, which is the exact computation the old powf performed internally. Same output, zero deprecation warnings under -D warnings.
Getting Started
Nothing changes in how you reach for OxiProj:
cargo add oxiproj
use oxiproj::{Crs, Transformer, Coordinate};
fn main() -> Result<(), oxiproj::TransformError> {
// WGS84 geographic (lon, lat in degrees) -> Web Mercator (meters).
let wgs84 = Crs::wgs84()?;
let webmerc = Crs::web_mercator()?;
let t = Transformer::new(wgs84, webmerc)?;
let input = Coordinate { x: 9.0, y: 48.0 };
let output = t.transform(&input)?;
println!("Web Mercator: x = {}, y = {}", output.x, output.y);
Ok(())
}
What’s New in 0.1.3
oxiarc-deflate/oxiarc-lzwupdated from 0.3.6 to 0.4.0oxih5updated from 0.2.0 to 0.2.2oxifftupdated from 0.3 to 0.4.1oxicudaupdated from 0.5.0 to 0.5.3oxiz-solver/oxiz-coreupdated from 0.2.4 to 0.3.2wideupdated from 1 to 1.6 — deprecation-warning cleanup in the SIMD scalar power path, no output change
Tips
- No action needed for most users. There is no breaking change and no behavior change in this release —
cargo updateis enough. - If you write GGXF grids via OxiProj’s
oxih5integration, this release’s files inherit OxiH5 0.2.2’s interop audit — worth a re-export if you’re distributing grid files to consumers that useh5py/netCDF4-pythonrather than OxiProj to read them back. - If you use OxiProj’s GPU reprojection path, upgrading picks up OxiCUDA’s async-copy race-condition fix silently — no code change on your side.
- If you depend on
oxiproj-projections::simd_scalar::SimdF64x4directly (most users go through theoxiprojfacade and never see this type), thepowi/powfmethods still work identically; just don’t be surprised the internal call changed frompowftopowf_simd. - If you build with
-D warningsagainstwide1.6 in your own crate, this release is a worked example of the deprecated-powf→powf_simdmigration.
This is the foundation
0.1.3 leans on the same COOLJAPAN stack as always — oxisql-sqlite-compat for the C-free EPSG engine, oxih5 for GGXF grids, oxiblas for Helmert LSQ, oxicuda for GPU reprojection, oxiz for SMT-verified Helmert bounds, and oxiarc-deflate/lzw for compressed grids — with the same north star: letting OxiGDAL drop proj-sys and build fully C-free.
Repository: https://github.com/cool-japan/oxiproj
Star the repo if you want geodesy that stays correct not just when its own code changes, but when the ground underneath it does. The era of pretending a “just deps” release doesn’t matter is over — Pure Rust means you actually get to read what changed.
— KitaSan at COOLJAPAN OÜ August 5, 2026