{"id":32604991,"url":"https://github.com/cwhite911/foss4gna-2025-workshop","last_synced_at":"2026-02-25T11:44:33.764Z","repository":{"id":321147309,"uuid":"1084653732","full_name":"cwhite911/FOSS4GNA-2025-workshop","owner":"cwhite911","description":"GRASS Addon Development with Python","archived":false,"fork":false,"pushed_at":"2025-10-28T02:45:10.000Z","size":20,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-28T04:09:14.291Z","etag":null,"topics":["geoprocessing","grass","grass-addon","grass-gis","grass-gis-addons"],"latest_commit_sha":null,"homepage":"https://www.foss4gna.org/schedule","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cwhite911.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-28T01:16:49.000Z","updated_at":"2025-10-28T02:45:13.000Z","dependencies_parsed_at":"2025-10-28T04:09:15.951Z","dependency_job_id":"9273b31b-deb1-4ec1-b772-c216ce7bfd38","html_url":"https://github.com/cwhite911/FOSS4GNA-2025-workshop","commit_stats":null,"previous_names":["cwhite911/foss4gna-2025-workshop"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/cwhite911/FOSS4GNA-2025-workshop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cwhite911%2FFOSS4GNA-2025-workshop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cwhite911%2FFOSS4GNA-2025-workshop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cwhite911%2FFOSS4GNA-2025-workshop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cwhite911%2FFOSS4GNA-2025-workshop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cwhite911","download_url":"https://codeload.github.com/cwhite911/FOSS4GNA-2025-workshop/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cwhite911%2FFOSS4GNA-2025-workshop/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281788807,"owners_count":26561807,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-30T02:00:06.501Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["geoprocessing","grass","grass-addon","grass-gis","grass-gis-addons"],"created_at":"2025-10-30T10:24:02.073Z","updated_at":"2026-02-25T11:44:33.758Z","avatar_url":"https://github.com/cwhite911.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# FOSS4GNA-2025-workshop\n\nWorkshop Participant Level: Advanced\n\n![GRASS Logo](https://grass.osgeo.org/images/logos/grass-gradient-horizontal.svg)\n\nLearn to develop [GRASS addons](https://github.com/OSGeo/grass-addons) with\nPython! Together, we will develop a parallelized custom addon with Python,\ncommand line, and graphical user interfaces. [GRASS](https://grass.osgeo.org/)\nworks as a powerful geospatial processing engine that works on a small laptop to\na huge supercomputer. GRASS also makes it easy to move from using a\n[graphical user interface (GUI)](https://grass.osgeo.org/grass85/manuals/helptext.html)\nto command line interface or\n[Python API](https://grass.osgeo.org/grass85/manuals/python_intro.html).\nDuring this workshop we will develop a GRASS addon exploring the various\n[GRASS Python modules](https://grass.osgeo.org/grass-devel/manuals/libpython/index.html),\ntooling, and best practice required to produce high quality open source software.\nThe bonus material for this workshop will also cover tools written in C.\n\n## Prerequisites\n\nTo get the most out of this workshop, basic Python and GIS experience is\nrecommended. The workshop will use an online environment, so no software\ninstallation on laptops is required from participants.\n\n## Learning Objectives\n\nBy the end of this workshop, participants will be able to:\n\n1. Explain GRASS fundamentals including:\n   - available engine interfaces\n   - how to manage geospatial data with projects,\n   - and how to leverage computational region for effient processing\n2. Use GRASS Python modules to develop geospatial processing tools\n3. Describe the structure of a GRASS addon and community best practices for development\n4. Develop command line and graphical user interfaces for GRASS addons\n5. Be ready to contribute GRASS addons to the community repository :green_heart:\n\n## Workshop Outline\n\n[![Open in Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?repo=cwhite911%2FFOSS4GNA-2025-workshop\u0026ref=main\u0026template=true)\n\n### Part 1: GRASS Fundamentals, 45 min\n\n- [Intro to GRASS](https://grass.osgeo.org/grass-devel/manuals/index.html)\n- [GRASS scripting with Python](./workshop/part_1_grass/Scripting_with_GRASS.ipynb)\n- [Write your first GRASS script](./workshop/part_1_grass/my_grass_script.py)\n\n#### _10 min Break 1_\n\n### Part 2: From GRASS scripts to GRASS addons, 45 min\n\n- [What is a GRASS addon and why write one?](./workshop/part_2_addons/Intro.md)\n- [The development environment](.workshop/part_2_addons/Addon_Structure.md)\n  - Addon structure, best practices and standardized options and flags\n  - Local testing and debugging\n- [How to contribute an addon](./workshop/part_2_addons/Developing_an_addon.md)\n\n#### _10 min Break 2_\n\n### Part 3: Hands-On Project, 45 min\n\n- Build a parallelized GRASS addon with CLI and GUI\n- Testing and packaging\n- Submitting to grass-addons\n\n### Conclusion, remaining time\n\n- Wrap-up\n- Bonus: C Addon Overview\n- Bonus: AI-assisted coding for GRASS addon development the good, the bad, and\nthe ugly.\n\n## Resources\n\n- [GRASS Website](https://grass.osgeo.org/)\n- [GRASS Python Documentation](https://grass.osgeo.org/grass-devel/manuals/libpython/index.html)\n\n### GitHub Repositories\n\n- [grass](https://github.com/OSGeo/grass)\n- [grass-addons](https://github.com/OSGeo/grass-addons)\n- [grass-addon-cookiecutter](https://github.com/OSGeo/grass-addon-cookiecutter)\n\n### Developer Docs\n\n- [GRASS Python Introduction](https://grass.osgeo.org/grass-devel/manuals/python_intro.html)\n\n  - [grass.tools](https://grass.osgeo.org/grass-devel/manuals/libpython/grass.tools.html)\nprovides a Python interface to GRASS tools,\n  - [grass.script](https://grass.osgeo.org/grass-devel/manuals/libpython/script_intro.html)\nhandles GRASS projects and sessions in Python,\n  - [grass.pygrass](https://grass.osgeo.org/grass-devel/manuals/libpython/pygrass_index.html)\n  enables a fine-grained access to the GRASS data structures.\n- [GRASS 8 Programmer's Manual](https://grass.osgeo.org/programming8/)\n- [Standard Parser Options][parser] standard option structure\n- [GRASS Programming Style Guide](https://grass.osgeo.org/grass85/manuals/style_guide.html)\n\n[parser]: https://grass.osgeo.org/grass85/manuals/parser_standard_options.html\n\n## Instructors\n\n- [Corey White](https://github.com/cwhite911)\n- [Caitlin Haedrich](https://github.com/chaedri)\n\n## Funding\n\nUSDA NRCS\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcwhite911%2Ffoss4gna-2025-workshop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcwhite911%2Ffoss4gna-2025-workshop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcwhite911%2Ffoss4gna-2025-workshop/lists"}