OxiGDAL

June 16, 2026 · View on GitHub

Pure Rust Geospatial Data Abstraction Library — Production-Grade GDAL Alternative

Crates.io Documentation Rust License COOLJAPAN

OxiGDAL is a comprehensive, production-ready geospatial data abstraction library written in 100% Pure Rust with zero C/C++/Fortran dependencies in default features. Released as v0.1.6 on 2026-06-15, it delivers ~580K Rust SLoC across 78 workspace crates, covering 18 geospatial format drivers, full CRS transformations, raster/vector algorithms, cloud-native I/O, GPU acceleration, enterprise security, and cross-platform bindings (Python, Node.js, WASM, iOS, Android).

Project Statistics

MetricValue
Version0.1.6 (released 2026-06-15)
Rust SLoC~580K across 1,934 .rs files
Total SLoC565,681 (all languages)
Workspace crates78
Tests14,605 passing (58 skipped), 0 failures; 405 doc tests passing
Format drivers18 (GeoTIFF/COG, GeoJSON, GeoParquet, Zarr, FlatGeobuf, Shapefile, NetCDF, HDF5, GRIB, JPEG2000, VRT, COPC/LAS, GeoPackage, MBTiles, PMTiles, GPX, KML, TopoJSON)
EPSG definitions211+ embedded (all UTM zones, national grids), O(1) lookup
Map projections20+ (UTM 1-60, Web Mercator, LCC, Albers, Polar Stereo, Japan Plane Rect, ...)
Supported platformsLinux, macOS, Windows, WASM, iOS, Android, embedded (no_std)
Estimated dev cost$20.97M equivalent (COCOMO)

Why OxiGDAL?

GDAL (C/C++)OxiGDAL (Rust)
DependenciesC/C++ toolchain, PROJ, GEOS, libcurl, ...cargo add oxigdal
Cross-compilationComplex per-targetTrivial (WASM, iOS, Android, embedded)
Memory safetyManual managementGuaranteed by Rust
ConcurrencyThread-unsafe APIsFearless concurrency
Binary size~50MB+ monolithPay-for-what-you-use features
WASMNot supported< 1MB gzipped bundle
Error handlingC error codesRich typed Result<T, OxiError>
Async I/OBlocking onlyFirst-class async

Quick Start

[dependencies]
oxigdal = "0.1"  # GeoTIFF + GeoJSON + Shapefile by default

# Full feature set:
oxigdal = { version = "0.1", features = ["full"] }
use oxigdal::Dataset;

fn main() -> oxigdal::Result<()> {
    let dataset = Dataset::open("world.tif")?;
    println!("Format : {}", dataset.format());
    println!("Size   : {}x{}", dataset.width(), dataset.height());
    println!("CRS    : {}", dataset.crs().name());
    Ok(())
}

Architecture

78 workspace crates organized into functional layers:

Core & Algorithms
  oxigdal                    Umbrella crate (unified API entry-point)
  oxigdal-core               Types, traits, async I/O, Arrow buffers, no_std core
  oxigdal-proj               Pure Rust PROJ: 20+ projections, 211+ EPSG, WKT2
  oxigdal-algorithms         SIMD raster/vector algorithms (AVX2, AVX-512, NEON)
  oxigdal-index              Spatial indexing (R-tree, grid, geometry validation/operations)
  oxigdal-qc                 Data validation, anomaly detection, quality scoring

