What's new in v3
v3 is the project's second life: same mission (GDAL where JavaScript runs), rebuilt on cpp.js so it reaches phones, exposes far more of GDAL, and stops fighting bundlers.
Headlines
- React Native. GDAL as a real native library on iOS and Android over JSI (New Architecture supported): the same JavaScript you write for the web, without browser memory ceilings.
- The cpp.js switch. GDAL's C++ classes are bound automatically; bundler plugins (Vite, Webpack, Rollup, Rspack, Metro) own the asset story that filled the v2 issue tracker.
- GDAL 3.13.1 with its driver registry, CI-asserted on every build.
A bigger API
v2 exposed five GDAL operations; v3 exposes 13: translate, vectorTranslate (ogr2ogr), warp, rasterize, buildVRT, multiDimTranslate, demProcessing (gdaldem), grid, nearblack, footprint, plus info / vectorInfo / multiDimInfo, and the class-level API underneath: Dataset (transactions, layers, overviews, GCPs…), Driver (capability introspection, create/createCopy), GCP, SubdatasetInfo, and ~80 utility statics on Gdal. Browse the API reference.
New codecs
JPEG-, ZSTD- and LERC-compressed GeoTIFFs & COGs open and write out of the box (-co COMPRESS=JPEG|ZSTD|LERC|LERC_ZSTD), community PRs #105/#107/#108 answering issues #103 and #99.
Filesystem, grown up
The v2 mystery of /output became a real API: OPFS-backed persistence (fs: { opfs: true }), /vsimem/ and /vsizip/, and management calls (readDir, mkdirRecursive, unlink, rename, copyFile), plus getFileList for multi-file outputs. The VFS guide has the tour.
v3 vs v2, in one table
| V2 (2.8.X) | V3 | |
|---|---|---|
| Runtimes | Browser, Node | Browser, Node, iOS, Android, edge |
| Setup | Manual asset paths / copy plugins | Bundler plugins, zero asset config |
| API | 5 operations + helpers | 13 operations + full class surface |
| GDAL | 3.8.x line | 3.13.1 |
| Files | /output + getFileBytes | OPFS / host FS + management API |
| License | LGPL-2.1 | MIT |
Performance: the benchmarks measure native GDAL against gdal3.js in the browser and Node, per operation. A v2-vs-v3 comparison isn't on the table: both run GDAL in wasm, so the comparison that matters is wasm versus native, not one wasm version against another. The mobile case needs none: native beats wasm-in-a-tab structurally.