11 releases (breaking)

0.9.1 Aug 24, 2023
0.9.0 Jun 2, 2023
0.8.0 Nov 10, 2022
0.6.0 Jan 19, 2022
0.1.0 Oct 8, 2017

#222 in Geospatial

Download history 1536/week @ 2023-10-19 1461/week @ 2023-10-26 1688/week @ 2023-11-02 1615/week @ 2023-11-09 1447/week @ 2023-11-16 1576/week @ 2023-11-23 1596/week @ 2023-11-30 1706/week @ 2023-12-07 1851/week @ 2023-12-14 721/week @ 2023-12-21 740/week @ 2023-12-28 1703/week @ 2024-01-04 1468/week @ 2024-01-11 1615/week @ 2024-01-18 1529/week @ 2024-01-25 1172/week @ 2024-02-01

6,072 downloads per month
Used in 16 crates (5 directly)

MIT license

113K SLoC


Build Status

Low level GDAL bindings for Rust. The build script will try to auto-dectect the installed GDAL version.


  • mapping of data types
  • raster (GDAL) and vector (OGR) operations
  • error handling
  • spatial reference operations


The build script should work an Linux and Windows systems. It can be configured with a couple of environment variables:

  • if GDAL_INCLUDE_DIR or GDAL_LIB_DIR are defined, they will be used
  • otherwise, if GDAL_HOME is defined, the build script looks for GDAL_HOME/include, GDAL_HOME/lib and GDAL_HOME/bin
  • finally, pkg-config is queried to determine the GDAL location
  • you can define GDAL_STATIC to link GDAL statically

The include directories are only used if you choose to generate the bindings at build time.

On Linux, building should work out-of-the-box.

On Windows, the easiest solution is to point the GDAL_HOME environment variable to the GDAL folder.

  • windows-msvc requires gdal_i.lib to be found in %GDAL_HOME%\lib.
  • windows-gnu requires either gdal_i.lib in %GDAL_HOME%\lib OR gdal{version}.dll in %GDAL_HOME%\bin.

Generated bindings

By default, gdal-sys will detect the version of libgdal you have installed and attempt to use prebuilt bindings corresponding to that version. Alternatively, you can generate your own bindings from your libgdal installation by specifying the bindgen feature.

Creating prebuilt bindings

If a new version of GDAL is released, you (as a gdal contributor) can generate new bindings for inclusion in the gdal-sys source distribution by building with the bindgen feature, and then copying the generated file. For example (the hash will differ in your build):

$ cargo build --features bindgen
$ cp target/debug/build/gdal-sys-db833e3088b78e57/out/bindings.rs gdal-sys/prebuilt-bindings/gdal_3.6.rs