MCPcopy Index your code
hub / github.com/cool-japan/oxigdal

github.com/cool-japan/oxigdal @v0.1.6

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.1.6 ↗ · + Follow
47,931 symbols 175,693 edges 2,402 files 19,606 documented · 41%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

OxiGDAL

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

Metric Value
Version 0.1.6 (released 2026-06-15)
Rust SLoC ~580K across 1,934 .rs files
Total SLoC 565,681 (all languages)
Workspace crates 78
Tests 14,605 passing (58 skipped), 0 failures; 405 doc tests passing
Format drivers 18 (GeoTIFF/COG, GeoJSON, GeoParquet, Zarr, FlatGeobuf, Shapefile, NetCDF, HDF5, GRIB, JPEG2000, VRT, COPC/LAS, GeoPackage, MBTiles, PMTiles, GPX, KML, TopoJSON)
EPSG definitions 211+ embedded (all UTM zones, national grids), O(1) lookup
Map projections 20+ (UTM 1-60, Web Mercator, LCC, Albers, Polar Stereo, Japan Plane Rect, ...)
Supported platforms Linux, macOS, Windows, WASM, iOS, Android, embedded (no_std)
Estimated dev cost $20.97M equivalent (COCOMO)

Why OxiGDAL?

GDAL (C/C++) OxiGDAL (Rust)
Dependencies C/C++ toolchain, PROJ, GEOS, libcurl, ... cargo add oxigdal
Cross-compilation Complex per-target Trivial (WASM, iOS, Android, embedded)
Memory safety Manual management Guaranteed by Rust
Concurrency Thread-unsafe APIs Fearless concurrency
Binary size ~50MB+ monolith Pay-for-what-you-use features
WASM Not supported < 1MB gzipped bundle
Error handling C error codes Rich typed Result<T, OxiError>
Async I/O Blocking only First-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

Format Read Write Async Cloud Notes
GeoTIFF / COG yes yes yes yes BigTIFF, overviews, HTTP range
GeoJSON yes yes yes yes RFC 7946, streaming, GeoArrow
GeoParquet yes yes yes yes Arrow-native, 10x faster than GeoPandas
Zarr v2/v3 yes yes yes yes Sharding, codec pipeline
FlatGeobuf yes yes yes yes Spatial filter during decode
Shapefile yes yes SHP/SHX/DBF
NetCDF yes partial CF conventions, unlimited dims
HDF5 yes partial Chunking, groups, attributes
GRIB1/GRIB2 yes Meteorological parameter tables
JPEG2000 yes Wavelet DWT, tier-1
VRT yes yes Band math, mosaic
COPC/LAS yes Point cloud, octree spatial index
GeoPackage yes SQLite-based, vector features + tiles
MBTiles yes yes Tile storage, TMS/XYZ
PMTiles v3 yes yes Hilbert curve, single-file archive

Feature Flags

Feature Default Description
geotiff yes GeoTIFF / Cloud Optimized GeoTIFF
geojson yes GeoJSON (RFC 7946)
shapefile yes ESRI Shapefile
full no All 15 format drivers
proj no CRS transformations (20+ projections, 211+ EPSG)
algorithms no SIMD raster/vector algorithms
cloud no S3, GCS, Azure Blob storage
async no Async I/O traits
arrow no Apache Arrow zero-copy
gpu no GPU acceleration (wgpu)
ml no Machine learning pipeline
server no OGC WMS/WFS tile server
security no AES-256-GCM, TLS 1.3, RBAC
distributed no Distributed cluster support
streaming no Real-time stream processing
gpkg no GeoPackage format support
pmtiles no PMTiles v3 format support
mbtiles no MBTiles format support
copc no COPC/LAS point cloud
index no Spatial indexing and geometry operations
services no OGC 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

Crate Integration
oxigdal-streaming Real-time stream processing
oxigdal-kafka Apache Kafka
oxigdal-kinesis AWS Kinesis
oxigdal-pubsub Google Pub/Sub
oxigdal-mqtt MQTT / IoT
oxigdal-websocket WebSocket 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

Extension points exported contracts — how you extend this code

DataSource (Interface)
Trait for synchronous data sources [9 implementers]
crates/oxigdal-core/src/io/traits.rs
AnomalyDetector (Interface)
Anomaly detector trait. [12 implementers]
crates/oxigdal-observability/src/anomaly/mod.rs
EvictionPolicy (Interface)
Eviction policy trait [6 implementers]
crates/oxigdal-cache-advanced/src/eviction.rs
Augmentation (Interface)
Trait for data augmentation transforms. [15 implementers]
crates/oxigdal-ml-foundation/src/augmentation/mod.rs
Codec (Interface)
Trait for compression/decompression codecs [8 implementers]
crates/oxigdal-drivers/zarr/src/codecs/mod.rs
OptimizationRule (Interface)
Optimization rule trait. [6 implementers]
crates/oxigdal-query/src/optimizer/rules/mod.rs
BenchCodec (Interface)
Private adapter trait — uniformises the slight signature differences between concrete codecs (some `decompress` variants [8 …
crates/oxigdal-compress/src/benchmark.rs
BenchmarkScenario (Interface)
Benchmark scenario trait. All benchmark scenarios must implement this trait to be executable within the benchmarking fr [30 …
crates/oxigdal-bench/src/scenarios/mod.rs

Core symbols most depended-on inside this repo

expect
called by 12427
crates/oxigdal-python/src/expression.rs
to_string
called by 10214
crates/oxigdal-kafka/src/schema_registry/compatibility.rs
map
called by 3827
crates/oxigdal-gpu/src/compute.rs
push
called by 2842
crates/oxigdal-etl/src/stream.rs
collect
called by 2591
crates/oxigdal-bench/src/report.rs
ok
called by 1500
crates/oxigdal-pmtiles/src/validate.rs
iter
called by 1452
crates/oxigdal-wasm/src/tile.rs
clone
called by 1378
crates/oxigdal-node/src/buffer.rs

Shape

Function 22,661
Method 18,784
Class 4,977
Enum 1,326
Interface 183

Languages

Rust99%
TypeScript1%
Python1%
Kotlin1%

Modules by API surface

crates/oxigdal-python/tests/test_oxigdal.py148 symbols
demo/cog-viewer/oxigdal_wasm.js141 symbols
crates/oxigdal-cli/tests/cli_test.rs126 symbols
crates/oxigdal-geojson/tests/geojson_test.rs125 symbols
crates/oxigdal-gpkg/tests/vector_test.rs123 symbols
crates/oxigdal-gateway/src/loadbalancer/advanced.rs111 symbols
crates/oxigdal-gateway/src/graphql/split/types.rs111 symbols
crates/oxigdal-workflow/src/integrations/external.rs110 symbols
crates/oxigdal-gpu/src/compositing.rs108 symbols
crates/oxigdal-observability/src/tracing/distributed/types.rs106 symbols
crates/oxigdal-observability/src/dashboard.rs103 symbols
crates/oxigdal-gateway/src/websocket/channel/types.rs101 symbols

Datastores touched

(mysql)Database · 1 repos
(mongodb)Database · 1 repos
gisDatabase · 1 repos
mydbDatabase · 1 repos
dbDatabase · 1 repos
gisDatabase · 1 repos
timescaleDatabase · 1 repos
dbDatabase · 1 repos

For agents

$ claude mcp add oxigdal \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page