Format Drivers (15 formats)
  geotiff      GeoTIFF/COG   BigTIFF, HTTP range, overviews, DEFLATE/LZW/ZSTD/JPEG
  geojson      GeoJSON       RFC 7946, streaming parser, GeoArrow zero-copy
  geoparquet   GeoParquet    Arrow native, spatial predicate pushdown, 10x faster
  zarr         Zarr v2/v3    Sharding, codec pipeline, consolidated metadata
  flatgeobuf   FlatGeobuf    Packed Hilbert R-tree, spatial filter during decode
  shapefile    Shapefile     SHP/SHX/DBF, full attribute table support
  netcdf       NetCDF        CF conventions, unlimited dims, group hierarchies
  hdf5         HDF5          Hierarchical, chunking, compression, attributes
  grib         GRIB1/2       Meteorological parameter/level tables
  jpeg2000     JPEG2000      Wavelet DWT, full EBCOT tier-1 decoder (MQ coder, 3-pass)
  vrt          VRT           Band math, source mosaicking, on-the-fly processing
  copc         COPC/LAS      Cloud Optimized Point Cloud (LAS 1.4, octree)
  gpkg         GeoPackage    SQLite-based, vector features + tiles
  mbtiles      MBTiles       Tile storage, TMS/XYZ schemes
  pmtiles      PMTiles v3    Hilbert curve, single-file tile archive
  geojson-s    GeoJSON (streaming)  Streaming GeoJSON parser/writer/filter

Cloud & Storage
  oxigdal-cloud              S3 / GCS / Azure Blob backends with HTTP range support
  oxigdal-cloud-enhanced     Multi-cloud orchestration, auto-tiering
  oxigdal-drivers-advanced   Multi-part S3, ADLS, GCS optimized reads
  oxigdal-compress           OxiArc compression: Deflate, LZ4, Zstd, BZip2, LZW
  oxigdal-cache-advanced     Multi-tier: in-memory LRU -> disk -> Redis
  oxigdal-rs3gw              Rust S3-compatible gateway

Domain Modules
  oxigdal-3d                 3D Tiles 1.0 (B3DM, I3DM, PNTS), glTF, Delaunay
  oxigdal-terrain            DEM, hydrology, viewshed, TRI/TPI, watershed
  oxigdal-temporal           Time-series datacube, change detection, gap filling
  oxigdal-analytics          Spatial stats, Getis-Ord Gi*, clustering, zonal ops
  oxigdal-sensors            IoT sensor ingestion, calibration, SOS
  oxigdal-metadata           ISO 19115:2014, ISO 19139 XML, FGDC CSDGM
  oxigdal-stac               SpatioTemporal Asset Catalog 1.0.0 client
  oxigdal-query              SQL-like geospatial query engine with optimizer

Enterprise & Infrastructure
  oxigdal-server             OGC server: WMS 1.3.0, WFS 2.0.0
  oxigdal-gateway            API gateway: JWT, OAuth2, rate limiting
  oxigdal-security           AES-256-GCM, ChaCha20-Poly1305, Argon2id, RBAC/ABAC
  oxigdal-observability      Prometheus metrics, OpenTelemetry tracing, alerting
  oxigdal-services           WMS/WFS endpoints, health checks
  oxigdal-workflow           Workflow automation and scheduling
  oxigdal-distributed        Distributed partitioning and sharding
  oxigdal-cluster            Raft consensus-based cluster coordination
  oxigdal-ha                 High-availability failover and leader election
  oxigdal-postgis            PostGIS connector
  oxigdal-db-connectors      PostgreSQL, SQLite, DuckDB connectors

Streaming & Messaging
  oxigdal-streaming          Real-time stream processing
  oxigdal-kafka              Apache Kafka integration
  oxigdal-kinesis            AWS Kinesis integration
  oxigdal-pubsub             Google Pub/Sub integration
  oxigdal-mqtt               MQTT IoT sensor messaging
  oxigdal-websocket          WebSocket real-time updates
  oxigdal-ws                 WS/WSS server
  oxigdal-etl                ETL pipeline engine
  oxigdal-sync               CRDT-based offline sync (OR-Set, Merkle tree, vector clocks)

