Contributing
This project runs on its issue tracker: most shipped features started as someone's report or PR, including contributions from GDAL's own lead maintainer. Here's how to join in.
Ways to help
- Report precisely. A failing input file + the exact options + the output of
Gdal.getLastErrorMsg()turns a vague bug into a fixable one (see error handling). - Answer issues. Many tracker threads are usage questions; the community has historically carried these (the
-a_ullrfix in #53 came from a user). - Pick up a wish. Open feature requests with clear scope:
gdal_polygonize(#93),/vsicurl/networking (#67), job cancellation (#91),gdalsrsinfo(#79). - Model PRs to copy: the JPEG/ZSTD/LERC codec series (#105, #107, #108), small, focused, each with a regression test, and
clearFS()(#109).
Development setup
git clone https://github.com/bugra9/gdal3.js
cd gdal3.js
pnpm install
The repository is a pnpm monorepo: packages/ holds the library (core recipe, wasm builds, iOS/Android), apps/ the converter apps and this website. Building the wasm runs through cpp.js in a standardized Docker image, so it is reproducible without assembling an Emscripten toolchain locally; rebuilding wasm is not required for most JS-level contributions anyway.
Running tests
The wasm test suite (packages/wasm-test) drives the built module in a real browser via Playwright: a smoke test asserts the driver registry (100+ drivers), and the raster/vector driver suites exercise read/write across the registry, permuting creation options. If you touch native surface or drivers, add or extend a spec there. Codec PR #105 shipped with a JPEG-compressed fixture and assertions, which is the bar to aim for.
Pull request guidelines
- One concern per PR; explain the why in the description (linking the issue is ideal).
- Include a test that fails without your change when feasible.
- For new native libraries, state the upstream license in the PR (the codec PRs did this: BSD for zstd, Apache-2.0 for LERC).
- Don't bump package versions; releases are cut by the maintainer.
Licensing
gdal3.js is released under the MIT License, and contributions are accepted under it. The default build ships as LGPL-2.1-or-later because it bundles LGPL libraries (GEOS, SpatiaLite, libiconv); bundled third-party libraries keep their own licenses (GDAL itself is MIT/X). You can override the cpp.js config to exclude the copyleft deps for a permissive-only build.