The Pure Rust GDAL alternative just got the one change that doesn’t touch a single line of logic — its own name.
Today we released OxiGeo 0.2.0 — the first release under a new project name. OxiGeo is what OxiGDAL is now called. Nothing about the code changed: 0.2.0 is functionally identical to v0.1.7, the production-hardening release published earlier today under the old name. What changed is every identifier that spelled out the old name: 74 crates on crates.io, the CLI binary, the Python and npm packages, the C/mobile FFI symbols, the WASM artifacts, and the environment variables all now say oxigeo instead of oxigdal.
No C. No C++. No Fortran. No PROJ/GEOS, no libsqlite3, no ring — the C-free default build carries over untouched, because the build itself didn’t change. OxiGeo still compiles to a single static binary (or a sub-1MB WASM bundle) and runs everywhere Rust runs: Linux, macOS, Windows, WASM, iOS, Android, and bare-metal no_std. This is an independent reimplementation and is not affiliated with the GDAL project — the rename makes that distinction a little cleaner too.
Why the rename matters
A name borrowed from the library you’re replacing creates its own friction over time:
- New users reasonably assume a project called “OxiGDAL” links against, wraps, or forks GDAL — it does neither
- Search results, issue trackers, and package indexes conflate the two projects by name alone
- A name tied to an existing C library’s brand is a permanent trademark-adjacent question mark
- “Oxi” + borrowed-name doesn’t scale as a naming convention once the library has fully diverged in architecture and API
OxiGeo 0.2.0 draws a clean line under all of that with a name that’s fully its own, while keeping every promise the old name made:
- All 74 publishable crates republished as
oxigeo/oxigeo-<name>— the same dependency graph, the same tiering, the same feature flags, just a new prefix - The GitHub repository moved to
github.com/cool-japan/oxigeo— oldoxigdalURLs redirect, so existing links, forks, and bookmarks keep working - v0.1.7 remains the permanent historical record of the final release under the OxiGDAL name — it isn’t being erased or yanked
- The
oxigdal-*0.1.x crates stay published on crates.io for existing users who aren’t ready to move yet —oxigeo-*supersedes them starting with 0.2.0, but nothing is pulled out from under anyone
Technical Deep Dive: what actually moved
-
Crates and Cargo identity. Every crate name changes from
oxigdal/oxigdal-<name>tooxigeo/oxigeo-<name>across all 74 published crates (the workspace has 76 total;oxigeo-pythonandoxigeo-examplesarepublish = false). Rust API types that carried the old prefix —OxiGdalErrorand siblings — becomeOxiGeo*(OxiGeoError). -
CLI and runtime identifiers. The CLI binary is
oxigeoinstead ofoxigdal. EveryOXIGDAL_*environment variable (OXIGDAL_CONFIG,OXIGDAL_HOST,OXIGDAL_PORT,OXIGDAL_WORKERS,OXIGDAL_LOG_LEVEL,OXIGDAL_DATA_DIR,OXIGDAL_CACHE_DIR) becomesOXIGEO_*. Runtime strings follow suit: the HTTP User-Agent is nowOxiGeo/1.0, the Kafka consumer group isoxigeo-etl, the ETL checkpoint directory isoxigeo-checkpoints, the edge cache directory is.oxigeo_cache, and the attestation format id isoxigeo-attestation. -
Language bindings. The PyPI package is now
oxigeo(import oxigeo, native moduleoxigeo._oxigeo). The npm packages are@cooljapan/oxigeo,@cooljapan/oxigeo-node(plus its platform packages), and@cooljapan/oxigeo-geoparquet. WASM build artifacts follow the same pattern (oxigeo_wasm*, napi artifactoxigeo.<triple>.node). -
Native and container surfaces. C/mobile FFI symbols now carry the
oxigeo_prefix; the JNI class iscom.cooljapan.oxigeo.OxiGeo; the mobile header isoxigeo_mobile.hwith include guardOXIGEO_MOBILE_H. Container images move fromoxigdal/*tooxigeo/*, and the systemd unit isoxigeo-server.service.
Getting Started
[dependencies]
oxigeo = "0.2" # GeoTIFF + GeoJSON + Shapefile by default
# Full feature set:
oxigeo = { version = "0.2", features = ["full"] }
use oxigeo::Dataset;
fn main() -> oxigeo::Result<()> {
let dataset = Dataset::open("world.tif")?;
println!("Format : {}", dataset.format());
println!("Size : {}x{}", dataset.width(), dataset.height());
println!("CRS : {}", dataset.crs().unwrap_or("unknown"));
Ok(())
}
Everything else — the 17 format drivers, the CRS transforms, the raster/vector algorithms, the four hosted WASM demos (GeoLab, GeoSentinel, GeoVault, GeoParquet Live) — works exactly as it did under the OxiGDAL name, because it’s the same ~747K-SLoC, 76-crate codebase underneath.
What’s New in 0.2.0
- Project renamed: OxiGDAL → OxiGeo. A rename-only release with no feature or behavior changes beyond identifiers.
- GitHub repository moved to
github.com/cool-japan/oxigeo; oldoxigdalURLs redirect. - All 74 publishable crates republished under the
oxigeo/oxigeo-<name>names. - Full migration table shipped in
CHANGELOG.mdcovering crates, the CLI binary, environment variables, Python, npm, C/mobile FFI, Rust API types, WASM artifacts, container images, and runtime identifiers (Kafka consumer group, ETL checkpoint dir, edge cache dir, attestation format id, HTTP User-Agent). - v0.1.7 stays put as the final release published under the OxiGDAL name — nothing about it changes or gets yanked.
- The
oxigdal-*0.1.x crates remain published on crates.io for existing users;oxigeo-*supersedes them starting with 0.2.0. - Confirmed independent reimplementation, not affiliated with the GDAL project.
Tips
- Bump the dependency name, not just the version. A
Cargo.tomlupgrade from OxiGDAL to OxiGeo is a rename, not a point release — changeoxigdal = "0.1.7"tooxigeo = "0.2"(or the equivalentoxigeo-<name>for any driver sub-crate you depend on directly), not just the version number. - Rust import paths change with the crate name. Anywhere your code says
oxigdal::oroxigdal_core::,oxigdal_proj::, etc., it becomesoxigeo::/oxigeo_core::/oxigeo_proj::— this is a straightforward, mechanical find-and-replace with no API surface changes underneath. - Rename your environment variables in one pass. If you deploy with
OXIGDAL_CONFIG,OXIGDAL_HOST, or any of the otherOXIGDAL_*variables, grep your deployment configs (Docker Compose, Kubernetes manifests, systemd unit files) for theOXIGDAL_prefix and switch toOXIGEO_— the old variables are not read by 0.2.0. - No rush if you’re on Python or npm.
pip install oxigeo/npm install @cooljapan/oxigeoare the new install lines going forward, but theoxigdalPyPI package and@cooljapan/oxigdalnpm packages keep working at their existing 0.1.x versions — migrate on your own schedule. - Container and systemd users: check your unit files. If you deploy
oxigdal/*images or theoxigdal-server.servicesystemd unit, the 0.2.0 equivalents areoxigeo/*andoxigeo-server.servicerespectively. - Bookmarks and CI references to the old GitHub URL still work.
github.com/cool-japan/oxigdalredirects togithub.com/cool-japan/oxigeo, so existing forks, stars, andgit remoteURLs aren’t broken by the move — but pointing new clones and CI configs at the new URL directly is one less redirect hop.
This is the foundation
OxiGeo leans on the same Pure Rust COOLJAPAN stack it did as OxiGDAL, unchanged by the rename: CRS transforms run on OxiProj, HDF5 and NetCDF read/write through oxih5 and oxinetcdf, SQLite via oxisql-sqlite-compat (Limbo), TLS via OxiTLS, compression across the format drivers via the OxiArc family (oxiarc-zstd, -lz4, -deflate, -lzw, -bzip2, -brotli, -snappy, -archive), ML tensor math via SciRS2-Core, model export and inference validated against OxiONNX, and model-weight serialization on OxiCode instead of bincode. Every one of those is itself Pure Rust — which is how a 76-crate, ~747K-SLoC workspace keeps a C-free default build with no hidden native dependency anywhere in the tree, under either name.
Repository: https://github.com/cool-japan/oxigeo
Star the repo if you’d rather your geospatial dependency have a name of its own than one borrowed from the library it replaced. The 76 crates, the 17 format drivers, and the C-free build are exactly as real as they were yesterday — just under the name they were always going to end up with.
— KitaSan at COOLJAPAN OÜ July 20, 2026