Platform Bindings
  oxigdal-wasm               WebAssembly: WasmCogViewer JS/TS API, < 1MB gzipped
  oxigdal-pwa                Progressive Web App: Service Worker, offline-first
  oxigdal-offline            Offline-first sync, operation queue, delta sync
  oxigdal-node               Node.js N-API bindings (napi-rs, CJS + ESM)
  oxigdal-python             Python bindings (PyO3/Maturin, NumPy, manylinux wheels)
  oxigdal-jupyter            Jupyter kernel (evcxr + plotters rich display)
  oxigdal-mobile             iOS (Swift FFI) and Android (Kotlin/JNI)
  oxigdal-mobile-enhanced    Battery/network-aware mobile scheduling
  oxigdal-embedded           no_std for microcontrollers (heapless, embedded-hal)
  oxigdal-noalloc            no_std geospatial primitives (zero heap allocation)
  oxigdal-edge               Edge computing, streaming sensor ingestion, local DB

GPU & ML
  oxigdal-gpu                GPU acceleration (wgpu compute shaders)
  oxigdal-gpu-advanced       Advanced GPU kernels
  oxigdal-ml                 ML pipeline integration
  oxigdal-ml-foundation      Foundation model support

Tooling
  oxigdal-cli                CLI: info, convert, dem, rasterize, warp (Clap)
  oxigdal-dev-tools          File watching, progress bars (indicatif), diff utils
  oxigdal-bench              Criterion benchmarks with pprof flamegraph profiling
  oxigdal-examples           Runnable examples

Format Support

FormatReadWriteAsyncCloudNotes
GeoTIFF / COGyesyesyesyesBigTIFF, overviews, HTTP range
GeoJSONyesyesyesyesRFC 7946, streaming, GeoArrow
GeoParquetyesyesyesyesArrow-native, 10x faster than GeoPandas
Zarr v2/v3yesyesyesyesSharding, codec pipeline
FlatGeobufyesyesyesyesSpatial filter during decode
ShapefileyesyesSHP/SHX/DBF
NetCDFyespartialCF conventions, unlimited dims
HDF5yespartialChunking, groups, attributes
GRIB1/GRIB2yesMeteorological parameter tables
JPEG2000yesWavelet DWT, tier-1
VRTyesyesBand math, mosaic
COPC/LASyesPoint cloud, octree spatial index
GeoPackageyesSQLite-based, vector features + tiles
MBTilesyesyesTile storage, TMS/XYZ
PMTiles v3yesyesHilbert curve, single-file archive

Feature Flags

FeatureDefaultDescription
geotiffyesGeoTIFF / Cloud Optimized GeoTIFF
geojsonyesGeoJSON (RFC 7946)
shapefileyesESRI Shapefile
fullnoAll 15 format drivers
projnoCRS transformations (20+ projections, 211+ EPSG)
algorithmsnoSIMD raster/vector algorithms
cloudnoS3, GCS, Azure Blob storage
asyncnoAsync I/O traits
arrownoApache Arrow zero-copy
gpunoGPU acceleration (wgpu)
mlnoMachine learning pipeline
servernoOGC WMS/WFS tile server
securitynoAES-256-GCM, TLS 1.3, RBAC
distributednoDistributed cluster support
streamingnoReal-time stream processing
gpkgnoGeoPackage format support
pmtilesnoPMTiles v3 format support
mbtilesnoMBTiles format support
copcnoCOPC/LAS point cloud
indexnoSpatial indexing and geometry operations
servicesnoOGC services (WMS/WFS/WCS/WPS)

Usage Examples

GeoTIFF / COG

use oxigdal_geotiff::GeoTiffReader;
use oxigdal_core::io::FileDataSource;

let source = FileDataSource::open("elevation.tif")?;
let reader = GeoTiffReader::open(source)?;
println!("Size  : {}x{}", reader.width(), reader.height());
println!("Bands : {}", reader.band_count());

// COG tile access (HTTP range requests supported transparently)
let tile = reader.read_tile(0, 0, 0)?;

CRS Transformation

use oxigdal_proj::{Crs, Transformer};

let wgs84  = Crs::from_epsg(4326)?;
let utm54n = Crs::from_epsg(32654)?;   // UTM Zone 54N (Japan)
let tf     = Transformer::new(&wgs84, &utm54n)?;

// SIMD-vectorized batch: < 10ms for 1M points
let (easting, northing) = tf.transform(139.7671, 35.6812)?;

