COOLJAPAN
← All posts

OxiGDAL 0.1.6 Released — The Last C Dependency Falls: Pure Rust SQLite, TLS, and Three New Formats

OxiGDAL 0.1.6 eliminates rusqlite/libsqlite3-sys and ring from the workspace — SQLite now runs on oxisql-sqlite-compat (Limbo) and TLS on OxiTLS, making the default build 100% C/FFI-free. Plus GPX/KML/TopoJSON formats, non-UTF-8 DBF encoding, Delaunay triangulation, HDF5 v2/v3 superblocks, terrain GLCM/geomorphons/cost-distance, batch QC validators, and W-TinyLFU caching. 78 crates, 18 drivers, 14,605 tests.

release oxigdal gdal geospatial sqlite tls pure-rust terrain gpx kml

The Pure Rust GDAL reaches a milestone: not one line of C or C++ in the default build — including SQLite and TLS.

Today we released OxiGDAL 0.1.6 — the release that retires the last C dependencies from the workspace. SQLite moves to the Pure Rust OxiSQL (Limbo) engine, TLS moves to OxiTLS, and ring is gone. The default build is now 100% C/FFI-free, end to end.

No C. No C++. No Fortran. No PROJ/GEOS — and now no libsqlite3, no ring. Just memory-safe geospatial processing that compiles to a single static binary or a sub-1 MB WASM bundle and runs everywhere.

Why OxiGDAL 0.1.6 is a game changer

For most of the geospatial world, “Pure Rust” has an asterisk: somewhere down the dependency tree sits a C SQLite for GeoPackage/MBTiles and a C crypto library for TLS. OxiGDAL 0.1.6 removes that asterisk. With this release the workspace is 78 crates with 18 format drivers — GPX, KML, and TopoJSON join the lineup — backed by 14,605 passing tests (58 skipped, 0 failures) and 405 doc tests.

The defining change is sovereignty over the two hardest-to-replace native dependencies:

Technical Deep Dive: what 0.1.6 rebuilt

  1. Pure Rust SQLite migration (workspace-wide) rusqlite and libsqlite3-sys are fully removed from the default feature closure. The affected crates — oxigdal-db-connectors, oxigdal-gpkg, oxigdal-drivers-advanced, oxigdal-mbtiles, oxigdal-pmtiles — now use oxisql-sqlite-compat 0.1.5 (Limbo). A new MbTilesConn adapter in oxigdal-pmtiles (open, open_memory, query_count, query_text, query_blob) backs the PMTiles MBTiles export path on OxiSQL. (One honest caveat: Limbo does not yet fire AFTER INSERT/UPDATE/DELETE triggers, so 11 GeoPackage change-tracking tests are #[ignore]d with an explanatory note.)

  2. Pure Rust TLS & crypto (oxigdal-security) The TLS stack moves from ring/webpki-roots to oxitls-core + oxitls-adapter-rustls-rustcrypto + oxitls-webpki-roots, 100% Pure Rust by default with tls feature gating preserved. PBKDF2 key derivation shifts from ring::pbkdf2 to pbkdf2::pbkdf2_hmac::<sha2::Sha256>, and argon2/aes-gcm/chacha20poly1305 remain as the Pure Rust primitives. ring is removed from workspace dependencies entirely.

  3. New vector formats & encoding correctness The umbrella open() and vector streaming now recognize GPX, KML, and TopoJSON by extension. oxigdal-shapefile gains non-UTF-8 DBF support via encoding_rs: resolve_cpg() maps CPG labels, resolve_ldid() maps the LDID byte to an IANA encoding, and open_with_encoding() / read_with_encoding() accept explicit overrides — so legacy Shapefiles in Shift-JIS, Latin-1, and friends read correctly. oxigdal-proj adds wkt_to_proj_string(), letting from_wkt CRS objects flow directly into a Transformer.

  4. Analysis depth: terrain, indexing, QC, and time series oxigdal-terrain adds GLCM texture derivatives (contrast, dissimilarity, homogeneity, energy, correlation, ASM), TPI annulus/standardized variants with parallel editions, the Jasiewicz & Stepinski geomorphons 10-class landform classifier, and cost-distance / least-cost-path. oxigdal-index gains Delaunay triangulation (triangulate, Bowyer–Watson) with convex-hull extraction. oxigdal-qc adds a BatchRunner over directories plus GeoPackage, STAC, and per-band radiometric validators (Sentinel-2, Landsat-8/9, custom profiles). oxigdal-temporal completes gap-filling with Whittaker and Savitzky–Golay smoothers; oxigdal-sensors adds a Gaussian Maximum-Likelihood classifier; oxigdal-copc adds full-waveform LiDAR (point formats 9/10); oxigdal-drivers/hdf5 adds the HDF5 v2/v3 superblock parser with Jenkins lookup3 checksum validation; and oxigdal-cache-advanced adds a W-TinyLFU eviction policy backed by a Count-Min Sketch.

Getting Started

cargo add oxigdal

The unified opener now reaches GPX, KML, and TopoJSON alongside everything else:

use oxigdal::Dataset;

fn main() -> oxigdal::Result<()> {
    // Routed by extension to the GPX, KML, TopoJSON, or any other driver.
    let dataset = Dataset::open("track.gpx")?;
    println!("Format : {}", dataset.format());
    println!("CRS    : {}", dataset.crs().name());
    Ok(())
}

Reading a legacy Shapefile in a non-UTF-8 codepage is now explicit and correct:

use oxigdal_shapefile::ShapefileReader;

// Force Shift-JIS for a DBF with no CPG sidecar.
let reader = ShapefileReader::open_with_encoding("japan.shp", "shift_jis")?;

What’s New in 0.1.6

Tips

This is the foundation

OxiGDAL is the geospatial layer of the COOLJAPAN Pure Rust ecosystem, and 0.1.6 deepens that integration more than any release before it. SQLite now runs on OxiSQL (oxisql-sqlite-compat, Limbo), TLS on OxiTLS (oxitls-core and the RustCrypto adapter), streaming state on OxiStore, ML inference on OxiONNX, compression on OxiArc, serialization on OxiCode, numerics on SciRS2-Core, and S3-compatible storage on RS3GW. Every one of those is itself Pure Rust — which is how OxiGDAL gets to a C-free default build with no hidden native dependency anywhere in the tree.

Repository: https://github.com/cool-japan/oxigdal

Star the repo if you want a geospatial stack with zero C — SQLite and TLS included.

Pure Rust cloud-native geospatial is here — fast, safe, and sovereign.

KitaSan at COOLJAPAN OÜ June 16, 2026

↑ Back to all posts