<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://grasswiki.osgeo.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Saket0187</id>
	<title>GRASS-Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://grasswiki.osgeo.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Saket0187"/>
	<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/wiki/Special:Contributions/Saket0187"/>
	<updated>2026-08-23T20:07:24Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GSoC_2026_Add_Spatio-Temporal_dataset_support_to_datacatalog_in_GUI&amp;diff=29132</id>
		<title>GSoC 2026 Add Spatio-Temporal dataset support to datacatalog in GUI</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GSoC_2026_Add_Spatio-Temporal_dataset_support_to_datacatalog_in_GUI&amp;diff=29132"/>
		<updated>2026-08-18T10:03:11Z</updated>

		<summary type="html">&lt;p&gt;Saket0187: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Saket Kumar Mall&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://numfocus.org/ NumFOCUS]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentors Name''' || Anna Petrasova, Stefan Blumentrath&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/saket0187/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''LinkedIn Profile''' || [https://www.linkedin.com/in/saket-kumar-mall/ View LinkedIn]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
&lt;br /&gt;
Before this project, the GRASS Data Catalog queried only standard spatial maps and bypassed the temporal database entirely. Space-time datasets (STDS) were therefore not visible in the GUI and could only be managed from the command line. Maps that were already registered in an STDS were listed as ordinary standalone maps, with no indication that they belonged to a dataset.&lt;br /&gt;
&lt;br /&gt;
In this project I extended the Data Catalog to support STDS natively. STRDS, STVDS and STR3DS are now listed inside their respective mapset trees alongside the standard spatial maps, registered maps are shown inside the dataset they belong to, and dedicated context menus let users create, inspect, modify and remove datasets and their registered maps directly from the GUI. Alongside the GUI work I also improved, tested and fixed the core temporal tools that the Data Catalog relies on.&lt;br /&gt;
&lt;br /&gt;
= Background =&lt;br /&gt;
&lt;br /&gt;
GRASS handles time series through its temporal framework. Maps are registered in space-time datasets, which are stored in a temporal database maintained per mapset. Three dataset types exist:&lt;br /&gt;
&lt;br /&gt;
* '''STRDS''' — space-time raster dataset&lt;br /&gt;
* '''STR3DS''' — space-time 3D raster dataset&lt;br /&gt;
* '''STVDS''' — space-time vector dataset&lt;br /&gt;
&lt;br /&gt;
These datasets are created and manipulated with the &amp;lt;code&amp;gt;t.*&amp;lt;/code&amp;gt; tools (&amp;lt;code&amp;gt;t.create&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;t.register&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt;, and others). Because the Data Catalog did not query the temporal database, none of this structure was visible in the GUI: users could see the individual maps, but not the datasets they belonged to, and every temporal operation required leaving the GUI for the command line.&lt;br /&gt;
&lt;br /&gt;
= Project goals =&lt;br /&gt;
&lt;br /&gt;
The goals below come from my accepted project proposal. The status column reflects the state of the work at the end of the coding period.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Goal !! Status&lt;br /&gt;
|-&lt;br /&gt;
| Show STRDS, STVDS and STR3DS under each mapset in the Data Catalog || Implemented&lt;br /&gt;
|-&lt;br /&gt;
| Nest registered maps inside their STDS || Implemented&lt;br /&gt;
|-&lt;br /&gt;
| Add context menu operations (create, rename, delete, register/unregister, metadata, export, …) || Implemented&lt;br /&gt;
|-&lt;br /&gt;
| Make the Data Catalog search aware of STDS || Implemented&lt;br /&gt;
|-&lt;br /&gt;
| Lazy loading for large datasets || Superseded — replaced by the temporal database queries described in [[#Loading strategy and performance|Loading strategy and performance]]&lt;br /&gt;
|-&lt;br /&gt;
| Enhancements to core temporal tools (format/JSON output, &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; options, bug fixes) || Implemented, see [[#Temporal tool enhancements|Temporal tool enhancements]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Implementation =&lt;br /&gt;
&lt;br /&gt;
All Data Catalog work is contained in a single pull request, [https://github.com/OSGeo/grass/pull/7608 OSGeo/grass#7608], which I developed as a draft from Week 4 onwards and opened for review in Week 10.&lt;br /&gt;
&lt;br /&gt;
== Dataset listing and tree structure ==&lt;br /&gt;
&lt;br /&gt;
* STRDS, STVDS and STR3DS are listed per mapset, at the same level as the existing raster, 3D raster and vector map listings. The dataset types are not grouped under a separate node; users distinguish them by their icons.&lt;br /&gt;
* Maps registered in a dataset are shown inside the corresponding dataset node.&lt;br /&gt;
* Maps that are already registered in an STDS are hidden from the regular map listing of the mapset. They remain accessible from inside the dataset node.&lt;br /&gt;
* I kept the existing Data Catalog hierarchy. Restructuring the whole tree was discussed with my mentors and deliberately rejected (see [[#Design decisions|Design decisions]]).&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0 auto;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;gallery perrow=&amp;quot;2&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot; caption=&amp;quot;Space-time datasets in the Data Catalog tree&amp;quot;&amp;gt;&lt;br /&gt;
File:DataCatalog1.png|Maps registered in a dataset, shown inside the dataset node&lt;br /&gt;
File:DataCatalog2.png|Datasets listed alongside the raster, 3D raster and vector maps&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Icons ==&lt;br /&gt;
&lt;br /&gt;
New icons were added for the three dataset types. Each one reuses the existing raster, vector or 3D raster map icon with a clock drawn on top of it, so the dataset type stays recognisable and the temporal nature is immediately visible.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0 auto;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;gallery perrow=&amp;quot;3&amp;quot; widths=&amp;quot;150&amp;quot; heights=&amp;quot;220&amp;quot; caption=&amp;quot;Icons for the three dataset types&amp;quot;&amp;gt;&lt;br /&gt;
File:Strds.png|STRDS listed under a mapset&lt;br /&gt;
File:Stvds.png|STVDS listed under a mapset&lt;br /&gt;
File:Str3ds.png|STR3DS listed under a mapset&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Loading strategy and performance ==&lt;br /&gt;
&lt;br /&gt;
Datasets and their registered maps are loaded as follows:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;t.connect&amp;lt;/code&amp;gt; is run once to determine which mapsets have a temporal database connection.&lt;br /&gt;
# For those mapsets, the datasets and the maps registered in them are fetched through the &amp;lt;code&amp;gt;grass.temporal.gui_support&amp;lt;/code&amp;gt; functions &amp;lt;code&amp;gt;tlist_grouped()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;registered_maps_grouped()&amp;lt;/code&amp;gt;, which query the temporal database.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;registered_maps_grouped()&amp;lt;/code&amp;gt; returns a nested dictionary of dataset type → dataset id → registered maps, where each map carries its id, start time, end time and, for relative time, its unit. Maps are ordered by start time, and time stamped maps that are not registered in any dataset are not included. This is what makes it possible to hide already registered maps from the standalone map listing.&lt;br /&gt;
&lt;br /&gt;
The result is one set of queries per mapset instead of one &amp;lt;code&amp;gt;t.*.list&amp;lt;/code&amp;gt; call per dataset, which is considerably faster on mapsets holding many datasets.&lt;br /&gt;
&lt;br /&gt;
Two earlier approaches were replaced during development:&lt;br /&gt;
&lt;br /&gt;
# '''Search path manipulation.''' At the very start, retrieving datasets from all mapsets required temporarily extending the search path with &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, running &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt;, and restoring the user's original search path. This was a workaround and was dropped once &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; supported the &amp;lt;code&amp;gt;mapset&amp;lt;/code&amp;gt; option ([https://github.com/OSGeo/grass/pull/7631 #7631]), and later became unnecessary altogether.&lt;br /&gt;
# '''Per-dataset listing with lazy loading.''' Up to Week 7, only the datasets were listed initially and their maps were loaded with &amp;lt;code&amp;gt;t.*.list&amp;lt;/code&amp;gt; when a dataset node was expanded. This worked but was slow on larger mapsets and complicated mapset reloading and keeping the tree in sync. The &amp;lt;code&amp;gt;gui_support&amp;lt;/code&amp;gt; queries described above made the per-dataset calls unnecessary and simplified the reload logic.&lt;br /&gt;
&lt;br /&gt;
== Context menu operations ==&lt;br /&gt;
&lt;br /&gt;
I added context menus for three nodes.&lt;br /&gt;
&lt;br /&gt;
'''Mapset node'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Action !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Create temporal dataset || Creates a new STDS in the selected mapset.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''STDS node'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Action !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Register maps || Registers maps in the dataset.&lt;br /&gt;
|-&lt;br /&gt;
| Unregister maps || Unregisters maps from the dataset.&lt;br /&gt;
|-&lt;br /&gt;
| Merge dataset || Merges datasets; cross-mapset merges are supported when the target mapset is in the search path.&lt;br /&gt;
|-&lt;br /&gt;
| Update metadata || Updates the dataset metadata.&lt;br /&gt;
|-&lt;br /&gt;
| Delete dataset only || Deletes the dataset.&lt;br /&gt;
|-&lt;br /&gt;
| Delete dataset and maps || Deletes the dataset together with the maps registered in it (&amp;lt;code&amp;gt;-fd&amp;lt;/code&amp;gt; flags).&lt;br /&gt;
|-&lt;br /&gt;
| Rename dataset || Renames the dataset.&lt;br /&gt;
|-&lt;br /&gt;
| Export dataset || Exports the dataset.&lt;br /&gt;
|-&lt;br /&gt;
| Show metadata || Displays the dataset metadata.&lt;br /&gt;
|-&lt;br /&gt;
| Display temporal extent || Shows the temporal extent of the dataset.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Map node inside an STDS'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Action !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Unregister map || Unregisters the map from its dataset.&lt;br /&gt;
|-&lt;br /&gt;
| Copy || Copies the map.&lt;br /&gt;
|-&lt;br /&gt;
| Copy name || Copies the map name.&lt;br /&gt;
|-&lt;br /&gt;
| Display layer || Adds the map to the current map display.&lt;br /&gt;
|-&lt;br /&gt;
| Show metadata || Displays the map metadata.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0 auto;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;gallery perrow=&amp;quot;3&amp;quot; widths=&amp;quot;230&amp;quot; heights=&amp;quot;240&amp;quot; caption=&amp;quot;Context menus&amp;quot;&amp;gt;&lt;br /&gt;
File:Mapset ContextMenu.png|Mapset node — create a temporal dataset&lt;br /&gt;
File:STDS ContextMenu.png|STDS node — dataset operations&lt;br /&gt;
File:STDS Map ContextMenu.png|Map registered in an STDS&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Import options ==&lt;br /&gt;
&lt;br /&gt;
I added the &amp;lt;code&amp;gt;t.*.import&amp;lt;/code&amp;gt; tools to the Data Catalog toolbar under &amp;quot;Select another import option&amp;quot;, so temporal import is reachable from the same place as the other import tools.&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
&lt;br /&gt;
The Data Catalog search was extended to cover STDS, so datasets are found together with the standard spatial maps.&lt;br /&gt;
&lt;br /&gt;
== Auto refresh ==&lt;br /&gt;
&lt;br /&gt;
STDS entries are refreshed automatically across the GUI when datasets are created or modified through context menu, so the tree stays consistent with the temporal database without a manual reload.&lt;br /&gt;
&lt;br /&gt;
== Module dialogs ==&lt;br /&gt;
&lt;br /&gt;
Context menu actions that run a GRASS tool open the corresponding module dialog on top of the existing GUI, instead of launching a separate module window through the &amp;lt;code&amp;gt;--ui&amp;lt;/code&amp;gt; option. This keeps the interaction inside the GUI the user is already working in.&lt;br /&gt;
&lt;br /&gt;
= Temporal tool enhancements =&lt;br /&gt;
&lt;br /&gt;
Part of this work prepared the temporal tools for the GUI integration, since the Data Catalog depends on them; the rest improved the temporal framework independently.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tool !! Change !! Pull request&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; || Added output format options || [https://github.com/OSGeo/grass/pull/7466 #7466]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; || Added test files || [https://github.com/OSGeo/grass/pull/7482 #7482]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; || Added a check on the temporal database connection so that a temporal database is no longer created for mapsets that have none. This first approach was later replaced by a more robust solution. || [https://github.com/OSGeo/grass/pull/7580 #7580]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; || Added the &amp;lt;code&amp;gt;mapset&amp;lt;/code&amp;gt; option, which accepts the current mapset (&amp;lt;code&amp;gt;&amp;quot;.&amp;quot;&amp;lt;/code&amp;gt;), all mapsets in the search path (&amp;lt;code&amp;gt;&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt;), or a comma-separated list of mapsets, together with tests || [https://github.com/OSGeo/grass/pull/7631 #7631]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; || Added support for listing multiple dataset types in one call (e.g. &amp;lt;code&amp;gt;type=strds,stvds&amp;lt;/code&amp;gt;), making the interface consistent with &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt; || [https://github.com/OSGeo/grass/pull/7731 #7731]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.rast.univar&amp;lt;/code&amp;gt; || Added format options || [https://github.com/OSGeo/grass/pull/7495 #7495]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.rast.univar&amp;lt;/code&amp;gt; || Added the range to the output and corrected the cells values || [https://github.com/OSGeo/grass/pull/7529 #7529]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.rast3d.list&amp;lt;/code&amp;gt; || Added pytest files || [https://github.com/OSGeo/grass/pull/7498 #7498]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.rast3d.list&amp;lt;/code&amp;gt; || Added further checks and fixed the issues they exposed || [https://github.com/OSGeo/grass/pull/7527 #7527]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.rast3d.list&amp;lt;/code&amp;gt; || Added the &amp;lt;code&amp;gt;format&amp;lt;/code&amp;gt; option and tests || [https://github.com/OSGeo/grass/pull/7531 #7531]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.rast3d.univar&amp;lt;/code&amp;gt; || Added format options and tests || [https://github.com/OSGeo/grass/pull/7582 #7582]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.connect&amp;lt;/code&amp;gt; || Added format options || [https://github.com/OSGeo/grass/pull/7535 #7535]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.connect&amp;lt;/code&amp;gt; || Added pytest coverage || [https://github.com/OSGeo/grass/pull/7573 #7573]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.vect.db.select&amp;lt;/code&amp;gt; || Added format options || [https://github.com/OSGeo/grass/pull/7530 #7530]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.vect.db.select&amp;lt;/code&amp;gt; || Added pytest files || [https://github.com/OSGeo/grass/pull/7574 #7574]&lt;br /&gt;
|-&lt;br /&gt;
| temporal framework || Replaced the use of &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt; during import with a temporary GISRC environment || [https://github.com/OSGeo/grass/pull/7434 #7434]&lt;br /&gt;
|-&lt;br /&gt;
| temporal test suite || Removed &amp;lt;code&amp;gt;needs_solo_run&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;t.vect.list&amp;lt;/code&amp;gt; and fixed typos in the &amp;lt;code&amp;gt;t.vect.list&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;t.rast.list&amp;lt;/code&amp;gt; tests || [https://github.com/OSGeo/grass/pull/7636 #7636]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Design decisions =&lt;br /&gt;
&lt;br /&gt;
; Data Catalog hierarchy kept unchanged&lt;br /&gt;
: Changing the overall hierarchical structure of the Data Catalog was discussed with my mentors. After weighing the advantages and disadvantages, we kept the existing structure and built the STDS support on top of it.&lt;br /&gt;
&lt;br /&gt;
; Datasets at the same level, distinguished by icons&lt;br /&gt;
: Instead of collecting the three dataset types under a separate group node, they are listed at the same level and told apart by their icons. This keeps the tree flat and consistent with how the existing map types are presented.&lt;br /&gt;
&lt;br /&gt;
; One map, one place in the tree&lt;br /&gt;
: Maps registered in an STDS are hidden from the regular map listing rather than shown twice, and remain reachable inside their dataset node.&lt;br /&gt;
&lt;br /&gt;
= Current state =&lt;br /&gt;
&lt;br /&gt;
* The Data Catalog work described above is complete. It is contained in [https://github.com/OSGeo/grass/pull/7608 #7608].&lt;br /&gt;
* The temporal tool enhancements listed above are merged.&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Period !! Timeline !! Tasks !! Pull requests&lt;br /&gt;
|-&lt;br /&gt;
| '''Community Bonding Period'''&lt;br /&gt;
||&lt;br /&gt;
May 1 – May 24, 2026&lt;br /&gt;
||&lt;br /&gt;
# Introductory meeting with the GRASS mentors and contributors, followed by a project-specific meeting on the scope of the project&lt;br /&gt;
# Studied the temporal framework, its documentation and the Data Catalog code base&lt;br /&gt;
# Set up a local environment with mapsets, temporal databases and registered/unregistered time series maps&lt;br /&gt;
# Fixed a broken link found while going through the time series tutorials&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass-tutorials/pull/117 grass-tutorials#117]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1'''&lt;br /&gt;
||&lt;br /&gt;
May 25 – May 31, 2026&lt;br /&gt;
||&lt;br /&gt;
# Wrapped up open pull requests, including the JSON output rewrite of &amp;lt;code&amp;gt;r.geomorphon&amp;lt;/code&amp;gt;&lt;br /&gt;
# Worked on GUI feature enhancements&lt;br /&gt;
# Worked on a temporal framework issue related to importing STDS: replaced the use of &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt; during import with a temporary GISRC environment&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7122 #7122], [https://github.com/OSGeo/grass/pull/7434 #7434]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2'''&lt;br /&gt;
||&lt;br /&gt;
June 1 – June 7, 2026&lt;br /&gt;
||&lt;br /&gt;
# Added output format options to &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;t.rast.univar&amp;lt;/code&amp;gt;&lt;br /&gt;
# Added test files for &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; and pytest files for &amp;lt;code&amp;gt;t.rast3d.list&amp;lt;/code&amp;gt;&lt;br /&gt;
# Added further checks and fixes to &amp;lt;code&amp;gt;t.rast3d.list&amp;lt;/code&amp;gt;&lt;br /&gt;
# Fixed pre-existing issues found while working on these modules&lt;br /&gt;
# Started weekly project meetings with my mentors&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7466 #7466], [https://github.com/OSGeo/grass/pull/7482 #7482], [https://github.com/OSGeo/grass/pull/7495 #7495], [https://github.com/OSGeo/grass/pull/7498 #7498], [https://github.com/OSGeo/grass/pull/7527 #7527]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3'''&lt;br /&gt;
||&lt;br /&gt;
June 8 – June 14, 2026&lt;br /&gt;
||&lt;br /&gt;
# Continued adding format and JSON output options to temporal tools (&amp;lt;code&amp;gt;t.connect&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;t.rast3d.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;t.vect.db.select&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;t.rast.univar&amp;lt;/code&amp;gt;), with tests and documentation&lt;br /&gt;
# Discussed the runtime of the existing temporal modules with my mentors as preparation for the GUI integration&lt;br /&gt;
# Addressed review feedback on the open pull requests&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7529 #7529], [https://github.com/OSGeo/grass/pull/7530 #7530], [https://github.com/OSGeo/grass/pull/7531 #7531], [https://github.com/OSGeo/grass/pull/7535 #7535]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4'''&lt;br /&gt;
||&lt;br /&gt;
June 15 – June 21, 2026&lt;br /&gt;
||&lt;br /&gt;
# Added pytest coverage for &amp;lt;code&amp;gt;t.connect&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;t.vect.db.select&amp;lt;/code&amp;gt;&lt;br /&gt;
# Implemented an initial check to prevent creating temporal databases for mapsets without a temporal database connection; this approach was later replaced by a more robust solution&lt;br /&gt;
# Profiled the import time of a module used by nearly every temporal tool, since slow imports would make the GUI feel unresponsive; the difference we saw turned out to be operating-system specific and was fixed by my mentors, so no lazy-import work was needed&lt;br /&gt;
# Opened the draft pull request for the main project&lt;br /&gt;
# Discussed how STDS should be represented in the Data Catalog, including the need for dedicated icons; continued with a temporary icon&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7573 #7573], [https://github.com/OSGeo/grass/pull/7574 #7574], [https://github.com/OSGeo/grass/pull/7580 #7580], [https://github.com/OSGeo/grass/pull/7608 #7608] (draft)&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5'''&lt;br /&gt;
||&lt;br /&gt;
June 22 – June 28, 2026&lt;br /&gt;
||&lt;br /&gt;
# Implemented the first listing of STDS in the Data Catalog&lt;br /&gt;
# Retrieved datasets from all mapsets by temporarily extending the search path with &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, running &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; and restoring the original search path; replaced later in the week once &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; supported &amp;lt;code&amp;gt;mapset=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Implemented lazy loading of the maps registered in a dataset&lt;br /&gt;
# Added the first context menu actions: create dataset from the mapset node; rename, delete, merge (including cross-mapset merges when the target mapset is in the search path), show metadata, register and unregister maps; display and unregister for maps inside a dataset&lt;br /&gt;
# Added &amp;lt;code&amp;gt;mapset&amp;lt;/code&amp;gt; options to &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; with tests&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7608 #7608], [https://github.com/OSGeo/grass/pull/7631 #7631]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6'''&lt;br /&gt;
||&lt;br /&gt;
June 29 – July 5, 2026&lt;br /&gt;
||&lt;br /&gt;
# Refined the structure of the draft implementation in preparation for wider community review&lt;br /&gt;
# Addressed community feedback on the icons and the presentation of the new STDS nodes&lt;br /&gt;
# Discussed restructuring the Data Catalog hierarchy with my mentors and decided to keep the existing structure&lt;br /&gt;
# Improved the temporal test suite&lt;br /&gt;
# Added format options and tests to &amp;lt;code&amp;gt;t.rast3d.univar&amp;lt;/code&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7582 #7582], [https://github.com/OSGeo/grass/pull/7636 #7636]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7'''&lt;br /&gt;
||&lt;br /&gt;
July 6 – July 12, 2026&lt;br /&gt;
||&lt;br /&gt;
# Extended the functionality available on STDS nodes and on the maps registered inside them&lt;br /&gt;
# Refined the context menu actions and the overall interaction with the Data Catalog based on mentor and community feedback&lt;br /&gt;
# Identified further optimisation opportunities in the implementation&lt;br /&gt;
# Prioritised the remaining features with my mentors, separating those essential for the initial implementation from later additions&lt;br /&gt;
# Submitted the midterm evaluation (July 6–10)&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7608 #7608]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8'''&lt;br /&gt;
||&lt;br /&gt;
July 13 – July 19, 2026&lt;br /&gt;
||&lt;br /&gt;
# Added support for listing multiple dataset types in a single &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; call, consistent with &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;&lt;br /&gt;
# Adopted the new &amp;lt;code&amp;gt;gui_support&amp;lt;/code&amp;gt; functions introduced by my mentors, replacing the per-dataset &amp;lt;code&amp;gt;t.*.list&amp;lt;/code&amp;gt; calls with temporal database queries executed once per mapset&lt;br /&gt;
# Removed the per-dataset lazy loading approach used until Week 7, which simplified mapset reloading and keeping the tree in sync&lt;br /&gt;
# Hid maps that are already registered in an STDS from the regular map listing&lt;br /&gt;
# Updated the context menu actions for mapset, dataset and map nodes&lt;br /&gt;
# Fixed a watchdog Observer RuntimeError on macOS&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7731 #7731], [https://github.com/OSGeo/grass/pull/7677 #7677], [https://github.com/OSGeo/grass/pull/7608 #7608]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9'''&lt;br /&gt;
||&lt;br /&gt;
July 20 – July 26, 2026&lt;br /&gt;
||&lt;br /&gt;
# Completed the remaining context menu options discussed with my mentors&lt;br /&gt;
# Addressed review feedback on the multiple dataset type support in &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7608 #7608], [https://github.com/OSGeo/grass/pull/7731 #7731]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10'''&lt;br /&gt;
||&lt;br /&gt;
July 27 – August 2, 2026&lt;br /&gt;
||&lt;br /&gt;
# Added search and filtering support for STDS in the Data Catalog&lt;br /&gt;
# Added the &amp;lt;code&amp;gt;t.*.import&amp;lt;/code&amp;gt; tools to the Data Catalog toolbar under &amp;quot;Select another import option&amp;quot;&lt;br /&gt;
# Changed context menu actions to open module dialogs on top of the existing GUI instead of launching separate module windows via &amp;lt;code&amp;gt;--ui&amp;lt;/code&amp;gt;&lt;br /&gt;
# Reviewed the pull request, removed unnecessary code and simplified the implementation; converted the draft into a pull request ready for review&lt;br /&gt;
# Experimented with integrating &amp;lt;code&amp;gt;g.gui.animation&amp;lt;/code&amp;gt; into the GUI as a tab; found a freeze and file descriptor exhaustion on large datasets and opened PR to address this performance issue.&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7608 #7608], [https://github.com/OSGeo/grass/pull/7811 #7811]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11'''&lt;br /&gt;
||&lt;br /&gt;
August 3 – August 9, 2026&lt;br /&gt;
||&lt;br /&gt;
# Made the &amp;lt;code&amp;gt;g.gui.tplot&amp;lt;/code&amp;gt; window resizable&lt;br /&gt;
# Fixed the freeze and file descriptor exhaustion in &amp;lt;code&amp;gt;g.gui.animation&amp;lt;/code&amp;gt; on large datasets&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7820 #7820], [https://github.com/OSGeo/grass/pull/7811 #7811]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12'''&lt;br /&gt;
||&lt;br /&gt;
August 10 – August 16, 2026&lt;br /&gt;
||&lt;br /&gt;
# Integrated &amp;lt;code&amp;gt;g.gui.animation&amp;lt;/code&amp;gt; into the GUI as a tab&lt;br /&gt;
# Added a database path tooltip to the database nodes in the Data Catalog&lt;br /&gt;
# Removed the SQLite &amp;lt; 3.33 workaround from the temporal framework&lt;br /&gt;
# Completed the multiple dataset type support in &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt;&lt;br /&gt;
# Made final changes to the main STDS Data Catalog pull request&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7823 #7823], [https://github.com/OSGeo/grass/pull/7824 #7824], [https://github.com/OSGeo/grass/pull/7825 #7825], [https://github.com/OSGeo/grass/pull/7731 #7731], [https://github.com/OSGeo/grass/pull/7608 #7608]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Additional material:&lt;br /&gt;
&lt;br /&gt;
* GSoC blog: ''[https://saket0187.github.io/gsoc-2026/ Blog link]''&lt;br /&gt;
&lt;br /&gt;
= Future work =&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;env&amp;lt;/code&amp;gt; support in the temporal framework''' — allow an environment to be passed to &amp;lt;code&amp;gt;grass.temporal&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;tgis.init(env=env)&amp;lt;/code&amp;gt;. I started this during the coding period and paused it because it affects several parts of the framework.&lt;br /&gt;
* '''Appending to an existing STDS''' — modify &amp;lt;code&amp;gt;t.rast.algebra&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;t.rast.aggregate&amp;lt;/code&amp;gt; and similar tools so that their output can be appended to an existing dataset instead of always creating a new one.&lt;br /&gt;
* '''Temporal import fixes''' — resolve issues in the temporal import workflow, such as &amp;lt;code&amp;gt;t.rast.import&amp;lt;/code&amp;gt; failing when a new project is created and an STRDS is imported into it.&lt;br /&gt;
* '''Further temporal tool enhancements''' — continue the work on format/JSON output and tool options started during the project.&lt;br /&gt;
* '''Usability issues in the temporal workflow''' — address open issues that make common temporal tasks easier for users.&lt;br /&gt;
&lt;br /&gt;
= Pull requests =&lt;br /&gt;
&lt;br /&gt;
== Data Catalog and GUI ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7608 #7608] — wxGUI/datacatalog: Add STDS in datacatalog&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7677 #7677] — wxGUI: Share watchdog Observer to fix FSEvents RuntimeError&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7811 #7811] — wxGUI/animation: Fix freeze and descriptor exhaustion on large datasets&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7820 #7820] — wxGUI/tplot: Make the window resizable&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7823 #7823] — wxGUI/animation: Integrate g.gui.animation into the GUI as a tab&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7824 #7824] — wxGUI/datacatalog: Add db path tooltip to nodes&lt;br /&gt;
&lt;br /&gt;
== Temporal tools and framework ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7434 #7434] — temporal: Use temporary GISRC env instead of g.mapset for import&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7466 #7466] — t.list: Add output format options in t.list&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7482 #7482] — t.list: Add tests files to t.list&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7495 #7495] — t.rast.univar: Add format options in t.rast.univar&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7498 #7498] — t.rast3d.list: Add pytest files&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7527 #7527] — t.rast3d.list: Add checks and some fixes&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7529 #7529] — t.rast.univar: Add range and correct cells values&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7530 #7530] — t.vect.db.select: Add format options&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7531 #7531] — t.rast3d.list: Add format option and tests&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7535 #7535] — t.connect: Add formats&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7573 #7573] — t.connect: Add pytest&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7574 #7574] — t.vect.db.select: Add pytest files&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7580 #7580] — t.list: Check connection to prevent creating temporal database&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7582 #7582] — t.rast3d.univar: Add format options and tests&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7631 #7631] — t.list: Add mapset options for t.list&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7636 #7636] — temporal: Remove needs_solo_run from t.vect.list and fix typos in t.vect.list &amp;amp; t.rast.list tests&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7731 #7731] — t.list: Add support for listing multiple dataset types&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7825 #7825] — temporal: Remove SQLite &amp;lt; 3.33 workaround&lt;br /&gt;
&lt;br /&gt;
== Earlier contributions to GRASS ==&lt;br /&gt;
&lt;br /&gt;
Contributions made before the GSoC coding period.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6719 #6719] — docs: Fixed broken tutorials link in README&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6745 #6745] — mkdocs: Fixed incorrect URL replacement in view source button&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6824 #6824] — wxGUI: Fixes UTM hemisphere selection in location wizard&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6864 #6864] — MkDocs: Fixes missing Parameter tabs in documentation&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6875 #6875] — v.profile: Add JSON output format&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6906 #6906] — MkDocs: Add title field to frontmatter and remove H1 headings&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6929 #6929] — v.profile: Fix compilation error when GEOS is not installed&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6949 #6949] — v.profile: Fixes incorrect quoting in JSON output&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6977 #6977] — r.kappa: Switch to JSON output using Parson library&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6979 #6979] — lib: Add wrapper for JSON output handling&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6985 #6985] — r.kappa: fix wrong reference data order in testcase&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6990 #6990] — wxGUI/datacatalog: Add database aliases for easier identification&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7031 #7031] — grass.script: Scan GRASS_ADDON_BASE in get_commands()&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7076 #7076] — v.db.select: Rewrite JSON output using parson library&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7107 #7107] — wxGUI/datacatalog: Add copy path option for databases and projects in datacatalog&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7122 #7122] — r.geomorphon: Rewrite with parson and add json test&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7297 #7297] — wxGUI/datacatalog: Add EPSG statusbar button and data catalog context menu options&lt;br /&gt;
* [https://github.com/OSGeo/grass-tutorials/pull/117 grass-tutorials#117] — Tutorials: fix broken link in time series tutorials&lt;/div&gt;</summary>
		<author><name>Saket0187</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GSoC_2026_Add_Spatio-Temporal_dataset_support_to_datacatalog_in_GUI&amp;diff=29072</id>
		<title>GSoC 2026 Add Spatio-Temporal dataset support to datacatalog in GUI</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GSoC_2026_Add_Spatio-Temporal_dataset_support_to_datacatalog_in_GUI&amp;diff=29072"/>
		<updated>2026-08-11T18:05:04Z</updated>

		<summary type="html">&lt;p&gt;Saket0187: Updated documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Saket Kumar Mall&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://numfocus.org/ NumFOCUS]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentors Name''' || Anna Petrasova, Stefan Blumentrath&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/saket0187/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''LinkedIn Profile''' || [https://www.linkedin.com/in/saket-kumar-mall/ View LinkedIn]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
&lt;br /&gt;
Before this project, the GRASS Data Catalog queried only standard spatial maps and bypassed the temporal database entirely. Space-time datasets (STDS) were therefore not visible in the GUI and could only be managed from the command line. Maps that were already registered in an STDS were listed as ordinary standalone maps, with no indication that they belonged to a dataset.&lt;br /&gt;
&lt;br /&gt;
In this project I extended the Data Catalog to support STDS natively. STRDS, STVDS and STR3DS are now listed inside their respective mapset trees alongside the standard spatial maps, registered maps are shown inside the dataset they belong to, and dedicated context menus let users create, inspect, modify and remove datasets and their registered maps directly from the GUI. Alongside the GUI work I also improved, tested and fixed the core temporal tools that the Data Catalog relies on.&lt;br /&gt;
&lt;br /&gt;
= Background =&lt;br /&gt;
&lt;br /&gt;
GRASS handles time series through its temporal framework. Maps are registered in space-time datasets, which are stored in a temporal database maintained per mapset. Three dataset types exist:&lt;br /&gt;
&lt;br /&gt;
* '''STRDS''' — space-time raster dataset&lt;br /&gt;
* '''STR3DS''' — space-time 3D raster dataset&lt;br /&gt;
* '''STVDS''' — space-time vector dataset&lt;br /&gt;
&lt;br /&gt;
These datasets are created and manipulated with the &amp;lt;code&amp;gt;t.*&amp;lt;/code&amp;gt; tools (&amp;lt;code&amp;gt;t.create&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;t.register&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt;, and others). Because the Data Catalog did not query the temporal database, none of this structure was visible in the GUI: users could see the individual maps, but not the datasets they belonged to, and every temporal operation required leaving the GUI for the command line.&lt;br /&gt;
&lt;br /&gt;
= Project goals =&lt;br /&gt;
&lt;br /&gt;
The goals below come from my accepted project proposal. The status column reflects the state of the work at the end of the coding period.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Goal !! Status&lt;br /&gt;
|-&lt;br /&gt;
| Show STRDS, STVDS and STR3DS under each mapset in the Data Catalog || Implemented&lt;br /&gt;
|-&lt;br /&gt;
| Nest registered maps inside their STDS || Implemented&lt;br /&gt;
|-&lt;br /&gt;
| Add context menu operations (create, rename, delete, register/unregister, metadata, export, …) || Implemented&lt;br /&gt;
|-&lt;br /&gt;
| Make the Data Catalog search aware of STDS || Implemented&lt;br /&gt;
|-&lt;br /&gt;
| Lazy loading for large datasets || Superseded — replaced by the temporal database queries described in [[#Loading strategy and performance|Loading strategy and performance]]&lt;br /&gt;
|-&lt;br /&gt;
| Enhancements to core temporal tools (format/JSON output, &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; options, bug fixes) || Implemented, see [[#Temporal tool enhancements|Temporal tool enhancements]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Implementation =&lt;br /&gt;
&lt;br /&gt;
All Data Catalog work is contained in a single pull request, [https://github.com/OSGeo/grass/pull/7608 OSGeo/grass#7608], which I developed as a draft from Week 4 onwards and opened for review in Week 10.&lt;br /&gt;
&lt;br /&gt;
== Dataset listing and tree structure ==&lt;br /&gt;
&lt;br /&gt;
* STRDS, STVDS and STR3DS are listed per mapset, at the same level as the existing raster, 3D raster and vector map listings. The dataset types are not grouped under a separate node; users distinguish them by their icons.&lt;br /&gt;
* Maps registered in a dataset are shown inside the corresponding dataset node.&lt;br /&gt;
* Maps that are already registered in an STDS are hidden from the regular map listing of the mapset. They remain accessible from inside the dataset node.&lt;br /&gt;
* I kept the existing Data Catalog hierarchy. Restructuring the whole tree was discussed with my mentors and deliberately rejected (see [[#Design decisions|Design decisions]]).&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0 auto;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;gallery perrow=&amp;quot;2&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot; caption=&amp;quot;Space-time datasets in the Data Catalog tree&amp;quot;&amp;gt;&lt;br /&gt;
File:DataCatalog1.png|Datasets listed alongside the raster, 3D raster and vector maps&lt;br /&gt;
File:DataCatalog2.png|Maps registered in a dataset, shown inside the dataset node&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Icons ==&lt;br /&gt;
&lt;br /&gt;
New icons were added for the three dataset types. Each one reuses the existing raster, vector or 3D raster map icon with a clock drawn on top of it, so the dataset type stays recognisable and the temporal nature is immediately visible.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0 auto;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;gallery perrow=&amp;quot;3&amp;quot; widths=&amp;quot;150&amp;quot; heights=&amp;quot;220&amp;quot; caption=&amp;quot;Icons for the three dataset types&amp;quot;&amp;gt;&lt;br /&gt;
File:Strds.png|STRDS listed under a mapset&lt;br /&gt;
File:Stvds.png|STVDS listed under a mapset&lt;br /&gt;
File:Str3ds.png|STR3DS listed under a mapset&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Loading strategy and performance ==&lt;br /&gt;
&lt;br /&gt;
Datasets and their registered maps are loaded as follows:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;t.connect&amp;lt;/code&amp;gt; is run once to determine which mapsets have a temporal database connection.&lt;br /&gt;
# For those mapsets, the datasets and the maps registered in them are fetched through the &amp;lt;code&amp;gt;grass.temporal.gui_support&amp;lt;/code&amp;gt; functions &amp;lt;code&amp;gt;tlist_grouped()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;registered_maps_grouped()&amp;lt;/code&amp;gt;, which query the temporal database.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;registered_maps_grouped()&amp;lt;/code&amp;gt; returns a nested dictionary of dataset type → dataset id → registered maps, where each map carries its id, start time, end time and, for relative time, its unit. Maps are ordered by start time, and time stamped maps that are not registered in any dataset are not included. This is what makes it possible to hide already registered maps from the standalone map listing.&lt;br /&gt;
&lt;br /&gt;
The result is one set of queries per mapset instead of one &amp;lt;code&amp;gt;t.*.list&amp;lt;/code&amp;gt; call per dataset, which is considerably faster on mapsets holding many datasets.&lt;br /&gt;
&lt;br /&gt;
Two earlier approaches were replaced during development:&lt;br /&gt;
&lt;br /&gt;
# '''Search path manipulation.''' At the very start, retrieving datasets from all mapsets required temporarily extending the search path with &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, running &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt;, and restoring the user's original search path. This was a workaround and was dropped once &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; supported the &amp;lt;code&amp;gt;mapset&amp;lt;/code&amp;gt; option ([https://github.com/OSGeo/grass/pull/7631 #7631]), and later became unnecessary altogether.&lt;br /&gt;
# '''Per-dataset listing with lazy loading.''' Up to Week 7, only the datasets were listed initially and their maps were loaded with &amp;lt;code&amp;gt;t.*.list&amp;lt;/code&amp;gt; when a dataset node was expanded. This worked but was slow on larger mapsets and complicated mapset reloading and keeping the tree in sync. The &amp;lt;code&amp;gt;gui_support&amp;lt;/code&amp;gt; queries described above made the per-dataset calls unnecessary and simplified the reload logic.&lt;br /&gt;
&lt;br /&gt;
== Context menu operations ==&lt;br /&gt;
&lt;br /&gt;
I added context menus for three nodes.&lt;br /&gt;
&lt;br /&gt;
'''Mapset node'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Action !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Create temporal dataset || Creates a new STDS in the selected mapset.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''STDS node'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Action !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Register maps || Registers maps in the dataset.&lt;br /&gt;
|-&lt;br /&gt;
| Unregister maps || Unregisters maps from the dataset.&lt;br /&gt;
|-&lt;br /&gt;
| Merge dataset || Merges datasets; cross-mapset merges are supported when the target mapset is in the search path.&lt;br /&gt;
|-&lt;br /&gt;
| Update metadata || Updates the dataset metadata.&lt;br /&gt;
|-&lt;br /&gt;
| Delete dataset only || Deletes the dataset.&lt;br /&gt;
|-&lt;br /&gt;
| Delete dataset and maps || Deletes the dataset together with the maps registered in it (&amp;lt;code&amp;gt;-fd&amp;lt;/code&amp;gt; flags).&lt;br /&gt;
|-&lt;br /&gt;
| Rename dataset || Renames the dataset.&lt;br /&gt;
|-&lt;br /&gt;
| Export dataset || Exports the dataset.&lt;br /&gt;
|-&lt;br /&gt;
| Show metadata || Displays the dataset metadata.&lt;br /&gt;
|-&lt;br /&gt;
| Display temporal extent || Shows the temporal extent of the dataset.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Map node inside an STDS'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Action !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Unregister map || Unregisters the map from its dataset.&lt;br /&gt;
|-&lt;br /&gt;
| Copy || Copies the map.&lt;br /&gt;
|-&lt;br /&gt;
| Copy name || Copies the map name.&lt;br /&gt;
|-&lt;br /&gt;
| Display layer || Adds the map to the current map display.&lt;br /&gt;
|-&lt;br /&gt;
| Show metadata || Displays the map metadata.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0 auto;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;gallery perrow=&amp;quot;3&amp;quot; widths=&amp;quot;230&amp;quot; heights=&amp;quot;240&amp;quot; caption=&amp;quot;Context menus&amp;quot;&amp;gt;&lt;br /&gt;
File:Mapset ContextMenu.png|Mapset node — create a temporal dataset&lt;br /&gt;
File:STDS ContextMenu.png|STDS node — dataset operations&lt;br /&gt;
File:STDS Map ContextMenu.png|Map registered in an STDS&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Import options ==&lt;br /&gt;
&lt;br /&gt;
I added the &amp;lt;code&amp;gt;t.*.import&amp;lt;/code&amp;gt; tools to the Data Catalog toolbar under &amp;quot;Select another import option&amp;quot;, so temporal import is reachable from the same place as the other import tools.&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
&lt;br /&gt;
The Data Catalog search was extended to cover STDS, so datasets are found together with the standard spatial maps.&lt;br /&gt;
&lt;br /&gt;
== Auto refresh ==&lt;br /&gt;
&lt;br /&gt;
STDS entries are refreshed automatically across the GUI when datasets are created or modified through context menu, so the tree stays consistent with the temporal database without a manual reload.&lt;br /&gt;
&lt;br /&gt;
== Module dialogs ==&lt;br /&gt;
&lt;br /&gt;
Context menu actions that run a GRASS tool open the corresponding module dialog on top of the existing GUI, instead of launching a separate module window through the &amp;lt;code&amp;gt;--ui&amp;lt;/code&amp;gt; option. This keeps the interaction inside the GUI the user is already working in.&lt;br /&gt;
&lt;br /&gt;
= Temporal tool enhancements =&lt;br /&gt;
&lt;br /&gt;
Part of this work prepared the temporal tools for the GUI integration, since the Data Catalog depends on them; the rest improved the temporal framework independently.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tool !! Change !! Pull request&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; || Added output format options || [https://github.com/OSGeo/grass/pull/7466 #7466]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; || Added test files || [https://github.com/OSGeo/grass/pull/7482 #7482]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; || Added a check on the temporal database connection so that a temporal database is no longer created for mapsets that have none. This first approach was later replaced by a more robust solution. || [https://github.com/OSGeo/grass/pull/7580 #7580]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; || Added the &amp;lt;code&amp;gt;mapset&amp;lt;/code&amp;gt; option, which accepts the current mapset (&amp;lt;code&amp;gt;&amp;quot;.&amp;quot;&amp;lt;/code&amp;gt;), all mapsets in the search path (&amp;lt;code&amp;gt;&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt;), or a comma-separated list of mapsets, together with tests || [https://github.com/OSGeo/grass/pull/7631 #7631]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; || Added support for listing multiple dataset types in one call (e.g. &amp;lt;code&amp;gt;type=strds,stvds&amp;lt;/code&amp;gt;), making the interface consistent with &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt; || [https://github.com/OSGeo/grass/pull/7731 #7731]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.rast.univar&amp;lt;/code&amp;gt; || Added format options || [https://github.com/OSGeo/grass/pull/7495 #7495]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.rast.univar&amp;lt;/code&amp;gt; || Added the range to the output and corrected the cells values || [https://github.com/OSGeo/grass/pull/7529 #7529]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.rast3d.list&amp;lt;/code&amp;gt; || Added pytest files || [https://github.com/OSGeo/grass/pull/7498 #7498]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.rast3d.list&amp;lt;/code&amp;gt; || Added further checks and fixed the issues they exposed || [https://github.com/OSGeo/grass/pull/7527 #7527]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.rast3d.list&amp;lt;/code&amp;gt; || Added the &amp;lt;code&amp;gt;format&amp;lt;/code&amp;gt; option and tests || [https://github.com/OSGeo/grass/pull/7531 #7531]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.rast3d.univar&amp;lt;/code&amp;gt; || Added format options and tests || [https://github.com/OSGeo/grass/pull/7582 #7582]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.connect&amp;lt;/code&amp;gt; || Added format options || [https://github.com/OSGeo/grass/pull/7535 #7535]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.connect&amp;lt;/code&amp;gt; || Added pytest coverage || [https://github.com/OSGeo/grass/pull/7573 #7573]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.vect.db.select&amp;lt;/code&amp;gt; || Added format options || [https://github.com/OSGeo/grass/pull/7530 #7530]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t.vect.db.select&amp;lt;/code&amp;gt; || Added pytest files || [https://github.com/OSGeo/grass/pull/7574 #7574]&lt;br /&gt;
|-&lt;br /&gt;
| temporal framework || Replaced the use of &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt; during import with a temporary GISRC environment || [https://github.com/OSGeo/grass/pull/7434 #7434]&lt;br /&gt;
|-&lt;br /&gt;
| temporal test suite || Removed &amp;lt;code&amp;gt;needs_solo_run&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;t.vect.list&amp;lt;/code&amp;gt; and fixed typos in the &amp;lt;code&amp;gt;t.vect.list&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;t.rast.list&amp;lt;/code&amp;gt; tests || [https://github.com/OSGeo/grass/pull/7636 #7636]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Design decisions =&lt;br /&gt;
&lt;br /&gt;
; Data Catalog hierarchy kept unchanged&lt;br /&gt;
: Changing the overall hierarchical structure of the Data Catalog was discussed with my mentors. After weighing the advantages and disadvantages, we kept the existing structure and built the STDS support on top of it.&lt;br /&gt;
&lt;br /&gt;
; Datasets at the same level, distinguished by icons&lt;br /&gt;
: Instead of collecting the three dataset types under a separate group node, they are listed at the same level and told apart by their icons. This keeps the tree flat and consistent with how the existing map types are presented.&lt;br /&gt;
&lt;br /&gt;
; One map, one place in the tree&lt;br /&gt;
: Maps registered in an STDS are hidden from the regular map listing rather than shown twice, and remain reachable inside their dataset node.&lt;br /&gt;
&lt;br /&gt;
= Current state =&lt;br /&gt;
&lt;br /&gt;
* The Data Catalog work described above is complete. It is contained in [https://github.com/OSGeo/grass/pull/7608 #7608].&lt;br /&gt;
* The temporal tool enhancements listed above are merged.&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Period !! Timeline !! Tasks !! Pull requests&lt;br /&gt;
|-&lt;br /&gt;
| '''Community Bonding Period'''&lt;br /&gt;
||&lt;br /&gt;
May 1 – May 25, 2026&lt;br /&gt;
||&lt;br /&gt;
# Introductory meeting with the GRASS mentors and contributors, followed by a project-specific meeting on the scope of the project&lt;br /&gt;
# Studied the temporal framework, its documentation and the Data Catalog code base&lt;br /&gt;
# Set up a local environment with mapsets, temporal databases and registered/unregistered time series maps&lt;br /&gt;
# Fixed a broken link found while going through the time series tutorials&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass-tutorials/pull/117 grass-tutorials#117]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1'''&lt;br /&gt;
||&lt;br /&gt;
May 26 – June 1, 2026&lt;br /&gt;
||&lt;br /&gt;
# Wrapped up open pull requests, including the JSON output rewrite of &amp;lt;code&amp;gt;r.geomorphon&amp;lt;/code&amp;gt;&lt;br /&gt;
# Worked on GUI feature enhancements&lt;br /&gt;
# Worked on a temporal framework issue related to importing STDS: replaced the use of &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt; during import with a temporary GISRC environment&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7122 #7122], [https://github.com/OSGeo/grass/pull/7434 #7434]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2'''&lt;br /&gt;
||&lt;br /&gt;
June 2 – June 8, 2026&lt;br /&gt;
||&lt;br /&gt;
# Added output format options to &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;t.rast.univar&amp;lt;/code&amp;gt;&lt;br /&gt;
# Added test files for &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; and pytest files for &amp;lt;code&amp;gt;t.rast3d.list&amp;lt;/code&amp;gt;&lt;br /&gt;
# Added further checks and fixes to &amp;lt;code&amp;gt;t.rast3d.list&amp;lt;/code&amp;gt;&lt;br /&gt;
# Fixed pre-existing issues found while working on these modules&lt;br /&gt;
# Started weekly project meetings with my mentors&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7466 #7466], [https://github.com/OSGeo/grass/pull/7482 #7482], [https://github.com/OSGeo/grass/pull/7495 #7495], [https://github.com/OSGeo/grass/pull/7498 #7498], [https://github.com/OSGeo/grass/pull/7527 #7527]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3'''&lt;br /&gt;
||&lt;br /&gt;
June 9 – June 15, 2026&lt;br /&gt;
||&lt;br /&gt;
# Continued adding format and JSON output options to temporal tools (&amp;lt;code&amp;gt;t.connect&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;t.rast3d.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;t.vect.db.select&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;t.rast.univar&amp;lt;/code&amp;gt;), with tests and documentation&lt;br /&gt;
# Discussed the runtime of the existing temporal modules with my mentors as preparation for the GUI integration&lt;br /&gt;
# Addressed review feedback on the open pull requests&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7529 #7529], [https://github.com/OSGeo/grass/pull/7530 #7530], [https://github.com/OSGeo/grass/pull/7531 #7531], [https://github.com/OSGeo/grass/pull/7535 #7535]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4'''&lt;br /&gt;
||&lt;br /&gt;
June 16 – June 22, 2026&lt;br /&gt;
||&lt;br /&gt;
# Added pytest coverage for &amp;lt;code&amp;gt;t.connect&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;t.vect.db.select&amp;lt;/code&amp;gt;&lt;br /&gt;
# Implemented an initial check to prevent creating temporal databases for mapsets without a temporal database connection; this approach was later replaced by a more robust solution&lt;br /&gt;
# Profiled the import time of a module used by nearly every temporal tool, since slow imports would make the GUI feel unresponsive; the difference we saw turned out to be operating-system specific and was fixed by my mentors, so no lazy-import work was needed&lt;br /&gt;
# Opened the draft pull request for the main project&lt;br /&gt;
# Discussed how STDS should be represented in the Data Catalog, including the need for dedicated icons; continued with a temporary icon&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7573 #7573], [https://github.com/OSGeo/grass/pull/7574 #7574], [https://github.com/OSGeo/grass/pull/7580 #7580], [https://github.com/OSGeo/grass/pull/7608 #7608] (draft)&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5'''&lt;br /&gt;
||&lt;br /&gt;
June 23 – June 30, 2026&lt;br /&gt;
||&lt;br /&gt;
# Implemented the first listing of STDS in the Data Catalog&lt;br /&gt;
# Retrieved datasets from all mapsets by temporarily extending the search path with &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, running &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; and restoring the original search path; replaced later in the week once &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; supported &amp;lt;code&amp;gt;mapset=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Implemented lazy loading of the maps registered in a dataset&lt;br /&gt;
# Added the first context menu actions: create dataset from the mapset node; rename, delete, merge (including cross-mapset merges when the target mapset is in the search path), show metadata, register and unregister maps; display and unregister for maps inside a dataset&lt;br /&gt;
# Added &amp;lt;code&amp;gt;mapset&amp;lt;/code&amp;gt; options to &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; with tests&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7608 #7608], [https://github.com/OSGeo/grass/pull/7631 #7631]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6'''&lt;br /&gt;
||&lt;br /&gt;
July 1 – July 7, 2026&lt;br /&gt;
||&lt;br /&gt;
# Refined the structure of the draft implementation in preparation for wider community review&lt;br /&gt;
# Addressed community feedback on the icons and the presentation of the new STDS nodes&lt;br /&gt;
# Discussed restructuring the Data Catalog hierarchy with my mentors and decided to keep the existing structure&lt;br /&gt;
# Improved the temporal test suite&lt;br /&gt;
# Added format options and tests to &amp;lt;code&amp;gt;t.rast3d.univar&amp;lt;/code&amp;gt;&lt;br /&gt;
# Submitted the midterm evaluation (July 6–10)&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7582 #7582], [https://github.com/OSGeo/grass/pull/7636 #7636]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7'''&lt;br /&gt;
||&lt;br /&gt;
July 8 – July 15, 2026&lt;br /&gt;
||&lt;br /&gt;
# Extended the functionality available on STDS nodes and on the maps registered inside them&lt;br /&gt;
# Refined the context menu actions and the overall interaction with the Data Catalog based on mentor and community feedback&lt;br /&gt;
# Identified further optimisation opportunities in the implementation&lt;br /&gt;
# Prioritised the remaining features with my mentors, separating those essential for the initial implementation from later additions&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7608 #7608]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8'''&lt;br /&gt;
||&lt;br /&gt;
July 16 – July 22, 2026&lt;br /&gt;
||&lt;br /&gt;
# Added support for listing multiple dataset types in a single &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt; call, consistent with &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;&lt;br /&gt;
# Adopted the new &amp;lt;code&amp;gt;gui_support&amp;lt;/code&amp;gt; functions introduced by my mentors, replacing the per-dataset &amp;lt;code&amp;gt;t.*.list&amp;lt;/code&amp;gt; calls with temporal database queries executed once per mapset&lt;br /&gt;
# Removed the per-dataset lazy loading approach used until Week 7, which simplified mapset reloading and keeping the tree in sync&lt;br /&gt;
# Hid maps that are already registered in an STDS from the regular map listing&lt;br /&gt;
# Updated the context menu actions for mapset, dataset and map nodes&lt;br /&gt;
# Fixed a watchdog Observer RuntimeError on macOS&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7731 #7731], [https://github.com/OSGeo/grass/pull/7677 #7677], [https://github.com/OSGeo/grass/pull/7608 #7608]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9'''&lt;br /&gt;
||&lt;br /&gt;
July 23 – July 29, 2026&lt;br /&gt;
||&lt;br /&gt;
# Completed the remaining context menu options discussed with my mentors&lt;br /&gt;
# Addressed review feedback on the multiple dataset type support in &amp;lt;code&amp;gt;t.list&amp;lt;/code&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7608 #7608], [https://github.com/OSGeo/grass/pull/7731 #7731]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10'''&lt;br /&gt;
||&lt;br /&gt;
July 30 – August 5, 2026&lt;br /&gt;
||&lt;br /&gt;
# Added search and filtering support for STDS in the Data Catalog&lt;br /&gt;
# Added the &amp;lt;code&amp;gt;t.*.import&amp;lt;/code&amp;gt; tools to the Data Catalog toolbar under &amp;quot;Select another import option&amp;quot;&lt;br /&gt;
# Changed context menu actions to open module dialogs on top of the existing GUI instead of launching separate module windows via &amp;lt;code&amp;gt;--ui&amp;lt;/code&amp;gt;&lt;br /&gt;
# Reviewed the pull request, removed unnecessary code and simplified the implementation; converted the draft into a pull request ready for review&lt;br /&gt;
# Experimented with integrating &amp;lt;code&amp;gt;g.gui.animation&amp;lt;/code&amp;gt; into the GUI as a tab; found a freeze and file descriptor exhaustion on large datasets and opened PR to address this performance issue.&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7608 #7608], [https://github.com/OSGeo/grass/pull/7811 #7811]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11'''&lt;br /&gt;
||&lt;br /&gt;
August 6 – August 12, 2026&lt;br /&gt;
||&lt;br /&gt;
# Made the &amp;lt;code&amp;gt;g.gui.tplot&amp;lt;/code&amp;gt; window resizable&lt;br /&gt;
# ''[Will be updated soon]''&lt;br /&gt;
||&lt;br /&gt;
[https://github.com/OSGeo/grass/pull/7820 #7820]&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12'''&lt;br /&gt;
||&lt;br /&gt;
August 13 – August 19, 2026&lt;br /&gt;
||&lt;br /&gt;
# ''[Will be updated soon]''&lt;br /&gt;
||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Additional material:&lt;br /&gt;
&lt;br /&gt;
* GSoC blog: ''[https://saket0187.github.io/gsoc-2026/ Blog link]''&lt;br /&gt;
* Demonstration video of the Data Catalog implementation: available in [https://github.com/OSGeo/grass/pull/7608 #7608]&lt;br /&gt;
&lt;br /&gt;
= Future work =&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;env&amp;lt;/code&amp;gt; support in the temporal framework''' — allow an environment to be passed to &amp;lt;code&amp;gt;grass.temporal&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;tgis.init(env=env)&amp;lt;/code&amp;gt;. I started this during the coding period and paused it because it affects several parts of the framework.&lt;br /&gt;
* '''Appending to an existing STDS''' — modify &amp;lt;code&amp;gt;t.rast.algebra&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;t.rast.aggregate&amp;lt;/code&amp;gt; and similar tools so that their output can be appended to an existing dataset instead of always creating a new one.&lt;br /&gt;
* '''Temporal import fixes''' — resolve issues in the temporal import workflow, such as &amp;lt;code&amp;gt;t.rast.import&amp;lt;/code&amp;gt; failing when a new project is created and an STRDS is imported into it.&lt;br /&gt;
* '''Further temporal tool enhancements''' — continue the work on format/JSON output and tool options started during the project.&lt;br /&gt;
* '''Usability issues in the temporal workflow''' — address open issues that make common temporal tasks easier for users.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;g.gui.animation&amp;lt;/code&amp;gt; integration''' — finish integrating the animation tool into the GUI so that it can be opened from the STDS context menu, and resolve the freeze and file descriptor exhaustion seen with large datasets ([https://github.com/OSGeo/grass/pull/7811 #7811]).&lt;br /&gt;
&lt;br /&gt;
= Pull requests =&lt;br /&gt;
&lt;br /&gt;
== Data Catalog and GUI ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7608 #7608] — wxGUI/datacatalog: Add STDS in datacatalog&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7677 #7677] — wxGUI: Share watchdog Observer to fix FSEvents RuntimeError&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7811 #7811] — wxGUI/animation: Fix freeze and descriptor exhaustion on large datasets&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7820 #7820] — wxGUI/tplot: Make the window resizable&lt;br /&gt;
&lt;br /&gt;
== Temporal tools and framework ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7434 #7434] — temporal: Use temporary GISRC env instead of g.mapset for import&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7466 #7466] — t.list: Add output format options in t.list&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7482 #7482] — t.list: Add tests files to t.list&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7495 #7495] — t.rast.univar: Add format options in t.rast.univar&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7498 #7498] — t.rast3d.list: Add pytest files&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7527 #7527] — t.rast3d.list: Add checks and some fixes&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7529 #7529] — t.rast.univar: Add range and correct cells values&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7530 #7530] — t.vect.db.select: Add format options&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7531 #7531] — t.rast3d.list: Add format option and tests&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7535 #7535] — t.connect: Add formats&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7573 #7573] — t.connect: Add pytest&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7574 #7574] — t.vect.db.select: Add pytest files&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7580 #7580] — t.list: Check connection to prevent creating temporal database&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7582 #7582] — t.rast3d.univar: Add format options and tests&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7631 #7631] — t.list: Add mapset options for t.list&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7636 #7636] — temporal: Remove needs_solo_run from t.vect.list and fix typos in t.vect.list &amp;amp; t.rast.list tests&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7731 #7731] — t.list: Add support for listing multiple dataset types&lt;br /&gt;
&lt;br /&gt;
== Earlier contributions to GRASS ==&lt;br /&gt;
&lt;br /&gt;
Contributions made before the GSoC coding period.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6719 #6719] — docs: Fixed broken tutorials link in README&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6745 #6745] — mkdocs: Fixed incorrect URL replacement in view source button&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6824 #6824] — wxGUI: Fixes UTM hemisphere selection in location wizard&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6864 #6864] — MkDocs: Fixes missing Parameter tabs in documentation&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6875 #6875] — v.profile: Add JSON output format&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6906 #6906] — MkDocs: Add title field to frontmatter and remove H1 headings&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6929 #6929] — v.profile: Fix compilation error when GEOS is not installed&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6949 #6949] — v.profile: Fixes incorrect quoting in JSON output&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6977 #6977] — r.kappa: Switch to JSON output using Parson library&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6979 #6979] — lib: Add wrapper for JSON output handling&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6985 #6985] — r.kappa: fix wrong reference data order in testcase&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/6990 #6990] — wxGUI/datacatalog: Add database aliases for easier identification&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7031 #7031] — grass.script: Scan GRASS_ADDON_BASE in get_commands()&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7076 #7076] — v.db.select: Rewrite JSON output using parson library&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7107 #7107] — wxGUI/datacatalog: Add copy path option for databases and projects in datacatalog&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7122 #7122] — r.geomorphon: Rewrite with parson and add json test&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7297 #7297] — wxGUI/datacatalog: Add EPSG statusbar button and data catalog context menu options&lt;br /&gt;
* [https://github.com/OSGeo/grass-tutorials/pull/117 grass-tutorials#117] — Tutorials: fix broken link in time series tutorials&lt;/div&gt;</summary>
		<author><name>Saket0187</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=File:DataCatalog2.png&amp;diff=29071</id>
		<title>File:DataCatalog2.png</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=File:DataCatalog2.png&amp;diff=29071"/>
		<updated>2026-08-11T17:20:12Z</updated>

		<summary type="html">&lt;p&gt;Saket0187: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DataCatalog2&lt;/div&gt;</summary>
		<author><name>Saket0187</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=File:DataCatalog1.png&amp;diff=29070</id>
		<title>File:DataCatalog1.png</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=File:DataCatalog1.png&amp;diff=29070"/>
		<updated>2026-08-11T17:19:38Z</updated>

		<summary type="html">&lt;p&gt;Saket0187: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DataCatalog1&lt;/div&gt;</summary>
		<author><name>Saket0187</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=File:STDS_Map_ContextMenu.png&amp;diff=29069</id>
		<title>File:STDS Map ContextMenu.png</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=File:STDS_Map_ContextMenu.png&amp;diff=29069"/>
		<updated>2026-08-11T17:14:22Z</updated>

		<summary type="html">&lt;p&gt;Saket0187: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;STDS Map ContextMenu&lt;/div&gt;</summary>
		<author><name>Saket0187</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=File:STDS_ContextMenu.png&amp;diff=29068</id>
		<title>File:STDS ContextMenu.png</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=File:STDS_ContextMenu.png&amp;diff=29068"/>
		<updated>2026-08-11T17:13:28Z</updated>

		<summary type="html">&lt;p&gt;Saket0187: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;STDS ContextMenu&lt;/div&gt;</summary>
		<author><name>Saket0187</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=File:Mapset_ContextMenu.png&amp;diff=29067</id>
		<title>File:Mapset ContextMenu.png</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=File:Mapset_ContextMenu.png&amp;diff=29067"/>
		<updated>2026-08-11T17:12:05Z</updated>

		<summary type="html">&lt;p&gt;Saket0187: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mapset ContextMenu&lt;/div&gt;</summary>
		<author><name>Saket0187</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=File:Str3ds.png&amp;diff=29066</id>
		<title>File:Str3ds.png</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=File:Str3ds.png&amp;diff=29066"/>
		<updated>2026-08-11T17:06:00Z</updated>

		<summary type="html">&lt;p&gt;Saket0187: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;icon of str3ds&lt;/div&gt;</summary>
		<author><name>Saket0187</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=File:Stvds.png&amp;diff=29065</id>
		<title>File:Stvds.png</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=File:Stvds.png&amp;diff=29065"/>
		<updated>2026-08-11T17:05:22Z</updated>

		<summary type="html">&lt;p&gt;Saket0187: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;icon of stvds&lt;/div&gt;</summary>
		<author><name>Saket0187</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=File:Strds.png&amp;diff=29064</id>
		<title>File:Strds.png</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=File:Strds.png&amp;diff=29064"/>
		<updated>2026-08-11T17:04:17Z</updated>

		<summary type="html">&lt;p&gt;Saket0187: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;icon of strds&lt;/div&gt;</summary>
		<author><name>Saket0187</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_Ideas_2026&amp;diff=28866</id>
		<title>GRASS GSoC Ideas 2026</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_Ideas_2026&amp;diff=28866"/>
		<updated>2026-05-06T16:15:02Z</updated>

		<summary type="html">&lt;p&gt;Saket0187: /* Accepted ideas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== About ==&lt;br /&gt;
Important: While we are still an OSGeo project, we changed our fiscal sponsor to [https://numfocus.org/ NumFOCUS].&lt;br /&gt;
&lt;br /&gt;
''As a result, GRASS participates in GSoC under the [https://numfocus.org/ NumFOCUS] umbrella organization.''&lt;br /&gt;
&lt;br /&gt;
Read more about our governance [https://grass.osgeo.org/about/governance/ on GRASS website].&lt;br /&gt;
&lt;br /&gt;
* [https://numfocus.org/programs/google-summer-code The NumFOCUS GSoC main page]&lt;br /&gt;
* [https://github.com/numfocus/gsoc/blob/master/CONTRIBUTING-contributors.md NumFOCUS guidelines for contributors].&lt;br /&gt;
* [https://summerofcode.withgoogle.com/ Official GSoC page at Google]&lt;br /&gt;
&lt;br /&gt;
== Accepted ideas ==&lt;br /&gt;
=== Idea title ===&lt;br /&gt;
* Student:&lt;br /&gt;
* Mentors:&lt;br /&gt;
* [[GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C|Example of Wiki page]]&lt;br /&gt;
&lt;br /&gt;
=== Add Spatio-Temporal dataset support to datacatalog in GUI ===&lt;br /&gt;
* Student: Saket Kumar Mall&lt;br /&gt;
* Mentors: Anna Petrasova, Stefan Blumentrath&lt;br /&gt;
* [[GSoC_2026_Add_Spatio-Temporal_dataset_support_to_datacatalog_in_GUI|Project Wiki Page]]&lt;br /&gt;
&lt;br /&gt;
=== Support writing tests with pytest ===&lt;br /&gt;
* Student: Gulshan Kumar&lt;br /&gt;
* Mentors: Vaclav Petras, Corey White&lt;br /&gt;
* [[GRASS_GSoC_2026_Support_writing_tests_with_pytest|Project Wiki Page]]&lt;br /&gt;
&lt;br /&gt;
== AI Tool Usage Policy ==&lt;br /&gt;
We acknowledge that applicants may use AI tools (like ChatGPT, Copilot, etc.) to assist with proposal writing and coding. However:&lt;br /&gt;
&lt;br /&gt;
* Your proposal should reflect your own understanding and voice. AI-generated &amp;quot;slop&amp;quot; (overly generic or regurgitated content) is easy to spot and will hurt your application.&lt;br /&gt;
* We evaluate applications primarily on GitHub contributions and communication with the GRASS community, not just proposal polish.&lt;br /&gt;
* Show us you understand the project through high-quality pull requests on GitHub.&lt;br /&gt;
* 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.).&lt;br /&gt;
&lt;br /&gt;
== Ideas ==&lt;br /&gt;
If you are a student you can suggest a new idea or pick up an existing one. In any case write about it to [https://discourse.osgeo.org/c/grass/developer/61 OSGeo Discourse forum for GRASS developers], [https://github.com/OSGeo/grass/discussions GitHub Discussions], or [https://gitter.im/grassgis/community Gitter].&lt;br /&gt;
&lt;br /&gt;
You are invited as well to have a close look at ideas from previous years ([https://trac.osgeo.org/grass/wiki/GSoC/2014 2014], [https://trac.osgeo.org/grass/wiki/GSoC/2015 2015], [https://trac.osgeo.org/grass/wiki/GSoC/2016 2016],&lt;br /&gt;
[https://trac.osgeo.org/grass/wiki/GSoC/2017 2017],&lt;br /&gt;
[https://trac.osgeo.org/grass/wiki/GSoC/2018 2018],&lt;br /&gt;
[https://trac.osgeo.org/grass/wiki/GSoC/2019 2019],&lt;br /&gt;
[https://trac.osgeo.org/grass/wiki/GSoC/2020 2020],&lt;br /&gt;
[https://trac.osgeo.org/grass/wiki/GSoC/2021 2021],&lt;br /&gt;
[https://trac.osgeo.org/grass/wiki/GSoC/2022 2022],&lt;br /&gt;
[https://trac.osgeo.org/grass/wiki/GSoC/2023 2023])&lt;br /&gt;
which have not yet been implemented.&lt;br /&gt;
You can also look at accepted GRASS GSoC [https://trac.osgeo.org/grass/wiki/GSoC projects from previous years] for an idea of scope.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Parallelization of existing tools ===&lt;br /&gt;
&lt;br /&gt;
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, ...&lt;br /&gt;
For overview of current state, see [[Raster_Parallelization_with_OpenMP]].&lt;br /&gt;
&lt;br /&gt;
* Requirements: familiarity with C, OpenMP&lt;br /&gt;
* Mentor: Huidae Cho&lt;br /&gt;
* Co-mentor: Vaclav Petras, Anna Petrasova&lt;br /&gt;
* Project length: Large (350 hours)&lt;br /&gt;
* Rating: difficult&lt;br /&gt;
* Expected Outcomes: parallelized 2-5 tools, depending on complexity&lt;br /&gt;
* Test of skills (one or more):&lt;br /&gt;
** Address https://github.com/OSGeo/grass/issues/5776 (carefully read the existing conversation in the issue and linked PR)&lt;br /&gt;
** Pick a tool and develop prototype implementation of the parallelization.&lt;br /&gt;
&lt;br /&gt;
=== Improve GRASS user experience in Jupyter Notebook ===&lt;br /&gt;
[[File:Jupyter_interactive_viewshed.png|500px|thumb|right|InteractiveMap in grass.jupyter library]]&lt;br /&gt;
Python package [https://grass.osgeo.org/grass-stable/manuals/libpython/grass.jupyter.html grass.jupyter] was developed during [https://trac.osgeo.org/grass/wiki/GSoC/2021/JupyterAndGRASS 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.&lt;br /&gt;
&lt;br /&gt;
* Requirements: Python&lt;br /&gt;
* Mentor: Anna Petrasova&lt;br /&gt;
* Co-mentor: Vaclav Petras, Helena Mitasova, Corey White&lt;br /&gt;
* Project length: Large (350 hours)&lt;br /&gt;
* Rating: easy to medium&lt;br /&gt;
* Expected Outcomes: improved user experience when using GRASS through notebooks&lt;br /&gt;
* Test of skills: write a test for [https://github.com/OSGeo/grass/tree/main/python/grass/jupyter grass.jupyter library] using python unittest or pytest, more info [https://grass.osgeo.org/grass-devel/manuals/libpython/gunittest_testing.html here] or rewrite some of the functions in grass.jupyter library using the new [https://grass.osgeo.org/grass-devel/manuals/python_intro.html#running-tools Tools API].&lt;br /&gt;
&lt;br /&gt;
=== Add JSON output to different tools ===&lt;br /&gt;
There are several tools in GRASS that would benefit from a JSON-formatted output.&lt;br /&gt;
Besides adding the JSON output, the work would also include adding tests and basic documentation.&lt;br /&gt;
* Requirements: C, Python&lt;br /&gt;
* Mentor: Vaclav Petras&lt;br /&gt;
* Co-mentor: Anna Petrasova, Corey White&lt;br /&gt;
* Project length: Large (350 hours)&lt;br /&gt;
* Rating: easy to medium&lt;br /&gt;
* Expected Outcomes: 10-20 tools (depending on project length and complexity of the tool) tools with well tested JSON output&lt;br /&gt;
* Note: A lot of work on JSON was already done, but there is more! Some of the remaining tools require more design. There are also Python tools (not just C which was the focus previously) and then also the grass-addons repo. Some tools also don't have any machine readable output right now and should. Also current tools which use other tools should use the new JSON as opposed to what they are using now. Preparing a well-reasoned list of tasks is a part of the application.&lt;br /&gt;
* Test of skills (pick one or more): &lt;br /&gt;
** https://github.com/OSGeo/grass/issues/6968&lt;br /&gt;
** https://github.com/OSGeo/grass/issues/6969&lt;br /&gt;
** https://github.com/OSGeo/grass/issues/6970&lt;br /&gt;
&lt;br /&gt;
=== Support writing tests with pytest ===&lt;br /&gt;
&lt;br /&gt;
* The current testing framework, ''[https://grass.osgeo.org/grass-stable/manuals/libpython/gunittest.html 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.&lt;br /&gt;
* ''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.&lt;br /&gt;
* Using ''pytest'' should lead to tests which feel more like Python scripts and to minimum of testing-specific code.&lt;br /&gt;
* 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).&lt;br /&gt;
* Two main things needed:&lt;br /&gt;
** Create general comparison functions from the ''grass.gunittest'' assert methods so that they can be used with pytest.&lt;br /&gt;
** 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  &lt;br /&gt;
* Additional things needed:&lt;br /&gt;
** Fixture for pytest to set up and tear down a GRASS session in a temporary mapset.&lt;br /&gt;
&lt;br /&gt;
* Requirements: Python&lt;br /&gt;
* Project length: Large (350 hours)&lt;br /&gt;
* Mentor: Vaclav Petras&lt;br /&gt;
* Co-mentor: Stefan Blumentrath&lt;br /&gt;
* Proposed by: Vaclav Petras&lt;br /&gt;
* Rating: easy to medium&lt;br /&gt;
* Expected Outcomes: Convenient way of writing tests with pytest&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
=== Fix known code defects ===&lt;br /&gt;
&lt;br /&gt;
* Fix code defects (security or code quality) such as those reported by Coverity Scan.&lt;br /&gt;
* Mentors: Vaclav Petras&lt;br /&gt;
* Co-mentors: Nicklas Larsson&lt;br /&gt;
* Proposed by: Vaclav Petras&lt;br /&gt;
* Project length: Large (350 hours)&lt;br /&gt;
* Rating: medium&lt;br /&gt;
* Requirements:&lt;br /&gt;
** Language: C&lt;br /&gt;
** Proposal: Define milestones which will be used during the evaluation.&lt;br /&gt;
* Expected outcomes:&lt;br /&gt;
** Reduction of issues by 70-100%.&lt;br /&gt;
** New tests for changed code if missing.&lt;br /&gt;
* Test and training tasks (complete more than one): Fix e.g., [https://gcc.gnu.org/onlinedocs/gcc/Static-Analyzer-Options.html GCC Static Analysis], [https://clang.llvm.org/docs/ClangStaticAnalyzer.html Clang Static Analyzer] or [https://cppcheck.sourceforge.io Cppcheck] issues.&lt;br /&gt;
&lt;br /&gt;
=== Subcommand CLI for GRASS ===&lt;br /&gt;
&lt;br /&gt;
* Make running of GRASS tools in command line as easy as possible.&lt;br /&gt;
** `grass run r.slope.aspect elevation=elevation.tiff slope=slope.tiff aspect=aspect.tiff`&lt;br /&gt;
* Project length: Large (350 hours)&lt;br /&gt;
* Rating: medium&lt;br /&gt;
* Requirements:&lt;br /&gt;
** Language: Python&lt;br /&gt;
** 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.&lt;br /&gt;
* Mentors: Vaclav Petras&lt;br /&gt;
* Co-mentors: Stefan Blumentrath, Corey White&lt;br /&gt;
* Proposed by: Vaclav Petras&lt;br /&gt;
* Expected outcomes:&lt;br /&gt;
** A subcommand which runs a GRASS tool on GeoTiff and GeoPackage in one step.&lt;br /&gt;
** A complete parity with the existing CLI.&lt;br /&gt;
** An underlying Python API which will be used to implement the CLI.&lt;br /&gt;
* Test and training tasks (complete one or more): Add a subcommand, sub-subcommand, or an option to the experimental interface (with tests).&lt;br /&gt;
** Add `--region` to set a temporary computational region for the execution, e.g. `--region=&amp;quot;raster=raster_name&amp;quot;`.&lt;br /&gt;
** Add `--import-raster=some/file.tiff` which imports (r.import) a raster file (same for vector and similarly for export).&lt;br /&gt;
** Add `--link-raster=some/file.tiff` which links (r.external) a raster file (same for vector and similarly for r.external.out).&lt;br /&gt;
&lt;br /&gt;
Current state:&lt;br /&gt;
&lt;br /&gt;
 # Reveals the existing subcommands&lt;br /&gt;
 PYTHONPATH=$(grass --config python-path) python -m grass.app --help&lt;br /&gt;
 # Allows running subset of commands&lt;br /&gt;
 grass run --help&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== STAC (SpatioTemporal Asset Catalog) Integration ===&lt;br /&gt;
&lt;br /&gt;
Create new import and export capabilities for GRASS which allow users to easily ingest data from STAC catalogs and export locations and mapsets as STAC specs for data discovery within STAC browsers. &lt;br /&gt;
&lt;br /&gt;
* Requirements: familiar with python, STAC specs&lt;br /&gt;
* Mentor: Corey White&lt;br /&gt;
* Co-mentor: Vaclav Petras, Anna Petrasova&lt;br /&gt;
* Project length: Large (350 hours)&lt;br /&gt;
* Rating: medium&lt;br /&gt;
* Expected Outcomes: completion of t.in.stac and t.out.stac&lt;br /&gt;
* Test of skills:&lt;br /&gt;
** suggest or implement solution for implementing t.out.stac using the prototype STAC spec https://github.com/tomorrownow/grass-stac-extension &lt;br /&gt;
** suggest/implement solution for completing https://github.com/OSGeo/grass-addons/pull/802&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== GUI: Add space-time datasets support in Data Catalog ===&lt;br /&gt;
[[File:GUI_data_tab.png|400px|thumb|right|Data catalog]]&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
* Requirements: familiar with Python&lt;br /&gt;
* Project length: Large (350 hours)&lt;br /&gt;
* Mentor: Martin Landa&lt;br /&gt;
* Co-mentor: Anna Petrasova&lt;br /&gt;
* Proposed by: Martin Landa&lt;br /&gt;
* Rating: medium&lt;br /&gt;
* Expected Outcomes:  175 hours basic support for space-time raster datasets; 350 extended support also for other space-time datasets types (vector, 3D raster)&lt;br /&gt;
* Test of skills:&lt;br /&gt;
** suggest/implement solution for completing https://github.com/OSGeo/grass/issues/2599&lt;br /&gt;
&lt;br /&gt;
=== Searchable metadata in Space Time Datasets ===&lt;br /&gt;
The temporal framework in GRASS was initially developed almost 15 years ago. Spatio-temporal data has become more widely available since then and new standards emerged like e.g. ''[https://docs.ogc.org/cs/25-004/25-004.html STAC]'' with ''[https://github.com/stac-extensions/stac-extensions.github.io extensions]'', or the ''[https://cfconventions.org/ CF-conventions]''. The aim of this project is to extend the metadata model in the temporal framework to improve discoverability of map datasets registered in TGIS and to allow users to embed extended metadata with the registered maps in a Space Time Dataset in a searchable way. Ideally, the new model is able to account for the standards mentioned above.&lt;br /&gt;
 &lt;br /&gt;
See also: https://github.com/OSGeo/grass/issues/1938&lt;br /&gt;
&lt;br /&gt;
* Requirements: Python, SQL, JSON&lt;br /&gt;
* Project length: Large (350 hours)&lt;br /&gt;
* Mentor: Stefan Blumentrath&lt;br /&gt;
* Co-mentor: ???&lt;br /&gt;
* Proposed by: Stefan Blumentrath&lt;br /&gt;
* Rating: medium&lt;br /&gt;
* Expected Outcomes:&lt;br /&gt;
** an updated TGIS database model (version 4) that:&lt;br /&gt;
*** is oriented on relevant metadata standards (STAC, CF-Convention, ...)&lt;br /&gt;
*** allows to use metadata in temporal_where to select relevant elements of Space time datasets&lt;br /&gt;
** updated tool to create space time datasets (t.create) in the TGIS database with extended metadata&lt;br /&gt;
** updated tool to register map datasets (t.register) in the TGIS database with extended metadata&lt;br /&gt;
** Conversion tool for database Upgrades (v3 to v4)&lt;br /&gt;
** a new tool to update / modify metadata in the TGIS database&lt;br /&gt;
** Storage of timeseries metadata for both C-based and temporal Tools&lt;br /&gt;
&lt;br /&gt;
* Test of skills (e.g.):&lt;br /&gt;
** address one or more sub-tasks from https://github.com/OSGeo/grass/issues/3427 (add append-mode to selected new tool(s))&lt;br /&gt;
** suggest/implement solution for https://github.com/OSGeo/grass/issues/3394 (more complex task)&lt;br /&gt;
** suggest/implement solution for https://github.com/OSGeo/grass/issues/7041&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Add {your research idea} to GRASS ===&lt;br /&gt;
&lt;br /&gt;
* In general, you can propose any topic, but you can specifically propose integrating your research or research idea into GRASS.&lt;br /&gt;
* Requirements:&lt;br /&gt;
** Language:&lt;br /&gt;
*** Depends on the project, often Python, sometimes C.&lt;br /&gt;
*** Adding your latest ecological analysis &lt;br /&gt;
** Proposal:&lt;br /&gt;
*** Discuss relevance to GRASS.&lt;br /&gt;
*** Describe technical steps needed for integration.&lt;br /&gt;
*** 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.&lt;br /&gt;
*** Specify what research was done and what needs to be accomplished in order to have usable product at the end of summer.&lt;br /&gt;
*** Specify who will provide the research expertise.&lt;br /&gt;
* Project length: Large (350 hours)&lt;br /&gt;
* Rating: from low to hard&lt;br /&gt;
* Mentors:&lt;br /&gt;
** 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.&lt;br /&gt;
** Possible technical mentors: Vaclav Petras, Anna Petrasova&lt;br /&gt;
** Research mentors: Bring in an expert from your field, e.g., your academic advisor or project principal investigator (if needed).&lt;br /&gt;
* Proposed by: Vaclav Petras&lt;br /&gt;
* Expected outcome: Working feature which is integrated and merged at the end of the project.&lt;br /&gt;
* Test and training tasks:&lt;br /&gt;
** Create a test in Python for an existing tool in the grass-addons repository or in the core grass repository.&lt;br /&gt;
&lt;br /&gt;
=== Title of idea ===&lt;br /&gt;
&lt;br /&gt;
Description here&lt;br /&gt;
&lt;br /&gt;
* Requirements:&lt;br /&gt;
* Project length: (175 or 350 hours) &lt;br /&gt;
* Mentor: &lt;br /&gt;
* Proposed by: &lt;br /&gt;
* Rating: &lt;br /&gt;
* Expected Outcomes:  &lt;br /&gt;
* Test of skills: &lt;br /&gt;
* Other:&lt;br /&gt;
&lt;br /&gt;
== Tips for students ==&lt;br /&gt;
* Follow official [https://github.com/numfocus/gsoc/blob/master/CONTRIBUTING-contributors.md NumFOCUS guidelines].&lt;br /&gt;
* Include &amp;quot;GRASS&amp;quot; in the title of our idea to easily distinguish ideas and projects inside NumFOCUS.&lt;br /&gt;
* If you have your own ideas we encourage you to propose them. Explain them on the [https://discourse.osgeo.org/c/grass/developer/61 on our Discourse].&lt;br /&gt;
* Follow some good practices in your ideas and proposals:&lt;br /&gt;
** Stress why the project would be useful.&lt;br /&gt;
** 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.&lt;br /&gt;
** Be specific in the implementation (or at least as specific as you can).&lt;br /&gt;
** Explain what the final product will look like and how it will work. You can add drawings or mock-ups.&lt;br /&gt;
** Explain how the idea relates to existing GRASS functions, features, and needs.&lt;br /&gt;
** Do not include steps such as &amp;quot;install GRASS&amp;quot;, &amp;quot;compile GRASS libraries (on my machine)&amp;quot;, &amp;quot;read about the API&amp;quot;. You should do this before applying to GSoC.&lt;br /&gt;
* Compile GRASS from source and prepare environment for development:&lt;br /&gt;
** Read [https://github.com/OSGeo/grass/blob/main/CONTRIBUTING.md CONTRIBUTING file].&lt;br /&gt;
* Prove your worth by being active on the [https://discourse.osgeo.org/c/grass/developer/61 GRASS Discourse] or other channels ([https://github.com/OSGeo/grass/discussions GitHub Discussions], fix some [https://github.com/OSGeo/grass/issues 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. &lt;br /&gt;
* Also note that fixing existing bugs and/or implementing enhancements will be a part of student evaluation.&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Saket0187</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GSoC_2026_Add_Spatio-Temporal_dataset_support_to_datacatalog_in_GUI&amp;diff=28865</id>
		<title>GSoC 2026 Add Spatio-Temporal dataset support to datacatalog in GUI</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GSoC_2026_Add_Spatio-Temporal_dataset_support_to_datacatalog_in_GUI&amp;diff=28865"/>
		<updated>2026-05-06T16:08:29Z</updated>

		<summary type="html">&lt;p&gt;Saket0187: Created page with &amp;quot;{| class=&amp;quot;wikitable&amp;quot; | '''Student Name''' || Saket Kumar Mall |- | '''Organization''' || [https://numfocus.org/ NumFOCUS] |- | '''Mentors Name''' || Anna Petrasova, Stefan Blumentrath |- | '''GitHub Fork''' || [https://github.com/saket0187/grass View Repo] |- | '''LinkedIn Profile''' || [https://www.linkedin.com/in/saket-kumar-mall/ View LinkedIn] |}  = Abstract = Currently, the GRASS Data Catalog only queries standard spatial maps and bypasses the temporal database and...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Saket Kumar Mall&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://numfocus.org/ NumFOCUS]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentors Name''' || Anna Petrasova, Stefan Blumentrath&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/saket0187/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''LinkedIn Profile''' || [https://www.linkedin.com/in/saket-kumar-mall/ View LinkedIn]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, the GRASS Data Catalog only queries standard spatial maps and bypasses the temporal database and STDS's entirely. As a result, Space Time Datasets are completely invisible in the catalog interface, forcing users to manage them exclusively via the command line.&lt;br /&gt;
&lt;br /&gt;
This project will extend the existing Data Catalog architecture to natively support STDS. A solution will be implemented to show STDS alongside the standard spatial maps, fetching and displaying STRDS, STVDS, and STR3DS objects inside their respective mapset trees. Additionally, the project will enhance Data Catalog functionalities, such as context menus and other operations, to fully recognize, search, and interact with STDS objects in the GRASS GUI. Beyond these GUI integrations, the project will also focus on resolving critical bugs and enhancing the functionality of core temporal tools to improve the overall user workflow.&lt;br /&gt;
&lt;br /&gt;
= Proposed Solution =&lt;br /&gt;
This project will:&lt;br /&gt;
&lt;br /&gt;
# Show STRDS, STVDS, STR3DS as expandable nodes under each mapset in GUI.&lt;br /&gt;
# Nest registered maps inside their STDS.&lt;br /&gt;
# Add full context menus (rename, delete, etc.) functionalities.&lt;br /&gt;
# Add search toggle for STDS maps giving user choice to include/exclude those maps in search results.&lt;br /&gt;
# Apply Lazy loading for large datasets.&lt;br /&gt;
&lt;br /&gt;
Plus few key enhancements in temporal tools like:&lt;br /&gt;
# Adding JSON output for some tools like t.info.&lt;br /&gt;
# Modify core temporal modules (t.rast.algebra, t.rast.aggregate, etc.) to allow appending data to existing STDS.&lt;br /&gt;
# Resolve critical bugs hindering the temporal user experience, such as t.rast.import failing when trying to create a new project and import a STRDS into it.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline !! Tasks !! Status &lt;br /&gt;
|-&lt;br /&gt;
| '''Community Bonding Period''' &lt;br /&gt;
|| &lt;br /&gt;
May 1 - May 24, 2026&lt;br /&gt;
|| &lt;br /&gt;
# Set up a robust local environment with various mapsets, temporal databases, and registered/unregistered time series maps (raster, vector, 3D raster)&lt;br /&gt;
# Discuss and finalize GUI decisions with mentors (node structure, icon selection, context menu wording, expected tree behavior)&lt;br /&gt;
# Review Data Catalog files (tree.py, catalog.py, g.gui.datacatalog.py) to map out integration points&lt;br /&gt;
# Finalize the scope and priority of temporal tasks for Phase 2&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| '''Coding Period Phase 1: Core GUI Architecture, STRDS, and STVDS Integration''' &lt;br /&gt;
|| &lt;br /&gt;
May 25 - July 5, 2026&lt;br /&gt;
|| &lt;br /&gt;
# '''STDS Infrastructure''' - Add a top-level &amp;quot;Space Time Datasets&amp;quot; group under each mapset; establish core logic to query the temporal database&lt;br /&gt;
# '''Map Filtering &amp;amp; Nesting''' - Nest registered maps under their STDS node; unregistered maps reappear as standalone&lt;br /&gt;
# '''Context Menus &amp;amp; Interactivity''' - Metadata, Copy, Move, Rename, Delete with mapset-specific constraints&lt;br /&gt;
# '''Raster and Vector Implementation''' - Fully implement and test STRDS and STVDS support&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Midterm Evaluation''' &lt;br /&gt;
|| &lt;br /&gt;
July 6 - July 10, 2026&lt;br /&gt;
|| &lt;br /&gt;
# '''Milestone:''' STRDS and STVDS fully visible, expandable, and interactive in the Data Catalog&lt;br /&gt;
# Address mentor and reviewer feedback on Phase 1 pull requests&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| '''Coding Period Phase 2: STR3DS, Search Integration, and Temporal Tool Enhancements''' &lt;br /&gt;
|| &lt;br /&gt;
July 11 - August 24, 2026&lt;br /&gt;
|| &lt;br /&gt;
# '''STR3DS Support''' - Apply Phase 1 logic to Space Time 3D Raster Datasets&lt;br /&gt;
# '''Search Integration''' - UI toggle to include/exclude nested STDS maps in search results&lt;br /&gt;
# '''JSON Output Support''' - Implement JSON output for t.info&lt;br /&gt;
# '''Appending to existing STDS''' - Modify t.rast.algebra, t.rast.aggregate, etc.&lt;br /&gt;
# '''Temporal Workflow Fixes''' - Fix some minor issues; implement lazy loading&lt;br /&gt;
# '''Finalization''' - Edge cases, code cleanup, test coverage, documentation, submit final GSoC report&lt;br /&gt;
|| &lt;br /&gt;
|}&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;/div&gt;</summary>
		<author><name>Saket0187</name></author>
	</entry>
</feed>