Skip to content
Switch branches/tags

Latest commit

…addons (#2097)

When multi-addon contains addons which install only html manual page
and manual page contains link to these addon, link source URI is wrong
pointed to GISBASE directory e.g. i.sentinel.mask has "Overview of
i.sentinel toolset" link to the i.sentinel.html with wrong URI
"file:///usr/lib64/grass81/docs/html/i.sentinel.html". The correct URI link
path for the r.sentinel multi-addon html page should be "i.sentinel.html".

* Keep the GRASS GIS logo URI in the multi-addon manual page if it is a 
remote URL


Failed to load latest commit information.
Latest commit message
Commit time

Build Status GCC C/C++ standards check Python code quality check General linting Ubuntu OSGeo4W CentOS

GRASS GIS Repository


GRASS GIS ( is a Geographic Information System used for geospatial data management and analysis, image processing, graphics/map production, spatial modeling, and visualization.

Launch this repository in Binder and experiment with GRASS's Python API in Jupyter Notebooks by clicking the button below:


How to get write access here

In general: you don't really need write access as you can simply open a pull request to contribute to GRASS GIS. See CONTRIBUTING file for more details.

Want to become a core developer? See Procedure for gaining Git write access

How to compile GRASS

See INSTALL file.

Yes, you should really read INSTALL. In addition, there are detailed compile instructions in the Wiki.


Build a docker image using the downloaded source code (run this in the directory containing the source code):

docker build -t grassgis80 .

A test run (assuming you have the existing GRASS GIS test location; it can be downloaded from here)

# case 1: launching in the grassdata directory in which the location is stored:
docker run -it --rm --user=$(id -u):$(id -g) --volume $(pwd):/data \
    --env HOME=/data/ grassgis80 grass --text nc_basic_spm_grass7/user1 \
        --exec g.region -p

# case 2: launching anywhere
docker run -it --rm --user=$(id -u):$(id -g) \
    --volume /your/test/grassdata/:/data --env HOME=/data/ grassgis80 \
        grass /data/nc_basic_spm_grass7/PERMANENT --exec g.region -p

Note that the first grassgis80 is the name of the image while the second grass is the name of the executable.

To run the tests (again assuming local location):

docker run -it --rm --user=$(id -u):$(id -g) \
    --volume /your/test/grassdata/:/data --env HOME=/data/ -w /code/grass \
        grassgis80 grass /data/nc_basic_spm_grass7/PERMANENT --exec \
            python -m grass.gunittest.main \
                --location nc_basic_spm_grass7 --location-type nc

Note: If you compiled locally before building the Docker image, you may encounter problems as the local configuration and the locally compiled files are copied to and used in the Docker image. To make sure you don't have this issue, clean all the compiled files from the source code:

make distclean

How to generate the 'Programmer's Manual'

You can locally generate the GRASS GIS Programmer's Manual.

This needs doxygen ( and optionally Graphviz dot (

To build the GRASS programmer's documentation, run

make htmldocs

Or to generate documentation as single html file (recommended for simple reading)

make htmldocs-single

This takes quite some time. The result is in lib/html/index.html which refers to further document repositories in


The master file is: ./grasslib.dox where all sub-documents have to be linked to.

To generate the documents in PDF format, run

make pdfdocs