GRASS GSoC Ideas 2026

From GRASS-Wiki
Jump to navigation Jump to search

About

Important: While we are still an OSGeo project, we changed our fiscal sponsor to NumFOCUS.

As a result, GRASS participates in GSoC under the NumFOCUS umbrella organization.

Read more about our governance on GRASS website.

AI Tool Usage Policy

We acknowledge that applicants may use AI tools (like ChatGPT, Copilot, etc.) to assist with proposal writing and coding. However:

  • Your proposal should reflect your own understanding and voice. AI-generated "slop" (overly generic or regurgitated content) is easy to spot and will hurt your application.
  • We evaluate applications primarily on GitHub contributions and communication with the GRASS community, not just proposal polish.
  • Show us you understand the project through high-quality pull requests on GitHub.
  • Disclose AI usage: If you use AI tools in your proposal or code contributions, please disclose the extent to which you used them (e.g., for brainstorming, proofreading, code suggestions, etc.).

Ideas

If you are a student you can suggest a new idea or pick up an existing one. In any case write about it to OSGeo Discourse forum for GRASS developers, GitHub Discussions, or Gitter.

You are invited as well to have a close look at ideas from previous years (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023) which have not yet been implemented. You can also look at accepted GRASS GSoC projects from previous years for an idea of scope.


Parallelization of existing tools

There are several tools that would benefit from parallelization with OpenMP, e.g. r.texture, r.fill.stats, r/v.surf.idw, r.viewshed, v.to.rast, r.grow.distance, v.surf.bspline, r.proj, ... For overview of current state, see Raster_Parallelization_with_OpenMP.

  • Requirements: familiarity with C, OpenMP
  • Mentor: Huidae Cho
  • Co-mentor: Vaclav Petras, Anna Petrasova
  • Project length: 175 or 350 hours (take your pick)
  • Rating: difficult
  • Expected Outcomes: parallelized 2-5 tools, depending on complexity
  • Test of skills (one or more):

Improve GRASS user experience in Jupyter Notebook

InteractiveMap in grass.jupyter library

Python package grass.jupyter was developed during GSoC 2021 to simplify running GRASS from Jupyter Notebooks and displaying data. This project could focus on adding features such as better symbology handling and adding legend to InteractiveMap and better integration with matplotlib.

  • Requirements: Python
  • Mentor: Anna Petrasova
  • Co-mentor: Vaclav Petras, Helena Mitasova, Corey White
  • Project length: 175 or 350 hours (take your pick)
  • Rating: easy to medium
  • Expected Outcomes: improved user experience when using GRASS through notebooks
  • Test of skills: write a test for grass.jupyter library using python unittest or pytest, more info here or rewrite some of the functions in grass.jupyter library using the new Tools API.

Add JSON output to different tools

There are several tools in GRASS that would benefit from a JSON-formatted output. Besides adding the JSON output, the work would also include adding tests and basic documentation.

Support writing tests with pytest

  • The current testing framework, grass.gunittest, was written before migration to Git/GitHub and when long free runs in 3rd party services were unthinkable. Additionally, some no longer relevant goals were prioritized, such as independence on the current code, detailed custom HTML reports, success tracking over time, and high specialization towards GRASS-specifics.
  • grass.gunittest is based on Python unittest package and many projects since then migrated to //pytest//, e.g., GDAL and Numpy. While unittest is inspired by Java's JUnit, pytest is designed to support writing small, readable tests, and uses plain `assert` statements instead of many different assert methods.
  • Using pytest should lead to tests which feel more like Python scripts and to minimum of testing-specific code.
  • An example issue of grass.gunittest is that it doesn't work well with tests of the main GRASS executable (prominence of `grass ... --exec` is yet another new thing which changed since grass.gunittest was designed).
  • Two main things needed:
    • Create general comparison functions from the grass.gunittest assert methods so that they can be used with pytest.
    • Current grass.script.setup.init function and grass.script.core.create_location function don't work well in the context of a pytest test function. More
  • Additional things needed:
    • Fixture for pytest to set up and tear down a GRASS session in a temporary mapset.
  • Requirements: Python
  • Project length: 175 or 350 hours (take your pick)
  • Mentor: Vaclav Petras
  • Co-mentor: Stefan Blumentrath
  • Proposed by: Vaclav Petras
  • Rating: easy to medium
  • Expected Outcomes: Convenient way of writing tests with pytest
  • Test of skills: Fix failing tests and/or write new tests (more is better). Alternatively, addressing a smaller problem in the testing framework is a good task, too.

Fix known code defects

  • Fix code defects (security or code quality) such as those reported by Coverity Scan.
  • Mentors: Vaclav Petras
  • Co-mentors: ?
  • Proposed by: Vaclav Petras
  • Project length: 175 or 350 hours (flexible)
  • Rating: medium
  • Requirements:
    • Language: C
    • Proposal: Define milestones which will be used during the evaluation.
  • Expected outcomes:
    • Reduction of issues by 70-100%.
    • New tests for changed code if missing.
  • Test and training tasks (complete more than one): Fix cppcheck issue.

