GRASS GIS 8.0.0
Overview of changes
After more than 3 year of development the first stable release GRASS GIS 8.0.0 is available. Efforts have concentrated on making the user experience even better, providing many new useful additional functionalities to modules and further improving the graphical user interface.
Breaking news: new graphical user interface with entirely rewritten startup sequence!
New first time user startup and dark theme support
This re-establishes user experience compatibility with QGIS and other connected software packages.
The GRASS GIS 8.0.0 release provides more than 1,400 fixes and improvements with respect to the release 7.8.6.
With the introduction of the semantic label raster metadata class, the temporal database was modified to version 3. Hence, to be able to read and process GRASS 7.x space-time datasets, users will be prompted to run t.upgrade
. If users want to read newly created space-time datasets back in GRASS 7.x, they can run t.downgrade
.
Launching the software
The user experience of the graphical user interface has been completely rewritten: no more clumsy selection screens - just enter the menu system directly!
And on command line, GRASS GIS now starts versionless, i.e. as grass
.
Downloads
New modules
- g.download.location: moved to core, create grass.utils lib by @wenzeslaus in #1715
- i.band.library - Prints available semantic label information used for multispectral data.
- r.in.pdal: a PDAL based replacement of r.in.lidar by @marisn in #1200
- r.object.geometry: move from addons by @petrasovaa in #1918
- r.semantic.label - Manages semantic label information assigned to a single raster map or to a list of raster maps
- t.upgrade: added from addons by @neteler in #1438) and by @landam #1468
Major module changes
- db.in.ogr: Add gdal_config= and gdal_doo= by @HuidaeCho in #1425
- g.extension: #3902 multiple metadata entries by @anikaweinmann in #138
- g.extension: add branch option by @ninsbl in #1130
- g.extension: add '-j' flag which generates JSON file containing the download URLs of the official Addons by @tmszi in #1009
- g.extension: allow to install extensions from a fork of the official repo by @ninsbl in #1177
- g.extension: change to python3 by @anikaweinmann in #83
- g.extension: check if svn program is installed by @neteler in #1145
- g.extension: distinguish between extensions and modules by @metzm in #582
- g.extension: dont expand db modul class by @ninsbl in #424
- g.extension: Fix installation from gitlab repositories by @tmszi in #683
- g.extension: fix 'rate limit exceeded' http error during request json file (add-ons paths) from the official add-ons github server url by @tmszi in #1106
- g.extension: get branch from version by @ninsbl in #1700
- g.extension: improve way how to parse module name from makefile by @tmszi in #1142
- g.extension: match module files on Windows by @ninsbl in #1565
- g.extension: only warn when non-essential files are missing by @wenzeslaus in #164
- g.extension: remove branch from Windows-function by @ninsbl in #1151
- g.extension: workaround to use grass7 addon repo by @neteler in #1612
- g.extension -i (compile), -d (download) flag by @tmszi in #496
- g.extension -l ValueError by @landam in #1849
- g.extension: fix link generation in multi-addon man page for addons by @tmszi in #2097
- g.extension: remove build_platform (only 64bit provided on MS Windows) by @landam in #2102
- g.extension test added by @petrasovaa in #1364
- g.parser: Add G_OPT_M_NPROCS by @HuidaeCho in #1652
- i.ortho.photo: Add optional correction for panorama cameras by @metzm in #401
- i.tasscap: support for Worldview-2 added by @neteler in #186
- r.colors: add offset and scale by @metzm in #954
- r.external: add flag to read min/max from metadata by @metzm in #1856
- r.external: read "nan" as nan by @metzm in #338
- r.external: transfer_colormap added by @landam in #337
- r.external: major speed-up by @metzm in #1305
- r.geomorphon: add two more comparison modes by @infrastation in #1096
- r.geomorphon: fix an out-of-bounds read w/multires by @infrastation in #995
- r.geomorphon: fix landform category names by @infrastation in #1421
- r.geomorphon: fix shape calculations by @infrastation in #1040
- r.geomorphon: implement a new "one-off" mode by @infrastation in #1157
- r.geomorphon: remove multires-specific code by @infrastation in #1570
- r.geomorphon: separate input from output by @infrastation in #1052
- r.grow.distance: add minimum and maximum distance options by @metzm in #1453
- r.in.wms: gdal user:password support by @anikaweinmann in #196
- r.in.wms: enable CreateOptions for GDAL driver by @neteler in #1558
- r.neighbors: add option for exponential weighting by @ninsbl in #597
- r.neighbors: add testsuite by @ninsbl in #729
- r.random: Add -s flag, remove -i flag, redo interface by @wenzeslaus in #1054
- r.univar: support large regions with more than 2 billion cells for extended stats by @metzm in #672
- r.viewshed: limit viewshed horizontally by specifying two angles by @petrasovaa in #180
- v.db.select: Add JSON output and add -e flag (escape newlines and backslashes) by @HuidaeCho in #476
- v.db.select: Handle all formats through format option, add CSV by @wenzeslaus in #1121
- v.distance: Linear matrix becomes default, new -s flag for square matrix [API change] by @mlennert in #601
- v.neighbors: add aggegate statistics on attribute column [NEW FUNCTIONALITY] by @mlennert in #534
- v.in.wfs: add options to set user and password by @anikaweinmann in #808
- v.report: Add separator= option by @HuidaeCho in #1412
- t.remove: new implementation of flags by @lucadelu in #1695
- TGIS DB v3 backward compatible with v2 #1454
Minor module changes
- db.describe: Remove unused tdesc by @HuidaeCho in #1426
- db.in.ogr: single quotes to double quotes by @HuidaeCho in #1430
- db.univar: Ignore rows with NULLs with -e by @wenzeslaus in #1341
- db.univar: numerical instability can lead to bug in calculations of stdev, etc by @mlennert in #101
- d.mon: fix get list of running monitors by @tmszi in #1902
- d.legend: Fix position of units and background by @wenzeslaus in #1075
- d.mon: Do not clear an existing output file on fatal error by @HuidaeCho in #1452
- d.polar: fix launch module (py3) and write output EPS file by @tmszi in #1107
- d.polar: test added by @neteler in #1108
- d.rast.arrow: Fix negative drainage directions by @HuidaeCho in #777
- d.rast.edit: fix launch wxGUI (py3/wxPy4) by @tmszi in #1085
- m.proj: replace checks in code by parser rules by @wenzeslaus in #106
- g.copy: Report failed copy using an error message by @wenzeslaus in #1086
- g.extension: disable checking multi-addon addons metadata by @tmszi #2090
- g.extension: fix make command on FreeBSD by @lbartoletti #2075
- g.extension.all: fix reinstall multi-addons by @tmszi #2082
- g.filename: Create dir in mapset only when asked by @wenzeslaus in #1687
- g.gui.iclass: replace removed dist_point_to_segment() by @nilason in #645
- g.gui.image2target: Fix wxPython Phoenix support by @nilason in #396
- g.gui.psmap: fixes for Python3 by @petrasovaa in #133
- g.gui.vdigit Snap selected lines/boundaries tool: Fix checking SnapLine function return value by @tmszi in #506
- g.proj: fix reading input WKT by @metzm in #1582
- g.proj: fix segfault when reading proj info from georef file by @petrasovaa in #599
- g.region: Add more detail into error messages by @wenzeslaus in #1140
- g.region: do not update WIND file when not needed by @petrasovaa in #1627
- g.rename: avoid buffer overflow by @metzm in #1899
- g.search.modules: without keywords, list all modules by @metzm in #989
- g.version: Fix February print by @HuidaeCho in #366
- i.group: fit long names to fancy file listing by @nilason in #1818
- i.pansharpen: Fix encode string by @tmszi in #745
- i.pansharpen: grass.decode stdout by @ninsbl in #416
- i.vi: fix PVI formula #1985
- i.vi: fix check input 'red' param arg by @tmszi in #1353
- i.vi: fix the check for the existence of the 'redchan' variable by @tmszi in #1378
- i.vi: red band not required and GUI section modified by @YannChemin in #179
- i.vi: write out FCELL instead of DCELL by @neteler in #236
- i.zc: avoid integer overflow by @metzm in #142
- r.blend: Quote map names in r.mapcalc expressions. by @marisn in #277
- r.clump: fix clumping of FCELL/DCELL maps with threshold=0 by @mmetz #1792
- r.compress: Reversing logic to fix Failure Reporting by @Lucifergene in #1812
- r.contour: fix an error message text by @infrastation in #1014
- r.fillnulls to run in python 3 by @mwort in #85
- r.grow: correctly handle shrinking of maps without NULL values by @marisn in #343
- r.grow.distance: update module description with value raster by @griembauer in #983
- r.import and v.import: Use PID and node for tmp location by @wenzeslaus in #653
- r.import: do not reproject when projection matches (bug #547) by @petrasovaa in #659
- r.import extent=region bug fix by @anikaweinmann in #404
- r.import: fix calling r.import when use_temp_region is used by @petrasovaa in #676
- r.import: pass extent to r.in.gdal by @mmacata in #291
- r.import: use temp region for resolution=value by @wenzeslaus in #197
- r.in.wms: replace broken URLs with alternative WMS by @neteler in #1635
- r.in.wms: restore NASA GIBS by @agiudiceandrea in #1756
- r.in.wms BaseCapabilitiesTree: Fix init ElementTree class by @tmszi in #651
- r.in.wms: Fix Access window out of range in RasterIO() error (raster tile size) by @tmszi in #693
- r.in.wms: message update by @jidanni in #613
- r.in.wms: write string not bytes to capabilities file by @ninsbl in #195
- r.kappa: better user msg; fix var by @neteler in #341
- r.kappa: fix omission typo by @neteler in #433
- r.kappa: maps[0] is the reference and maps[1] is the classified map by @mlennert in #290
- r.mapcalc.simple: screenshot added by @neteler in #188
- r.out.gdal / v.out.ogr: fix xy export by @metzm in #1564
- r.pack/r.unpack: fix pack and unpack VRT raster map with tiled raster maps by @tmszi in #1074
- r.pack/r.unpack: fix packing/unpacking vrt map if some of tiled rasters doesn't have color table by @tmszi in #1116
- r.random.cells: treat distance as minimum distance by @mmetz #1797
- r.region: Vect_get_map_box() requires level 2 by @HuidaeCho in #1404
- r.report: add default units, change to full unit names by @petrasovaa in #1666
- r.resamp*, v.surf.rst: more resampling keywords added by @neteler in #141
- r.sim: dynamic allocation of walkers by @petrasovaa in #228
- r.sim / simlib: use nstack only when walkers output needed by @petrasovaa in #332
- r.sim.sediment: fix segfault, memory freeing was in wrong place by @petrasovaa in #1094
- r.sim.water: NC SPM example and other modernizations by @wenzeslaus in #171
- r.slope.aspect: fix -e flag to calculate values at edges by @metzm in #166
- r.slope.aspect: Fix directions in comments by @HuidaeCho in #110
- r.slope.aspect: fix title and color table for -n flag by @petrasovaa in #320
- r.stats.zonal and v.vect.stats: Improve documentation and interface by @wenzeslaus in #1114
- r.sun: allow user to set solar constant by @petrasovaa in #482
- r.sun: fix copy paste error when using both lat and lon raster by @petrasovaa in #92
- r.sun: Fix parallel computation by @aaronsms in #1514
- r.terraflow: remove print "Free Memory" to stats file by @nilason in #1306
- r.topidx: fix bug with steep slopes by @petrasovaa in #193
- r.topidx: Rewrite Perl scripts in Python 3 by @HuidaeCho in #766
- r.to.vect: break line when value changes by @byronbest in #113
- r.unpack: sys.stdout.write() cannot print bytes; convert f.read() to str by @HuidaeCho in #577
- r.watershed: Update the drainage figure by @HuidaeCho in #603
- r3.out.vtk: replace 'void *' with 'RASTER3D_Map *' for clarity by @nilason in #1291
- v.category: message fix by @jidanni in #618
- v.colors: Fix color inversion by @HuidaeCho in #1478
- v.colors: Implement rules from stdin by @HuidaeCho in #1389
- v.colors: raster= with use=attr by @HuidaeCho in #1393
- v.db.addtable: Overwrite newly created cat column (Fix #567) by @HuidaeCho in #571
- v.db.droprow: remove randomness from testsuite to fix failing tests by @petrasovaa in #1824
- v.db.droptable: check if map exists by @wenzeslaus in #107
- v.db.join: Use case insensitive comparison for columns by @wenzeslaus in #1409
- v.db.select: Run grass_indent.sh on the source by @wenzeslaus in #1138
- v.db.update: Use case insensitive comparison for columns by @wenzeslaus in #1413
- v.decimate: copy tables only when topology is available by @metzm in #331
- v.digit: fix testing empty input by @petrasovaa in #469
- v.distance: relax parser rules by @ninsbl in #2132
- v.edit: Add credits for extend tools by @HuidaeCho in #446
- v.generalize: remove_small is no longer available by @HuidaeCho in #473
- v.hull: use standard C boolean type by @nilason in #1567
- v.import: Add layer to the projection check by @wenzeslaus in #1328
- v.import: Do not reproject if projections match by @marisn in #845
- v.import: fix gfs file for GDAL version smaller 2.4.1 by GML import by @anikaweinmann in #386
- v.in.ascii: include values into the message by @wenzeslaus in #104
- v.in.ascii: user likely expectes number of rows used by @wenzeslaus in #108
- v.info: fix printing UTM zone (#892) by @metzm in #977
- v.in.ogr: fix usage of OGR_G_HasCurveGeometry() by @metzm in #267
- v.in.pdal: cast enum value to int by @nilason in #1819
- v.in.pdal: fix filtering by bbox by @petrasovaa in #359
- v.in.pdal: remove obsolete PCL functionality by @marisn in #1907
- v.kernel: add output raster history by @petrasovaa in #111
- v.kernel: fix inconsistent msg by @neteler in #825
- v.net: fix for Python 3 by @petrasovaa in #279
- v.net.visibility: fix coordinates parameter by @agiudiceandrea in #1336
- v.out.ogr: export datetime attributes as datetime by @metzm in #184
- v.out.ogr: Remove a garbage character from warning by @HuidaeCho in #1886
- v.patch: add details into error messages by @wenzeslaus in #103
- v.patch: Fix line categories when building topology by @HuidaeCho in #374
- v.patch: fix segmentation fault when DB table absent in one input map by @metzm in #1492
- v.patch: match map to column (fixes 6616daa) by @wenzeslaus in #109
- v.perturb: Require either explicit seed or generated seed by @wenzeslaus in #1661
- v.random: finished test in reference to #704 by @SunveerSingh in #1464
- v.random: Fix segfault as per bug #1024 by @marisn in #1025
- v.rast.stats: fix NULL values for very small areas address by @ninsbl in #402
- v.rast.stats: raise a warning when no categories found in raster map by @pesekon2 in #1258
- v.report: Fix newline issue by @HuidaeCho in #477
- v.surf.bspline: fix method selection by @neteler in #727
- v.surf.idw: fix using potentially uninitialized ret value causing bogus warning by @petrasovaa in #1541
- v.surf.idw: indent with indent script by @petrasovaa in #1540
- v.surf.idw: less confusing error message by @neteler in #1332
- v.to.db: Add --overwrite to help and GUI by @HuidaeCho in #807
- v.to.db history support files by @HuidaeCho in #486
- v.to.db: Require --overwrite flag to overwrite existing columns by @HuidaeCho in #487
- v.to.db: Write history by @HuidaeCho in #481
- v.to.rast ignore null entries of attribute values for use=attr by @metzm in #173
- v.to.rast: fix where selection by @metzm in #259
- v.to.rast: Print the correct option name by @HuidaeCho in #1351
- v.unpack: sys.stdout.write() cannot print bytes; convert f.read() to str by @HuidaeCho in #577
- v.vect.stats: Add current mapset in msg, fixes for doc by @wenzeslaus in #1137
- v.what: Fix script outputs for -d (space after = or : instead of =) by @HuidaeCho in #1584
- v.what.rast: fix writing of map history by @HuidaeCho in #584
- v.what.rast: no features message wording, switched to be a warning by @landam in #1323
- t.info: add list of band names by @metzm in #1862) and #285
- t.info: clarify 'dataset not found' error message by @landam in #1473
- t.list, t.rast.list: fix missing band_reference by @neteler in #206
- t.rast.export: use CWD as crossplatform default directory by @ninsbl in #1817
- t.register: strip newline from list of maps to avoid error by @petrasovaa in #1295
- t.vect.algebra: modified html doc by @nobeeakon in #1089
- t.vect.export: GPKG support added by @neteler in #129
GUI: Improvements in the Graphical User Interface
New first time user startup and dark theme support
- NEW: entire rewrite of GRASS GIS startup
- Add new splash screen as decided in #1716 by @veroandreo in #1803
- Added global dataset to download location in startup by @baharmon in #544
- Check for gislock and other issues when deleting/renaming/editing mapset and location in catalog by @lindakladivova in #904
- fix 3D rendering in animation tool by @petrasovaa in #293
- fix #411: closing Map Display and layer tree from different places by @petrasovaa in #427
- Fix set up sampling and analysis framework wizard relative import by @tmszi in #409
- Fix show layer inside the layer subgroup by @tmszi in #400
- fix the renaming of wx.Event variables by @pesekon2 in #128
- Fix use wxGUI Raster Digitizer input raster map layer temporary region by @tmszi in #470
- Make Data tab the default in GUI by @lindakladivova in #756
- MapSwipe window has wrong title by @lindakladivova in #1692
- Misleading lock symbol icon in the in the Data tab toolbar by @lindakladivova in #870
- Reflect grassdb changes in catalog by @petrasovaa in #994
- Remove colouring of standard buttons by @nilason in #744
- Start in a demo/startup location by @lindakladivova in #868
- Store list of databases in settings by @lindakladivova in #858
- Switch to another mapset when in use (aka force remove lock) by @lindakladivova in #906
- Update Location Wizard: First page by @lindakladivova in #493
- g.gui.timeline: fix annotation box by @petrasovaa in #2107
- wxGUI about: add link to github by @landam in #131
- wxGUI/About: remove hardcoded white background for dark mode by @petrasovaa in #1215
- wxGUI: add dark mode support for command output by @nilason in #759
- wxGUI: add dark mode support for vector attribute data table by @nilason in #793
- wxGUI: added install notranslation function by @marisn in #156
- wxGUI: add env parameter in gcmd.py RunCommand by @petrasovaa in #1113
- wxGUI: add missing giface, fixes error when emitting grassdbChanged signal by @petrasovaa in #1139
- wxGUI: Add missing import from grass.app by @wenzeslaus in #1358
- wxGUI: Add missing title params to frames by @wenzeslaus in #1301
- wxGUI: Add new icons to data catalog for actions avaliable in context menu by @lindakladivova in #811
- wxGUI: Add new icons to datacatalog for actions avaliable in context menu (continue) by @lindakladivova in #830
- wxGUI: Add new location action to database node in Data tab by @lindakladivova in #790
- wxGUI: Add new mapset action to data catalog by @lindakladivova in #731
- wxGUI: address digitizer background map issue #467) by @petrasovaa in #494
- wxGUI: address flake8 undefined variable by @petrasovaa in #1325
- wxGUI Add web service layer: Fix dialog layout by @tmszi in #627
- wxGUI AddWSDialog: Fix render WMTS layer with OGC:CRS84 coor system by @tmszi in #674
- wxGUI AddWSDialog: Fix setting output layer name, after selecting another layer by @tmszi in #667
- wxGUI AddWSDialog RenderWMSMgr: Fix render WMS jpeg source format by @tmszi in #640
- wxGUI: Allow delete on multiple mapsets in data catalog by @lindakladivova in #795
- wxGUI: always switch when creating new location/mapset by @petrasovaa in #1229
- wxGUI: An action should be required before modifying other mapsets by @lindakladivova in #848
- wxGUI animation: allow to use saved region instead of comp region by @petrasovaa in #656
- wxGUI/animation: fix 3D animation by @petrasovaa in #1551
- wxGUI/animation: fix deprecation warnings by @petrasovaa in #149
- wxGUI/animation: fix https://trac.osgeo.org/grass/ticket/3894 and htt… by @petrasovaa in #116
- wxGUI/animation: fix 'RuntimeError: dictionary changed size during iteration' by @tmszi in #908
- wxGUI/animation: fix validation of extension of exported file by @tmszi in #907
- wxGUI/animation: fix wxPyDeprecationWarning by @tmszi in #854
- wxGUI/animation: fix wxPyDeprecationWarning by @tmszi in #910
- wxGUI/animation: show error and proceed with temporal database mismatch by @petrasovaa in #950
- wxGUI: Ask user about shell only when present by @wenzeslaus in #1219
- wxGUI: avoid flush clipboard if not opened by @nilason in #819
- wxGUI: avoid printing annoying wx debug message on startup by @petrasovaa in #157
- wxGUI/catalog: do not expand mapset after filtering if was filtered out by @petrasovaa in #763
- wxGUI/catalog: refactor frame.py to use DataCatalog panel from catalog.py by @petrasovaa in #1030
- wxgui: catch also TypeError when importing ctypes, see #305 by @landam in #324
- wxGUI: Change default color for rendering vectors (gray->blue) [news] by @wenzeslaus in #1166
- wxGUI: Changes in Layer Manager tabs order and labels by @lindakladivova in #802
- wxGUI/colorrules: fix OnOK when preview is updated after window is de… by @petrasovaa in #443
- wxGUI/composer: use integers instead of wx id to fix pickle error by @petrasovaa in #641
- wxGUI/core: account for .post in wxPython 4.0.7.post2 by @wenzeslaus in #246
- wxgui: Create grassdata automatically on the first GUI startup by @lindakladivova in #705
- wxGUI: create parallel wx.frame for Single Window layout development by @lindakladivova in #1604
- wxGUI: dark theme for Python shell and editor by @petrasovaa in #1220
- wxGUI datacatalog: Adapt tooltip 'Add new grass database' button by @lindakladivova in #936
- wxGUI datacatalog: add direct editing of mapset and location name by @lindakladivova in #920
- wxGUI/datacatalog: add icon for adding grassdb by @petrasovaa in #769
- wxGUI datacatalog: Add multiple GRASS databases by @lindakladivova in #761
- wxGUI/datacatalog: Add rename and delete of Location and Mapset in Datacatalog by @lindakladivova in #771
- wxGUI/datacatalog: Allow delete on multiple locations in data catalog by @lindakladivova in #875
- wxGUI/datacatalog: avoid ValueError when map name corrupted with multiple @ chars by @petrasovaa in #966
- wxGUI/datacatalog: catalog: first load and display tree with locations for responsiveness, then load everything by @petrasovaa in #1043
- wxGUI/datacatalog: change ReloadTreeItems to use node-specific reloads by @petrasovaa in #847
- wxGUI/Data catalog: distinguish label and name of nodes by @lindakladivova in #783
- wxGUI/datacatalog: do not use all available cores for loading by @petrasovaa in #1422
- wxGUI/datacatalog: don't expand the location tree node if the transformation dialog is closed by @tmszi in #823
- wxGUI/datacatalog: enable lazy loading of maps by @petrasovaa in #1434
- wxGUI/datacatalog: fix #1184 by @petrasovaa in #1230
- wxGUI/datacatalog: Fix bad flag in reprojection dialog by @nilason in #806
- wxGUI/datacatalog: fix crashing due to accessing GUI from other thread by @petrasovaa in #1027
- wxGUI/datacatalog: fix display 3D raster by @tmszi in #889
- wxGUI/datacatalog: fix error handling and add busy cursor, refresh as loading dbs by @petrasovaa in #957
- wxGUI/datacatalog: fix incorrect entry invalid (broken) regular expression by @tmszi in #1267
- wxGUI/datacatalog: fix setting output vector/raster format by @tmszi in #1596
- wxGUI/datacatalog: fix switching mapset between different dbs by @petrasovaa in #931
- wxGUI/datacatalog: fix unresponsive gui if too many maps in current mapset watched with watchdog are changing at once by @petrasovaa in #1556
- wxGUI/datacatalog: flatten mapset-layer hierarchy, add icons for types, highlight current by @petrasovaa in #742
- wxGUI datacatalog: merge LocationMapTree and DataCatalogTree by @lindakladivova in #755
- wxGUI/datacatalog: move or copy location/mapset isn't allowed, show warning message dialog by @tmszi in #822
- wxGUI/datacatalog: multiple grass databases context menu shows Delete locations by @lindakladivova in #914
- wxGUI datacatalog: process of creating a new database by @lindakladivova in #937
- wxGUI/datacatalog: remove unnecessary check and warning for dragging mapsets/locations by @petrasovaa in #1303
- wxGUI/datacatalog: show warning message dialog if drag map them to the target location node in the tree by @tmszi in #810
- wxGUI/dbmgr: fix calculate column values by @tmszi in #1370
- wxGUI/dbmgr: fix clik on the 'Modify layer' button if vector map doesn't have any layers by @tmszi in #1334
- wxGUI dbmgr: Fix dbmgr widgets layout on the wxMSW by @tmszi in #637
- wxGUI/dbmgr: fix get statistics for character column type if it contains NULL value by @tmszi in #1574
- wxGUI/dbmgr: fix hit 'Refresh' button if vector map doesn't have any layers by @tmszi in #1371
- wxGUI/dbmgr: fix insert record for each category into table by @tmszi in #1333
- wxGUI/dbmgr: Show proper error when table parsing failed by @wenzeslaus in #1112
- wxGUI d.histogram: Set default font by @tmszi in #695
- wxGUI: displaying infobar focused on first-time user by @lindakladivova in #1078
- wxGUI: displaying infobar focused on first-time user (part 2) by @lindakladivova in #1183
- wxGUI d.mon: Fix launch light-weight wx monitor without toolbars and statusbar by @tmszi in #678
- wxGUI/d.mon: fix rendered image size according actual map display size by @tmszi in #1064
- wxGUI: do not fail on invalid RC file (empty) by @landam in #185
- wxGUI: Do not reload the tree after canceled Delete in data catalog by @lindakladivova in #789
- wxGUI: drop show preferences dialog as modal by @nilason in #1132
- wxGUI: Each layertree has its own display toolbar by @lindakladivova in #1785
- wxGUI: easier switching between locations (GRASS GIS 8) by @lindakladivova in #1598
- wxGUI: Enable all Flake8 warnings by @wenzeslaus in #1535
- wxGUI: Enable import-related warnings by @wenzeslaus in #1523
- wxGUI: Enable lambda, escape, except, l warnings by @wenzeslaus in #1518
- wxGUI: Enable multiple hash warning by @wenzeslaus in #1516
- wxGUI: Enable unused var warning by @wenzeslaus in #1502
- wxGUI: error message has appeared in the console tab/cmd after close any module dialog by @tmszi in #249
- wxGUI: Exit after fatal lock errors by @HuidaeCho in #1428
- wxGUI: Field calculator wx.ListBox widget choices argument by @tmszi in #460
- wxGUI: fix 3D view wxPyDeprecationWarning, from https://trac.osgeo.or… by @petrasovaa in #81
- wxGUI: Fix an error when exporting csv file from g.gui.tplot by @lbartoletti in #690
- wxGUI: fix another wx flag assertion error in DefaultFontDialog by @nilason in #1545
- wxGUI: fix another wx flag assertion error in iclass by @petrasovaa in #1471
- wxGUI: fix atexit error in debug mode by @nilason in #772
- wxGUI: fix bad indentation by @nilason in #784
- wxGUI: fix calling coordselect validator by @petrasovaa in #1455
- wxGUI: fix closing map displays when used with workspaces, consolidat… by @petrasovaa in #512
- wxGUI: fix cmd-c closing interactive colour table on mac by @nilason in #1293
- wxGUI: Fix copy-to-clipboard key binding for console (trac#3008) by @nilason in #393
- wxGUI: fix deleting dict key while iterating overlays by @petrasovaa in #1763
- wxGUI: fix deprecated wx.NewId by @petrasovaa in #152
- wxGUI: fix d.histogram - save only after rendering done by @petrasovaa in #235
- wxGUI: fix d.mon for py3 by @petrasovaa in #122
- wxGUI: fix d.mon rendering #3896, caused by garbage collection of map… by @petrasovaa in #174
- wxGUI: fix d.out.file command parsing with --overwrite by @petrasovaa in #1284
- wxGUI: fix flake F401 (unused import) by @petrasovaa in #1294
- wxGUI: fix for cases when validator is called automatically from wx.Dialog upon closing it with OK by @petrasovaa in #1418
- wxGUI: fix GCP manager for py3 by @petrasovaa in #245
- wxGUI: fix g.gui.vdigit on windows #530 by @petrasovaa in #572
- wxGUI: fix importing data when new location was created by @petrasovaa in #1416
- wxGUI: fix inconsistent layer sizes during rendering by @petrasovaa in #552
- wxGUI: Fix key binding issues on mac by @nilason in #818
- wxGUI: fix layout flag assert in wms dialog by @petrasovaa in #1764
- wxGUI: Fix layout flags in vector field statistics dialog for wx 4.1.0 by @nilason in #821
- wxGUI: fix layout flags needed for wxPython 4.1.0 by @petrasovaa in #570
- wxGUI: fix menustrings generation and adjust flake8 by @petrasovaa in #541
- wxGUI: fix parsing GDAL/OGR formats which contains a colon in a description by @landam in #1226
- wxGUI: fix psmap from last change, remove redundant import by @petrasovaa in #380
- wxGUI: fix query dialog #369 by @petrasovaa in #390
- wxGUI: fix query dialog after recent changes by @petrasovaa in #1266
- wxGUI: fix RunCommand to decode also empty string to return unicode by @petrasovaa in #702
- wxGUI: fix settings when item added to settings but it doesn't exist yet locally by @petrasovaa in #1811
- wxGUI: fix some flake8 issues by @petrasovaa in #538
- wxGUI: fix wizard, https://trac.osgeo.org/grass/ticket/3981 by @petrasovaa in #233
- wxGUI: fix WMS, includes changing widget because listtreectrl didn't … by @petrasovaa in #242
- wxGUI: fix wx flag assertion error in SavedRegion Dialog (#1679) by @nilason in #1680
- wxGUI: fix 'wxPyDeprecationWarning: Call to deprecated item. Use FindItem instead.' by @tmszi in #1344
- wxGUI: fix wxPython 4.1.0 support for "About GRASS GIS" dialog by @nilason in #901
- wxGUI: fix wxPython 4.1 support by @nilason in #1161
- wxGUI/FlatNotebook: fix crash on mac and add support for dark mode using wxPython 4.1 by @nilason in #856
- wxGUI/forms: Add giface to standalone forms and fix history in giface by @wenzeslaus in #971
- wxGUI/forms: fix Python 3.8 integer warning by @petrasovaa in #1302
- wxGUI/gcmd: fix read command stdout by @tmszi in #1228
- wxGUI/gcp: adding the option to overwrite the result map by @tmszi in #912
- wxGUI gcp: Allow choose map display web service layer as target map to display by @tmszi in #654
- wxGUI/gcp: fix checking vector map existence in the group by @tmszi in #680
- wxGUI/gcp: fix launch add vector map to group dialog by @tmszi in #924
- wxGUI gcp: Fix show add vector map to group dialog by @tmszi in #685
- wxGUI gcp GroupDialog: Fix StaticText widget existence check by @tmszi in #647
- wxGUI/gcpmanager: g.gui.gcp: crash when closing; fix #430 by @petrasovaa in #447
- wxGUI/g.extension: fix failure to uninstall addon by @nilason in #1524
- wxGUI g.gui.animation: Fix wx.CheckBox widget deprecation warning by @tmszi in #718
- wxGUI/g.gui.gcp: fix launch g.gui.gcp by @tmszi in #824
- wxGUI/g.gui.iclass: fix copy vector features from vector map by @tmszi in #1020
- wxGUI/g.gui.image2target: fix close window (dissociate the managed window from the AuiManager) by @tmszi in #1038
- wxGUI/g.gui.image2target: fix show Settings dialog by @tmszi in #1037
- wxGUI/g.gui.mapswipe: fix hit Apply button if first and second raster aren't chosen by @tmszi in #1042
- wxGUI/g.gui.mapswipe: Fix wx.CheckListBox widget wxPyDeprecationWarning by @tmszi in #773
- wxGUI/g.gui.psmap: add checking map frame exists if you add labels by @tmszi in #1048
- wxGUI/g.gui.psmap: disable draw graphics tool on the preview page by @tmszi in #1057
- wxGUI/g.gui.psmap: fix add legend error message by @tmszi in #1041
- wxGUI/g.gui.psmap: fix double click on the map frame with vector map by @tmszi in #1055
- wxGUI/g.gui.psmap: fix launch ps.map module dialog from the File menu by @tmszi in #1058
- wxGUI/g.gui.psmap: fix move line object error message by @tmszi in #1031
- wxGUI/g.gui.psmap: fix move point object error message by @tmszi in #1033
- wxGUI/g.gui.psmap: fix preview orientation if page orientation is landscape by @tmszi in #1056
- wxGUI/g.gui.psmap: fix resize line object by @tmszi in #1032
- wxGUI/g.gui.rdigit: raster digitizer as standalone module by @tmszi in #1051
- wxGUI: g.gui.rlisetup config file open mode for write in text mode by @tmszi in #410
- wxGUI g.gui.rlisetup: Fix get rectangle sample units size by @tmszi in #633
- wxGUI: g.gui.vdigit update available vector maps after the frame is show by @tmszi in #465
- wxGUI/gmodeler: make python script in gmodeler using items instead of iteritems by @pesekon2 in #340
- wxGUI: Graphical Modeler About Dialog import by @tmszi in #438
- wxGUI: Graphical Modeler decode string by @tmszi in #441
- wxGUI: Graphical Modeler wx widget deprecation warning by @tmszi in #442
- wxGUI/gselect: fix select widget for wxGUI 'd.vect' module by @tmszi in #1195
- wxGUI/gui_core: enable/disable toolbar long help if toolbar exists by @tmszi in #1922
- wxGUI/gui_core: fix preferences dialog rendered height on wxPython 4.1.1 by @tmszi in #1825
- wxGUI/gui_core: fix right mouse click on the root tree node to invoke menu by @tmszi in #2119
- wxGUI/gui_core: fix 'Set image size' dialog rendered size on wxPython 4.1.1 by @tmszi in #1890
- wxGUI/gui_core: fix trigger 'wx.EVT_CHOICE' event if you set widget selection programatically by @tmszi in #1580
- wxGUI: Histogramming Tool Plot xSpec, ySpec property value by @tmszi in #422
- wxGUI: Histogramming Tool save text settings (font family/style/weight) into the file by @tmszi in #421
- wxGUI history: Use .wxgui_history as history file for the gui (#962) by @susi in #1917
- wxGUI iclass + iscatt: fixes for Python3 by @petrasovaa in #316
- wxGUI/import: check all layers by default by @petrasovaa in #1018
- wxGUI ImportDialog: Improve output map name existence validation by @tmszi in #675
- wxGUI/import_export: fix output map overwriting if global overwrite setting is allowed by @tmszi in #1029
- wxGUI/import_export: fix validation input map name (overwrite flag) by @tmszi in #1209
- wxGUI: Import vector/raster dialog min width by @tmszi in #492
- wxGUI: IndexError after right click on 'GRASS Locations in...' in the Data tab by @lindakladivova in #736
- wxGUI/infobar: attempt to fix #1213 by @petrasovaa in #1214
- wxGUI/infobar: fix infobar creation with wxPython 4.1 by @petrasovaa in #1202
- wxGUI/json: Using JSON for GUI settings by @petrasovaa in #1015
- wxGUI: Layer Manager add layer into the empty layer group by @tmszi in #413
- wxGUI: Layer Manager add vector map layer Set color table interactively menu item by @tmszi in #472
- wxGUI: Layer Manager close the Layers NoteBook Display FlatNotebook page by @tmszi in #411
- wxGUI: lazy loading of C imagery functions in SignatureSelect by @petrasovaa in #2120
- wxGUI/lmgr: add layer menu items for check/uncheck selected layers by @tmszi in #1905
- wxGUI/lmgr: adjusts the position of the layer context option button (if opacity label is appended into layer name) by @tmszi in #1458
- wxGUI/lmgr: fix add group layer during vector map editing by @tmszi in #1109
- wxGUI lmgr: Fix cancel save workspace dialog by @tmszi in #628
- wxGUI/lmgr: fix get layer name by @tmszi in #1066
- wxGUI lmgr: Fix position of bitmap image button overlaid web service map layer name by @tmszi in #669
- wxGUI/lmgr: fix Python Shell 'help()' function and intro text by @tmszi in #1894
- wxGUI lmgr: Fix remove both selected parent/children group layer by @tmszi in #642
- wxGUI/lmgr: fix return 'Layer' class str value if map layer name is None by @tmszi in #820
- wxGUI/lmgr: prevent the scrollbar from scrolling up when a layer item is checked or unchecked (set focus on the layer item) by @tmszi in #1896
- wxGUI location wizard: EPSG page by @lindakladivova in #670
- wxGUI location wizard: First page by @lindakladivova in #646
- wxGUI/location_wizard: fix column sorting of ListCtrl widget by @tmszi in #1117
- Wx gui location wizard map picture removed by @lindakladivova in #657
- wxGUI locdownload: Fix missing flush method by @tmszi in #634
- wxGUI loc wizard: Correct errors according to flake 8 and add some description by @lindakladivova in #728
- wxGUI/locwizard: fix flags for wxPython 4.1 by @petrasovaa in #1330
- wxGUI/locwizard: fix more flags for wxPython 4.1 by @nilason in #1343
- wxGUI loc wizard: fix title layout, bug introduced in changes for wx 4.1 by @petrasovaa in #661
- wxGUI loc wizard: Improve new location's CRS method selection page by @lindakladivova in #721
- wxGUI/locwizard: remove redundant message by @petrasovaa in #1016
- wxGUI/LocWiz: remove unneeded +ellps proj4string tag by @nilason in #1550
- wxGUI: Make Display related toolbars part of Display tab by @lindakladivova in #1321
- wxGUI: Manage color rules interactively (vector map) frame by @tmszi in #429
- wxGUI: Manage color rules interactively (vector map) number of LoadTable method calls by @tmszi in #444
- wxGUI: Manage color rules interactively (vector map) wx.CollapsiblePane widget layout by @tmszi in #449
- wxGUI/mapdisp: Always respect user-set background color in Map Display by @wenzeslaus in #1167
- wxGUI/mapdisp: fix double click on the overlays in the 3D view by @tmszi in #872
- wxGUI/mapdisp: fix launch light-weight wx monitor without toolbars and statusbar by @tmszi in #1903
- wxGUI/mapdisplay: register context menu items, addresses #1691 by @petrasovaa in #1704
- wxGUI/mapdisp: Overlay properties in context menu by @wenzeslaus in #1077
- wxGUI/mapswipe: call dialog Uninit only when dialog was actually created by @petrasovaa in #836
- wxGUI/mapswipe: fix saving image to file by @petrasovaa in #1725
- wxGUI/MapSwipe: Show comp. extent option in statusbar does not work #1714 by @lindakladivova in #1717
- wxGUI/mapwin: add map overlays 'at' parameter arg validation by @tmszi in #1069
- wxGUI/mapwin: check if 'BufferedMapWindow' instance exist before calling '_runUpdateMap()' method by @tmszi in #1456
- wxGUI/mapwin: fix correct horizontal raster legend position after apply new legend setting by @tmszi in #1080
- wxGUI mapwin: Fix Pointer tool double left click on a map canvas by @tmszi in #529
- wxGUI/mapwin: fix saving the position of overlays after changing their position with the mouse pointer tool by @tmszi in #817
- wxGUI mapwin: Fix show/hide vdigit toolbar by @tmszi in #578
- wxGUI/mapwin: fix showing overlays module properties dialog from the map display context menu by @tmszi in #1079
- wxGUI Module dialog: Fix enable scrolling for the Basic top module style (fix bug introduced in the issue #480) by @tmszi in #503
- wxGUI: module search GUI improved by @petrasovaa in #1194
- wxGUI: more suitable color for infobar on Windows by @lindakladivova in #1504
- wxGUI: multiple Python 3.10 fixes #2050
- wxGUI: new design for GNotebooks by @lindakladivova in #1801
- wxGUI: NewDisplay button moved to LMToolsToolbar by @lindakladivova in #1783
- wxGUI: NewIdRef was added only in wxPython 4.0.3. Fix import for <4.0.3 by @marisn in #155
- wxGUI: New management icons for vector and raster data import by @lindakladivova in #1204
- wxGUI: New, simplified, unified window titles by @wenzeslaus in #1216
- wxGUI/nviz: fix failed map centring on mac with pre-wx4.1 by @nilason in #895
- wxGUI/nviz: fix relative import from 'wxnviz' module by @tmszi in #887
- wxGUI/nviz: fix reopening 3D by reloading layers by @petrasovaa in #953
- wxGUI/nviz: fix update list of surface in vector page during delete constant surface by @tmszi in #881
- wxGUI/nviz: SetMaskColour causes problems on macos with wx 4.1.0 by @petrasovaa in #787
- wxGUI: one row for lmgr toolbar after adding 3D view tab by @lindakladivova in #1485
- wxGUI preferences: Fix load epsg codes by @tmszi in #545
- wxGUI/prompt: support dark themes by @petrasovaa in #1217
- wxGUI/prompt: update autocomplete map list when there is a change in db by @petrasovaa in #1573
- wxGUI/psmap: fix retrieval of projection information by @tmszi in #1310
- wxGUI/psmap: properly isolate region setting from the rest of GUI by @petrasovaa in #1127
- wxGUI/pyedit: add quit toolbar tool by @tmszi in #1022
- wxGUI/pyedit: add recent files history menu by @tmszi in #1021
- wxGUI/PyShell: check for wxPython version by @nilason in #1160
- wxGUI/rdigit: fix for Python3 by @petrasovaa in #254
- wxGUI rdigit: Fix show save dialog by @tmszi in #594
- wxGUI rdigit: Update list of available raster map layers, when map layers tree changed by @tmszi in #707
- wxGUI: refactor changing mapset through file menu and catalog with signals by @petrasovaa in #919
- wxGUI: refactoring: build display status bar based on wx.StatusBar widget by @lindakladivova in #1646
- wxGUI: refactoring: build GUI tools' status bars based on wx.StatusBar widget by @lindakladivova in #1689
- wxGUI refactoring: New WorkspaceManager class by @lindakladivova in #1437
- wxGUI: Remove calls of unicode function which don't work in Python 3 by @wenzeslaus in #1111
- wxGUI: remove deprecated methods from MapDisplay by @petrasovaa in #1729
- wxGUI: remove legacy initialization of image handlers by @petrasovaa in #153
- wxGUI: Remove python2 specific sys.stderr encoding handling. Fixes #3921 by @marisn in #167
- wxGUI: Remove user mapset from demolocation by @lindakladivova in #1173
- wxGUI: remove Version and copyright from menu as redundant by @petrasovaa in #1264
- wxGUI: rename Modules tab to Tools tab, and Display tab to Layers tab #1927
- wxGUI: replace deprecated wx.Yield by @petrasovaa in #160
- wxGUI: Replace getchildren and getiterator from ElementTree by @wenzeslaus in #1120
- wxGUI: replace obsolete wx.BitmapFromImage by @petrasovaa in #230
- wxGUI/rlisetup: dissociate the managed window from the manager ('wx.aui.AuiManager' instance) before destroy wizard window by @tmszi in #1196
- wxGUI r.li.setup: Show message dialog if removed config file isn't selected from the list by @tmszi in #631
- wxGUI/Save display to file dialog: add wxPython 4.1 support by @nilason in #1175
- wxGUI: SaveToFile() missing 1 required positional argument by @lindakladivova in #1637
- wxGUI/settings: fix updating nested dict when reading settings file by @petrasovaa in #1823
- wxGUI: Set vector output format load profile settings by @tmszi in #451
- wxGUI: Set vector output format wx.Choice widget width by @tmszi in #453
- wxGUI: Show line numbers in the Python editor (pyedit and gmodeler) by @wenzeslaus in #284
- wxGUI: Show the world map in Demolocation immediately after startup by @lindakladivova in #1070
- wxGUI/Single-Window: arrange a startup GUI by @lindakladivova in #1775
- wxGUI/Single-Window: Ensure display tab to be visible when added by @lindakladivova in #1830
- wxGUI: Single-Window GUI: arrangement of basic widgets by @lindakladivova in #1621
- wxGUI: Single-Window GUI: Integrate new map display wx.Panels into a AuiNotebook center pane #1735 by @lindakladivova in #1732
- wxGUI/Single-Window: New change page event for AuiNotebook by @lindakladivova in #1780
- wxGUI: small refactoring of mapframe by @petrasovaa in #1669
- wxGUI/splashscreen: use standard one, try to show it before main app, increase timeout by @petrasovaa in #1718
- wxGUI: Split widget initialization from notebook logic by @lindakladivova in #1591
- wxGUI/startup: fix terminate location download dialog download thread by @tmszi in #832
- wxgui: startup GUI automatic detection of grassdata: make case independent #644 by @lindakladivova in #664
- wxGUI: startup screen removed by @lindakladivova in #1400
- wxGUI/tplot: add option to show simple regression model line by @tmszi in #1207
- wxGUI/tplot: fixes for Matplotlib 3.3+ by @neteler in #1191
- wxGUI/tplot: fix export csv file by @tmszi in #1206
- wxGUI/tplot: fix x, y coordinates validation by @tmszi in #1199
- wxGUI/treemodel: fix removing children of root by @petrasovaa in #775
- wxGUI/treemodel: refactor TreeModel to allow more flexible Node classes. by @petrasovaa in #797
- wxGUI/treemodel: revert weakref as it doesn't work with deepcopy by @petrasovaa in #782
- wxGUI/treemodel: used weakref to fix deleting of nodes by @petrasovaa in #778
- wxGUI: update Slovakia 3D precipitation voxel sample dataset URL by @nilason in #1292
- wxGUI: use basic top module notebook style on all platforms as default by @petrasovaa #2063
- wxGUI: Use correct (widget) with for word wrapping of warnings and errors by @marisn in #490
- wxGUI: use default output font dialog for macOS and wxPython >=4.0.6 by @nilason in #760
- wxGUI: use %d instead of %s for integers by @HuidaeCho in #554
- wxGUI: Use system colours to enable dark mode support by @nilason in #751
- wxGUI/vdigit: fix close settings dialog (if no vector map has been selected) by @tmszi in #1394
- wxGUI/vdigit: fix 'Copy categories/features' editing tool if you select only one feature by @tmszi in #1816
- wxGUI/vdigit: fix double click on the line/boundary after activate 'Edit selected line/boundary' editing tool by @tmszi in #1814
- wxGUI/vdigit: fix double click on the line/boundary after activate 'Move selected vertex' editing tool and then switch to 'Edit selected line/boundary' editing tool by @tmszi in #1815
- wxGUI vdigit: Fix Undo/Redo tool event by @tmszi in #586
- wxGUI vdigit: Fix wx.CheckBox widget deprecation warning by @tmszi in #700
- wxGUI/vdigit: show error message dialog if no vector map is open for editing, after activate 'Z bulk-labeling of 3D lines' tool by @tmszi in #1877
- wxGUI vdigit: Update list of available vector map layers, when map layers tree changed by @tmszi in #708
- wxGUI/vdigit: use 'FloatSpin' widget, which allows you to set the decimal snapping threshold value by @tmszi in #1882
- wxGUI: Vector Network Analysis Tool close dialog by @tmszi in #419
- wxGUI: Vector Network Analysis Tool ComboBox widget deprecation warning by @tmszi in #418
- wxGUI: Vector Network Analysis Tool execute analysis by @tmszi in #440
- wxGUI: Vector Network Analysis Tool FlatNotebook page small grey square artifact by @tmszi in #425
- wxGUI: Vector Network Analysis Tool merge dicts by @tmszi in #417
- wxGUI vnet: Fix ctypes c_char_p arg type (bytes object) by @tmszi in #687
- wxGUI/vnet: fix removing page, wx layout assert error, missing giface by @petrasovaa in #1822
- wxGUI/vselect: fix delete row from selected features list by @tmszi in #1231
- wxGUI/vselect: fix show error message if selected map layer type is raster by @tmszi in #1059
- wxGUI: Workspace save fails with SbManager has no IsShown by @lindakladivova in #1665
- wxGUI WSPropertiesDialog: Fix close dialog by @tmszi in #684
- wxGUI WSPropertiesDialog: Fix render new selected web service map layer in the map canvas by @tmszi in #668
- wxGUI WSPropertiesDialog: Fix select layer if the web service map layer properties dialog is open by @tmszi in #666
- wxGUI WSPropertiesDialog: Fix show web service map layer properties dialog by @tmszi in #665
- wxGUI/wx.Menu.Append: remove text argument by @landam in #335
- wxGUI/wxpyimgview: Fix launch wxpyimgview by @tmszi in #735
- wxGUI/xml: add Raster digitizer tool among GUI tools toolbox items by @tmszi in #2125
- wxGUI/xml: update GUI tools toolbox items by @tmszi in #1050
- wxnviz: fix for HiDPI monitors with scaling set, fix decoding by @petrasovaa in #307
- wxplot: add giface to write log correctly by @petrasovaa in #428
- wxplot: use wxpython plotting instead of our old copy, adjust to use … by @petrasovaa in #229
Python scripting
- New Python subpackage for working with locations and mapsets by @wenzeslaus in #837
- pygrass: Add update parameters method to Module by @wenzeslaus in #1712
- pygrass: call centroid function when buffering areas by @ninsbl in #1655
- pygrass: remove failing test as not useful by @petrasovaa in #1411
- pygrass: Remove usage of bare except by @wenzeslaus in #1544
- fix Iterable import in pygrass/vector by @lrntct in #734
- pythonlib: add env variables to all relevant functions in script lib by @petrasovaa in #677
- pythonlib: allow wkt to be also string in create_location() by @petrasovaa in #723
- pythonlib: Enable ambiguous variable name warning by @wenzeslaus in #1538
- pythonlib: Enable bare except warning by @wenzeslaus in #1549
- pythonlib: Enable escape sequence warning by @wenzeslaus in #1529
- pythonlib: Enable unused var warning by @wenzeslaus in #1509
- pythonlib: fix pygrass Module tests by making it picklable by @petrasovaa in #1407
- pythonlib/grassdb: on Windows we can't simply get file owner by @petrasovaa in #945
- pythonlib/grassdb: replace unix only function for file owner name by @petrasovaa in #896
- pythonlib: Reduce usage of bare except in script by @wenzeslaus in #1543
- pythonlib: Remove star imports by @wenzeslaus in #1546
- pythonlib: return None from run_command() by @wenzeslaus in #165
- pythonlib: safer mechanism for switching dbs in create_location by @petrasovaa in #804
- pythonlib: Use more specific language in CalledModuleError by @wenzeslaus in #1525
- python scripting lib: fix run_command(error='status') not returning 0 by @petrasovaa in #1839
- python/script/raster.py: Fix encode string by @tmszi in #738
Binder
- Binder button by @chaedri in #1628
- Added additional GRASS info to example_notebook by @chaedri in #1686
- Added Binder setup files by @chaedri in #1603
You can try GRASS GIS with Binder online:
Jupyter Notebooks
- Raster Support for Interactive Jupyter maps with folium by @chaedri in #1769
- Interactive vector maps for Jupyter Notebooks by @chaedri in #1710
- grass.jupyter: add property filename to GrassRenderer by @petrasovaa in #1846
- grass.jupyter: more flexible region handling for rendering by @petrasovaa in #1871
- jupyter: Add virtual framebuffer X server dependency by @wenzeslaus in #1827
- jupyter: Fix main notebook URL, note grass.jupyter is a preview by @wenzeslaus in #1828
- jupyter: Non-interactive display by @chaedri in #1668
- jupyter: Render 3D images with m.nviz.image by @wenzeslaus in #1831
- jupyter: Add temporary files for Non-Interactive Display by @chaedri in #1727
- Session initiations functions for Jupyter Notebooks by @chaedri in #1629
User Manuals - Documentation
- Add CONTRIBUTING file with a standard contributor Git how-to by @wenzeslaus in #237
- grass7 manual: document --config parameters by @neteler in #532
- GRASS GIS Quickstart by @lindakladivova in #1577
- Fix link to startup script manual page by @veroandreo in #1875
- full index manual: add missing pages by @neteler in #258
- db.drivers: manual updated by @jidanni in #212
- g.access: manual updated by @jidanni in #209
- g.gisenv: manual updated by @jidanni in #219
- g.manual: manual updated by @jidanni in #207
- grass7: manual updated by @jidanni in #220
- helptext: manual updated by @jidanni in #614
- i.eb.hsebal01: manual updated by @jidanni in #213
- i.evapo.pm: manual updated by @jidanni in #214
- i.smap: manual updated by @jidanni in #215
- imageryintro.html: add section about semantic labels by @neteler in #2091
- r3.out.bin: manual updated by @jidanni in #216
- r.carve manual: fix example for stream vector by @neteler in #968
- r.clump manual: screenshots added by @neteler in #902
- r.cost manual: explain multiple directions by @metzm in #846
- r.horizon manual: explain negative values by @neteler in #754
- r.import manual: explain missing resampling methods by @neteler in #1557
- r.in.gdal: manual updated by @jidanni in #621
- r.mask: manual updated by @ecodiv in #1861
- r.out.gdal manual: added COG example by @neteler in #1554
- r.plane manual: example improved by @neteler in #900
- r.random*/r.surf. * manuals: examples and screenshots added by @neteler in #1542
- r.region: manual updated by @jidanni in #600
- r.series: manual updated by @ecodiv in #1246
- r.stream.extract: Fix typos in the manual by @HuidaeCho in #1352
- r.volume manual: example and screenshot added by @neteler in #903
- variables manual updated by @jidanni in #218
- variables manual updated by @jidanni in #222
- v.category manual updated by @jidanni in #607
- v.db.addtable manual updated by @jidanni in #211
- vectorintro manual updated by @jidanni in #224
- v.edit: Change -t to -b in the manual by @HuidaeCho in #471
- v.edit manual updated by @jidanni in #208
- v.edit manual updated by @jidanni in #223
- v.extrude manual updated by @jidanni in #210
- v.import manual updated by @jidanni in #221
- v.info manual: note on -c flag added by @neteler in #198
- v.in.wfs manual: fix example by @neteler in #809
- v.lrs.label manual updated by @jidanni in #217
- v.to.rast manual: update example to NC dataset by @neteler in #1053
- howto_release converted to MD incl cleanup by @neteler in #96
- gislib/dox: Refine the command line parsing doc. by @infrastation in #1010
- manual: add 'plot' keyword by @neteler in #1087
- manual: comment out SVN Date tag by @neteler in #200
- manual: crosslinks and keywords added by @neteler in #162
- manual: fix wrong input param in examples by @neteler in #199
- manual: improved HTML page headers by @neteler in #946
- manual: PROJ related links update by @neteler in #268
- manual: put module name at first position by @neteler in #248
- manual: revert further pages entry addition by @neteler in #271
- manuals and docs: update broken URLS by @neteler in #1003
- manual typo fix by @hellik in #1268
- mkhtml: enable path setting for footer html pages (topics.html...) on add-on manual page by @tmszi in #1122
- tools/mkhtml: fix src and src commits url in html addon module manual by @tmszi in #987
- tools/mkhtml.py: fix keywords html pages paths if add-on html man page strored on the server by @tmszi in #1165
- tools/mkhtml.py: fix replacing keywords (no keywords) html pages path if add-on html man page stored on the server by @tmszi in #1172
- utils/mkhtml.py: fix get core modules commit from local git repo and remote GitHub API server by @tmszi in #2113
- utils/mkhtml.py: get and set git commit and commit date in addon manual page hby @tmszi in ttps://github.com//pull/2100
Projection support
- PROJ6+ + WKT2 support by @metzm in #118, #183, #1240
- CRS management by @metzm in #976
- datum: add support for D_Rauenberg_1983 by @neteler in #1331
- datum.table: added SIRGAS 1995 by @neteler in #464
- datum.table: add RGFG95 by @neteler in #813
- Update reference from proj.4 or proj4 to proj (g.version) by @kikislater in #54
GDAL support
- GDAL/OGR import: check projection of input data by @metzm in #317
- GDAL/OGR import: report XY location when comparing projections by @metzm in #368
Database support
- postgres driver: Assign 1000 to TEXT field length by @HuidaeCho in #412
Library changes
- configure: upgrade to autoconf 2.69 by @nilason in #1845
- configure: use pkg-config for FreeType 2 by @infrastation in #1719
- ctypes: fix Callable for Python 3.10 by @neteler in #1672
- ctypes: Fix ctypesgencore for Python 3 by @wenzeslaus in #379
- ctypes: move directory out of python/grass by @nilason in #1898
- ctypesgen: Update to upstream ctypesgen version by @nilason in #1651
- Define MIN() and MAX() correctly and exactly once. by @infrastation in #1795
- dbmi_client_start_driver: check if driver name is null or empty by @ninsbl in #2133
- libgis: Allow parsing long GISDBASE paths by @attilaolah in #1376
- libgis: allow to overwrite command history by @ninsbl in #272
- libgis: Allow to use a fixed random seed via SOURCE_DATE_EPOCH by @bmwiedemann in #251
- libgis parser: Add angle brackets to a single option/flag rule by @HuidaeCho in #1399
- libgis parser: Show error for option file by @wenzeslaus in #1433
- libgis parser: Use #-space-% to allow writing PEP8-compliant Python code by @wenzeslaus in #1287
- libgis parser: Add a standard option for nprocs= (G_OPT_M_NPROCS) by @HuidaeCho in #1644
- libgis: add missing return keyword to G__make_mapset_element_misc() by @nilason in #1751
- libgis: add test for invalid value to parser by @metzm in #1459
- libgis: Advancing va_list manually after calling ovprintf() by @HuidaeCho in #725
- libgis: Distinguish dirs and objects in dir creation by @wenzeslaus in #1681
- libgis: More clear comments for aprintf by @HuidaeCho in #726
- libgis parser: an empty string is not an answer by @metzm in #958
- libgis: Use the full string length in strncmp() calls. by @infrastation in #1060
- New color table: percentage of forest cover by @neteler in #894
- lib/init: fix run py script with CRLF line terminators ('grass --exec file_with_CRLF.py') by @tmszi in #860
- lib/init/grass.py: Updated bash history setting from 3000 to unlimite… by @cwhite911 in #1026
- lib/init: set HISTSIZE to empty string for unlimited size by @nilason in #1526
- libproj: added alias for ITRF92 by @neteler in #1460
- libproj: change warning to debug message by @neteler in #1337
- libproj: fix crs modification with PROJ6+ by @metzm in #1007
- libproj: fix for PROJ6+ to get the ll equivalent of a CRS by @metzm in #939
- libproj: fix lookup mechanism for datum grids with all versions of PROJ by @metzm in #252
- libproj: fix results for ll equivalents by @metzm in #1444
- libproj: fix test for PJ_TYPE_BOUND_CRS by @metzm in #1013
- libproj: fix treatment of proj extension in wkt by @metzm in #187
- libpython: Add helper library for benchmarking by @wenzeslaus in #1670
- libpython: Add plot nprocs to benchmark CLI by @wenzeslaus in #1761
- libpython: Avoid race condition when reading region in use_temp_region() by @wenzeslaus in #638
- libpython: explain verbosity levels by @neteler in #998
- libpython: relax requirements for band names by @metzm in #1081
- libpython: Resolve path to mapset in setup.init by @wenzeslaus in #1829
- libpython: Save and load benchmark results by @wenzeslaus in #1711
- libpython/script: fix tests by @petrasovaa in #1381
- libpython: Support non-parallel runs better by @wenzeslaus in #1733
- libraster: add strerror(errno) to write failures by @metzm in #1722
- libraster: Explain missing header file in get_cellhd by @wenzeslaus in #933
- libraster: Band references implementation by @landam in #63
- libraster: change Rast_legal_bandref() return value to bool by @nilason in #1897
- libraster: fix Rast_legal_bandref() by @metzm in #1796
- libraster: raster module memory: set new value globally by @neteler in #922
- libraster / gdal.c: add recent GDAL dlls by @ninsbl in #1874
- Rast_log_colors: Another attempt to address r.colors -g/-a (#1480) by @HuidaeCho in #1937
- Lib: Speed up listing a lot of mapsets by 20% by @marisn in #281
- libimagery: Integrate band references into portable signature files by @marisn in #1501
- libimagery: Make band references optional to simplify generation of signatures by @marisn in #1866
- libimagery: Simplify raster band reference management by @marisn in #1272
- libimagery: Improve G_open|find _misc function documentation by @marisn in #1760
- libimagery: move signatures to subdirs by @marisn in #1850
- libsymbol: fix bad argument order by @nilason in #1820
- register.py: allow registering from io objects by @ninsbl in #1929
- Upgrade tgis db by @landam in #306
- open_stds: check for unknown band references by @landam in #1844
- Number of bands relevant only to strds by @landam in #1447
- Move grass package content to directory named grass by @wenzeslaus in #1356
- Move headers from include to include/grass by @wenzeslaus in #1350
- utils/mkhtml.py: fix get and set addon manual page source and history URL link #1892
Changes to software start
- grass: added support for google-chrome and chromium by @neteler in #201
- grass: Evaluate ^export lines only and expand variables in double/non-quoted values by @HuidaeCho in #170
- grass: fix typo in info_text, svn -> dev by @landam in #78
- grass: Match.getitem is new from version 3.6, we need to use g… by @petrasovaa in #253
- grass: used space as delimiter to get GRASS_VERSION_STRING by @ninsbl in #405
- grass: enforce Python 3 by @neteler in #345
- init: Add --tmp-mapset option by @wenzeslaus in #313
- init: Apply Black to the init script by @wenzeslaus in #1359
- init: Change the history file according to the current mapset for Bash by @wenzeslaus in #930
- init: Clean up Flake8 config by @wenzeslaus in #1508
- init: Create demolocation in grass.py, not wxGUI gis_set.py by @wenzeslaus in #1208
- init: Default to Bash, fallback to sh by @wenzeslaus in #1836
- init: ensure zsh environment variable SAVEHIST is set by @nilason in #805
- init: Solve most of Flake8 issues in grass.py by @wenzeslaus in #1536
- init: Start in last used mapset with --gui like --text by @wenzeslaus in #767
- init: Start shell only with TTY by @wenzeslaus in #768
- init: Update doc for non-interactive jobs by @wenzeslaus in #1753
- init: Update mapset and simplify shell prompts by @wenzeslaus in #923
- init: Use argparse instead of custom parsing for CLI by @wenzeslaus in #1239
- Add zsh history change by @nilason in #975
- Add zsh terminal prompt support by @nilason in #722
- tcsh prompt: fix update with change of mapset by @nilason in #765
- Startup: Avoid a race condition by @HuidaeCho in #548
JSON / REST support
- Fixed gis parser json implementation by @huhabla in #99
- json parser: change + to @ for URLs by @neteler in #175
- json parser: fix mapsets in tokenizing by @neteler in #1252
Code quality
- Add list of commits for git blame to ignore by @wenzeslaus in #1391
- Apply Black to all python scripts by @wenzeslaus in #1347
- Apply Black to doc utils in man by @wenzeslaus in #1366
- Apply Black to grass package, use Python 3 style everywhere by @wenzeslaus in #1382
- Apply Black to helpers, examples, doc, and others by @wenzeslaus in #1386
- Apply Black to locale by @wenzeslaus in #1513
- Apply Black to Python utils by @wenzeslaus in #1365
- Apply Black to temporal modules by @wenzeslaus in #1388
- Apply Black to tests by @wenzeslaus in #1387
- Apply Black to wxGUI by @wenzeslaus in #1527
- Apply Mega-Linter fixes to GH workflow scripts by @wenzeslaus in #1369
- Fix compiler warnings, part 1 by @nilason in #1248
- Fix compiler warnings, part 2 by @nilason in #1256
- Fix compiler warnings, part 3 by @nilason in #1263
- Fix compiler warnings, part 4 by @nilason in #1265
- Fix compiler warnings, part 5 by @nilason in (rst/interpfl lib & v.surf.rst) #1271
- Fix compiler warnings, part 6 by @nilason in #1274
- Fix compiler warnings, part 7 by @nilason in #1275
- Fix compiler warnings, part 8 by @nilason in #1276
- Fix compiler warnings, part 9 by @nilason in #1316
- Fix compiler warnings, part 10 by @nilason in #1395
- Fix compiler warnings, part 11 by @nilason in #1405
- Fix compiler warnings, part 12 by @nilason in #1406
- Fix spelling in comments esp. in GUI code by @wenzeslaus in #1357
- Flake8 fixes for docs and others by @wenzeslaus in #1511
- Flake8 fixes for utils and man by @wenzeslaus in #1379
- Flake8: fix F401 (unused import) and F821 (undefined name) in scripts and lib by @petrasovaa in #1314
- python PEP8 fixes by @neteler in #1317
- pythonlib: Fix stylistic Flake8 warnings by @wenzeslaus in #1486
- Remove pycache directories before release. by @sebastic in #182
- Fix spelling errors. by @sebastic in #1916, #561, #871, #992
- Code quality fixes for grass package (lib/python) by @wenzeslaus in #576
- Fix Flake8 errors in temporal modules by @wenzeslaus in #573
- Fix flake8 pep8 errors by @neteler in #986
- scripts: Enable ambiguous variable name warning by @wenzeslaus in #1515
- scripts: Enable bare except warning by @wenzeslaus in #1517
- scripts: Enable import not at top warning by @wenzeslaus in #1510
- scripts: Fix stylistic Flake8 warnings by @wenzeslaus in #1487
- scripts: Remove unused vars or ignore in Flake8 by @wenzeslaus in #1498
Unit tests / CI
- Add C and C++ versions to CI by @wenzeslaus in #596
- Add CentOS build check to CI by @wenzeslaus in #604
- Add GitHub Action to build, run tests, and Python static code analysis by @wenzeslaus in #525
- Add github workflow for docker build and push by @mmacata in #1790
- Add label to new GitHub issue by @nilason in #527
- CI: Add Flake8 check for grass.py by @wenzeslaus in #1311
- CI: Add GH Super Linter for a subset of secondary files by @wenzeslaus in #752
- CI: Add matplotlib to apt deps by @wenzeslaus in #1703
- CI: add PDAL support by @neteler in #1638
- CI: add proj-bin to have cs2cs for tests by @petrasovaa in #1410
- CI: Do not run Docker job on forks by @wenzeslaus in #1915
- CI: Enable Perl in Super-Linter by @wenzeslaus in #1493
- CI: Fix ifs for jobs and rename master to main by @wenzeslaus in #1813
- CI: Handpick C/C++ version combos for GCC tests by @wenzeslaus in #1288
- CI: Make test report available as artifact by @wenzeslaus in #1290
- CI: Make test report available even on failure by @wenzeslaus in #1702
- CI: Print version info for Ubuntu and CentOS runs by @wenzeslaus in #1832
- CI: Remove duplication in Ubuntu workflow by @wenzeslaus in #1749
- CI: Remove notifications comming from Travis CI by @wenzeslaus in #663
- CI: Run Docker for all release branches by @wenzeslaus in #1975
- CI: Switch Travis to Ubuntu 20.04 (focal) by @wenzeslaus in #1384
- CI: Update Flake8 by @wenzeslaus in #1932
- CI: Update setting env vars, use 20.04, C gnu17 by @wenzeslaus in #1092
- CI: Use a specific Flake8 version by @wenzeslaus in #626
- CI: Use matrix and increase versions for Flake8 by @wenzeslaus in #1309
- CI for MS Windows: Switch to OSGeo4W V2 by @ninsbl #2074
- gunittest: CalledModuleError constructor accepts module, code, returncode, and errors by @HuidaeCho in #1788
- gunittest: Deduplicate output decoding code by @wenzeslaus in #1539
- gunittest docs: fix broken links by @neteler in #934
- gunittest: Exclude broken tests by @wenzeslaus in #1587
- gunittest: Fix stdout used instead of stderr by @wenzeslaus in #1707
- gunittest: init super() to initialise 'errors' attribute by @nilason in #1685
- gunittest: Non-zero return code on certian percetage of tests failing by @wenzeslaus in #377
- gunittest: update module interface doctest by @nilason in #1699
- gunittest: Add a new assertion for raster equivalence by @marisn in #1148
- tests: Output more text and sort files by @wenzeslaus in #1362
- testsuite example: info updated by @neteler in #831
- testsuite: fix libgis/parser_json.c and r.fillnull by @neteler in #1346
- testsuite: minor fixes by @neteler in #855
- testsuite: r.blend quoting test by @neteler in #347
Portability
MS-Windows:
- Apply more osgeo4w patches by @ninsbl in #1921
- Apply patches from OSGeo4W upstreams by @ninsbl in #1880
- gdal.c: add .so/.dll for GDAL 3.0 by @rouault in #191
- mswindows: crosscompile under WSL by @HuidaeCho in #1940
- mswindows: Update crosscompile.sh to 8.0 by @HuidaeCho in #1876
- mswindows: Update crosscompile.sh to the master branch of MXE by @HuidaeCho in #1939
- OSGeo4W BAT files review by @landam in #437
- OSGeo4W workflow for GitHub Actions by @HuidaeCho in #692
- update wingrass installer to osgeo4w v2 + drop 32bit by @landam in #1904
- Cross compilation by @HuidaeCho in #257
- crosscompile: Support for BusyBox for Windows by @HuidaeCho in #1946
- env.bat.tmpl: Deal with blanks in OSGEO4W_ROOT by @jef-n in #859
- geos-config: Rename --libs to --clibs (configure uses --clibs) by @HuidaeCho in #177
- winGRASS: change form BU Execute to "GenericRead + GenericExecute" by @dnewcomb in #2068
Mac:
- Mac: converted compile instructions from RTF to markdown by @neteler in #636
- macOS/install: do not install system level docs by @nilason in #1909
- macOS: modernize app bundle info by @nilason in #941
- macOS: use @rpath as dynamic linker by @nilason in #981
- Mac ReadMe: stylistic update by @nilason in #639
- Mac: Update app icon for hi-res support by @nilason in #829
- v.in.pdal fix compilation on mac by @nilason in #479
- init/pythonlib: unified use of addonbase for mac #2004
FreeBSD:
- Fix linker flags on FreeBSD. by @MikaelUrankar in #1936
Docker support
New: Docker images are now built for the 8.0 branch.
Docker:
- Alpine dockerfile: removed PDAL by @neteler in #455
- Alpine dockerfile: update python3 patch and add pdal package by @mmacata in #378
- Alpine dockerfile: use proj 6.2.1 by @mmacata in #255
- Alpine dockerfile: added subversion package for g.extension by @neteler in #261
- Alpine dockerfile: Patch python instead of grass for alpine docker by @mmacata in #304
- Alpine dockerfile: patch to work with py3.8 by @mmacata in #278
- Alpine dockerfile: Alpine latest (stable) added by @neteler in #275
- Alpine dockerfile: removed gisinit revision workaround by @neteler in #280
- Alpine dockerfile: fix broken pip six installation by @neteler in #1568, #1581
- Dockerfile READMEs added by @neteler in #147
- Dockerfiles: fix broken lib link by @neteler in #1625
- Dockerfiles: fix broken grass-session tests by @neteler in #1623
- Dockerfiles: install git before build by @mmacata in #990
- Dockerfiles: moved into distro specific subdirs by @neteler in #148
- Dockerfiles: remove workaround for grass-session by @neteler in #1624
- Dockerfile Ubuntu/Debian: another link fix by @neteler in #1626
- Dockerfile with Python 3, PDAL, grass-session, Ubuntu based by @neteler in #134
- docker: fix GRASS lib path detection by @neteler in #883
- docker: image with Ubuntu 19:10 by @neteler in #260
- docker: update Ubuntu based images by @neteler in #1180
- docker: version matrix added by @neteler in #606
- introduce docker multistage build to alpine image by @mmacata in #276
- Keep module_items.xml in docker alpine by @mmacata in #330
- Read the ubuntu based Dockerfile by @hwbllmnn in #143
- Switch to debian 10.1 as dockerfile base image (master) by @hwbllmnn in #140
Singularity:
Message Translations
- i18N: sync from Transifex (https://www.transifex.com/grass-gis/grass7/dashboard/
- Support Korean (ko) language settings from g.gui for Windows by @HuidaeCho in #519
- Sync Korean translations by @HuidaeCho in #556
Packaging
GitHub related
- Issues are now on GitHub by @wenzeslaus in #315
- Rename the master branch to main by @wenzeslaus in #1806
- Rename tools directory to utils by @wenzeslaus in #1348
- GitHub action CI: drop ubuntu-16.04 by @neteler in #1254
- GitHub Action: Completion of security analysis with CodeQL by @mmacata in #1300
- svn refs changed to git by @neteler in #93
- GIS_H_VERSION: use git hash by @metzm in #325
- infrastructure.md: add latest updates by @neteler in #863
- change sponsor link to opencollective by @veroandreo in #1865
- Reference CONTRIBUTING.md file in README by @wenzeslaus in #283
- Format YAML in GH workflows by @wenzeslaus in #1367
- Fix osgeo4w workflow by @agiudiceandrea in #1757
Restructuring of the GRASS GIS Addons repository
- Overview of tasks related to "restructure repository for version 8" by @wenzeslaus in OSGeo/grass-addons#528
- GRASS GIS 6 addons related changes (essentially, its archivation) by @wenzeslaus in OSGeo/grass-addons#535
- GRASS GIS 7 addons related changes by @wenzeslaus in OSGeo/grass-addons#571
- GRASS GIS 8 addons related changes: the
grass8
branch was created on Dec, 3rd 2021 and is now the default branch
New Addons since GRASS 7.8.6
- d.region.grid: Drapes a color raster over an shaded relief or aspect map.
- v.greedycolors: Creates greedy colors for vector areas.
- v.what.rast.label: Uploads raster values and labels to vector point layer.
Closed GitHub tickets since the last release
See https://github.com/OSGeo/grass/milestone/4?closed=1
New Contributors
(in alphabetical GitHub user name order)
- @aaronsms made their first contribution in #1514
- @agiudiceandrea made their first contribution in #1336
- @aroche made their first contribution in #288
- @attilaolah made their first contribution in #1376
- @baharmon made their first contribution in #518
- @bmwiedemann made their first contribution in #251
- @byronbest made their first contribution in #113
- @CarlosGrohmann made their first contribution in #1857
- @chaedri made their first contribution in #1603
- @cwhite911 made their first contribution in #1026
- @dnewcomb made their first contribution in #2068
- @ecodiv made their first contribution in #1246
- @ggardet made their first contribution in #565
- @griembauer made their first contribution in #983
- @infrastation made their first contribution in #972
- @jentjr made their first contribution in #650
- @jidanni made their first contribution in #208
- @KolesovDmitry made their first contribution in #361
- @lbartoletti made their first contribution in #301
- @lrntct made their first contribution in #734
- @Lucifergene made their first contribution in #1812
- @mankoff made their first contribution in #91
- @MikaelUrankar made their first contribution in #1936
- @mmacata made their first contribution in #151
- @mwort made their first contribution in #85
- @nobeeakon made their first contribution in #1089
- @ocsmit made their first contribution in #1431
- @shubhamshah14102 made their first contribution in #1951
- @ShubhamSwati made their first contribution in #1608
- @SunveerSingh made their first contribution in #1464