Raster Algorithms

use oxigdal_algorithms::raster::{hillshade, reproject, ResamplingMethod};

// SIMD hillshade (AVX2 / NEON auto-selected at runtime)
let shaded = hillshade(&dem, 315.0, 45.0)?;
let warped = reproject(&src, &target_crs, ResamplingMethod::Bilinear)?;

GeoParquet (Arrow)

use oxigdal_geoparquet::GeoParquetReader;

let reader   = GeoParquetReader::open("buildings.parquet")?;
let filter   = BoundingBox::new(135.0, 34.0, 137.0, 36.0)?;
let features = reader.read_with_bbox_filter(&filter)?;

Python Bindings

import oxigdal

ds  = oxigdal.open("satellite.tif")
arr = ds.read(1)           # returns numpy ndarray
gdf = oxigdal.read_geoparquet("buildings.parquet")  # Arrow-native

WebAssembly

import init, { WasmCogViewer } from '@cooljapan/oxigdal';
await init();

const viewer = new WasmCogViewer();
await viewer.open('https://example.com/cog.tif');

const imageData = await viewer.read_tile_as_image_data(0, 0, 0);
ctx.putImageData(imageData, 0, 0);

CLI

oxigdal info world.tif
oxigdal convert input.shp output.fgb
oxigdal dem --hillshade elevation.tif hillshade.tif
oxigdal warp --t_srs EPSG:32654 input.tif output.tif

Enterprise Features

Security (oxigdal-security, oxigdal-gateway)

  • Encryption at rest: AES-256-GCM and ChaCha20-Poly1305
  • Password hashing: Argon2id
  • Transport: TLS 1.3 via rustls (no OpenSSL)
  • Authentication: JWT, OAuth2
  • Authorization: RBAC and ABAC
  • Audit logging: SOC2 and GDPR-ready
  • Message integrity: HMAC-SHA256
  • All crypto: pure Rust (ring, rustls, aes-gcm, chacha20poly1305, argon2)

High Availability (oxigdal-ha, oxigdal-cluster)

  • Raft consensus-based cluster coordination
  • Automatic failover and leader election
  • Distributed partitioning and sharding (oxigdal-distributed)
  • Multi-tier cache: in-memory LRU -> on-disk -> Redis (oxigdal-cache-advanced)
  • CRDT-based offline sync with Merkle tree verification (oxigdal-sync)

Streaming & Messaging

CrateIntegration
oxigdal-streamingReal-time stream processing
oxigdal-kafkaApache Kafka
oxigdal-kinesisAWS Kinesis
oxigdal-pubsubGoogle Pub/Sub
oxigdal-mqttMQTT / IoT
oxigdal-websocketWebSocket real-time

OGC Services (oxigdal-server)

  • WMS 1.3.0 tile server
  • WFS 2.0.0 feature service
  • API gateway with JWT auth and rate limiting

Performance

OperationResult
COG tile access (local SSD)< 10ms
COG tile access (S3/GCS)< 100ms
GeoTIFF metadata reading< 5ms
GeoParquet vs GeoPandas10x faster
PROJ batch transform (1M pts)< 10ms
Docker image size< 50MB (vs 1GB+ for GDAL)
WASM bundle (gzipped)< 1MB

Platform Support

PlatformStatusNotes
Linux x86_64ProductionAVX2 / AVX-512 SIMD
Linux aarch64ProductionNEON SIMD
macOS Apple SiliconProductionNEON SIMD
macOS x86_64ProductionAVX2 SIMD
Windows x86_64Production
WebAssembly (wasm32)Production< 1MB bundle, IndexedDB
iOS arm64ProductionSwift FFI
Android arm64ProductionKotlin/JNI
Embedded no_stdStableheapless, embedded-hal
Python (PyPI)Productionmanylinux2014, macOS, Windows wheels
Node.js 16+Productionnapi-rs, CommonJS + ESM

COOLJAPAN Ecosystem Compliance