Subcommand CLI for GRASS

  • Make running of GRASS tools in command line as easy as possible.
    • `grass run r.slope.aspect elevation=elevation.tiff slope=slope.tiff aspect=aspect.tiff`
  • Project length: 350 hours
  • Rating: medium
  • Requirements:
    • Language: Python
    • Proposal: Student needs to show sufficient understanding of data and project handling in GRASS. Furthermore, the proposal needs to present, at least, concrete formulation of ideas, identification of missing and existing parts, and new subcommands.
  • Mentors: Vaclav Petras
  • Co-mentors: Stefan Blumentrath, Corey White
  • Proposed by: Vaclav Petras
  • Expected outcomes:
    • A subcommand which runs a GRASS tool on GeoTiff and GeoPackage in one step.
    • A complete parity with the existing CLI.
    • An underlying Python API which will be used to implement the CLI.
  • Test and training tasks (complete one or more): Add a subcommand, sub-subcommand, or an option to the experimental interface (with tests).
    • Add `--region` to set a temporary computational region for the execution, e.g. `--region="raster=raster_name"`.
    • Add `--import-raster=some/file.tiff` which imports (r.import) a raster file (same for vector and similarly for export).
    • Add `--link-raster=some/file.tiff` which links (r.external) a raster file (same for vector and similarly for r.external.out).

Current state:

# Reveals the existing subcommands
PYTHONPATH=$(grass --config python-path) python -m grass.app --help
# Allows running subset of commands
grass run --help


GUI: Add space-time datasets support in Data Catalog

Data catalog

Currently GRASS Data Catalog shows only raster and vector maps. The goal of this project is to add support for space-time datasets. It is mainly space-time raster datasets. In the next phase of the project support for other types of space-time datasets (vector and 3D raster) could be added. Besides displaying space-time datasets in the layer tree, it is also about adding the equivalent functionality currently available for raster and vector layers from the context menu.

  • Requirements: familiar with Python
  • Project length: 175 or 350 hours
  • Mentor: Martin Landa
  • Co-mentor: Anna Petrasova
  • Proposed by: Martin Landa
  • Rating: medium
  • Expected Outcomes: 175 hours basic support for space-time raster datasets; 350 extended support also for other space-time datasets types (vector, 3D raster)
  • Test of skills:

Add {your research idea} to GRASS

  • In general, you can propose any topic, but you can specifically propose integrating your research or research idea into GRASS.
  • Requirements:
    • Language:
      • Depends on the project, often Python, sometimes C.
      • Adding your latest ecological analysis
    • Proposal:
      • Discuss relevance to GRASS.
      • Describe technical steps needed for integration.
      • Describe whether it is an addition of a tool (module) or a change in one of the libraries. If it is a tool, specify if it should be included in the core grass repository or in grass-addons repository and why.
      • Specify what research was done and what needs to be accomplished in order to have usable product at the end of summer.
      • Specify who will provide the research expertise.
  • Project length: 175 or 350 hours (take your pick)
  • Rating: from low to hard
  • Mentors:
    • GRASS project will provide technical mentors, but it is up to the applicant to ensure the research part is mentored well. An exception may be granted to applicants which can demonstrate that the research is finished or that they have enough expertise themselves.
    • Possible technical mentors: Vaclav Petras, Anna Petrasova
    • Research mentors: Bring in an expert from your field, e.g., your academic advisor or project principal investigator (if needed).
  • Proposed by: Vaclav Petras
  • Expected outcome: Working feature which is integrated and merged at the end of the project.
  • Test and training tasks:
    • Create a test in Python for an existing tool in the grass-addons repository or in the core grass repository.

Title of idea

Description here

  • Requirements:
  • Project length: (175 or 350 hours)
  • Mentor:
  • Proposed by:
  • Rating:
  • Expected Outcomes:
  • Test of skills:
  • Other:

Tips for students

  • Follow official NumFOCUS guidelines.
  • Include "GRASS" in the title of our idea to easily distinguish ideas and projects inside NumFOCUS.
  • If you have your own ideas we encourage you to propose them. Explain them on the on our Discourse.
  • Follow some good practices in your ideas and proposals:
    • Stress why the project would be useful.
    • Show that you know how you will proceed. That is, make sure that you can demonstrate that the proposal is feasible in the given time frame.
    • Be specific in the implementation (or at least as specific as you can).
    • Explain what the final product will look like and how it will work. You can add drawings or mock-ups.
    • Explain how the idea relates to existing GRASS functions, features, and needs.
    • Do not include steps such as "install GRASS", "compile GRASS libraries (on my machine)", "read about the API". You should do this before applying to GSoC.
  • Compile GRASS from source and prepare environment for development:
  • Prove your worth by being active on the GRASS Discourse or other channels (GitHub Discussions, fix some bugs, and/or implement some (smaller) features, or write some (simpler) GRASS module, and post it to mailing list. There's no better way to demonstrate your willingness and abilities. Do this before start you apply to GSoC.
  • Also note that fixing existing bugs and/or implementing enhancements will be a part of student evaluation.