PolicyStatus
Pure Rust (default features)100% Rust; C/Fortran behind feature flags
No unwrap()clippy::unwrap_used = "deny" (0 in production code; 2 in non-compiled doc comments)
Workspace versionsAll via *.workspace = true
Latest cratesAll deps at latest crates.io versions
No OpenBLASUses oxiblas
No bincodeUses oxicode
No zip crateUses oxiarc-* ecosystem
No rustfftUses OxiFFT

Roadmap

ReleaseTargetFocus
v0.1.02026-02-22 (released)Independence: 68 crates, 11 drivers, ~500K SLoC, full enterprise stack
v0.1.12026-03-11 (released)EBCOT tier-1 decoder, EPSG expansion (211+), floating-point predictor, Pure Rust compression, CLI commands, 69 crates, 7,486 tests
v0.1.22026-03-17 (released)Wave 7: ogc_features/epsg refactoring, PMTiles writer, geometry validation/operations, umbrella crate integration, 76 crates, 10,935 tests
v0.1.32026-03-21 (released)wgpu 29 API fixes, libsqlite3-sys compat, macOS rpath fix, oxiarc-brotli 6-bug patch, 76 crates, 10,939 tests
v0.1.42026-04-19 (released)Wave 1 algorithms (Weiler-Atherton clipping, Karney geodesic, DE-9IM, marching squares), Wave 2 R-tree+SIMD+NoAlloc+PMTiles reader+COPC+GeoPackage B-tree, ort→oxionnx ML migration, pyo3 0.28, 12,064 tests
v0.1.52026-05-22 (released)oxigdal-gpu WGSL RayMarchUniforms layout fix eliminated 120s GPU test hang (Metal compute kernel), 78 crates, 14,605 tests
v0.1.62026-06-15 (released)Pure-Rust SQLite migration (rusqlite → oxisql-sqlite-compat), non-UTF-8 DBF encoding via encoding_rs, WKT→PROJ string conversion, W-TinyLFU + Count-Min Sketch cache eviction, HDF5 v2/v3 superblock, Delaunay triangulation, batch QC runner + GPKG/STAC/radiometric validators, Gaussian MLC sensor classification, terrain GLCM textures/TPI/geomorphons/cost-distance, Whittaker + Savitzky-Golay time-series smoothers, GPX/KML/TopoJSON vector formats, 14,605 tests
v0.2.0Q2 2026100+ projections, GPU expansion, advanced ML pipelines, JPEG2000 tier-2
v0.3.0Q3 2026Streaming v2, cloud-native tile server v2, extended STAC support
v1.0.0Q4 2026LTS commitment, enterprise compliance certifications

Development

cargo build --all-features
cargo nextest run --all-features
cargo clippy --all-features -- -D warnings
tokei .

See crates/oxigdal-examples/src/ for runnable examples.

Documentation

ResourceLocation
API Referencehttps://docs.rs/oxigdal
Getting Starteddocs/GETTING_STARTED.md
Architecturedocs/ARCHITECTURE.md
Driversdocs/DRIVERS.md
Algorithmsdocs/ALGORITHMS.md
GDAL Migrationdocs/MIGRATION.md
CHANGELOGCHANGELOG.md

Contributing

Follow COOLJAPAN policies:

  1. No unwrap() or expect() in production code
  2. Files must stay under 2,000 lines (use splitrs for refactoring)
  3. All dependencies via workspace (*.workspace = true)
  4. Run cargo clippy --all-features -- -D warnings before submitting
  5. Use cargo nextest run --all-features for testing

License

Licensed under the Apache License, Version 2.0 (LICENSE).

Acknowledgments

  • GDAL Project — original inspiration and reference implementation
  • GeoRust Community — ecosystem collaboration
  • PROJ — CRS reference and test suite
  • Specifications: GeoTIFF, COG, OGC (WMS/WFS), STAC, ISO 19115, RFC 7946

Made with love by COOLJAPAN OU (Team Kitasan)
Pure Rust · Cloud Native · WebAssembly · Production Enterprise