Skip to content

v0.6.0

Latest

Choose a tag to compare

@giswqs giswqs released this 09 Nov 00:48
· 2 commits to main since this release
6db08fe

RustGIS v0.6.0 keeps the app responsive and puts the work on paper. Geoprocessing tools, exports and large reads now run in the background with progress and Cancel, on the desktop many of them on several cores, and a computer's memory sets the limits, so a dataset too big for the machine stops with a message instead of a crash. Layouts export as vector PDF and SVG, maps gain pie and bar diagrams and label callouts, editing gains Cut Polygon, Reshape and Trace, and new tools check and repair geometry. CityJSON city models, ArcGIS protocol buffer pages and cloud-optimised GeoTIFFs read in place broaden what opens.

Highlights

  • Work in the background: the Tools pane, the Analysis pane's raster, zonal, viewshed and interpolation tools, the Classification Wizard, Deep Learning, models and scripts run off the frame with progress and Cancel. Add Data, Export Features, Export Raster, Export Map and Export Layout read and write in the background. gp.batch runs one tool over many inputs, and buffers, IDW, kriging, viewshed, slope, zonal statistics, Near, resampling and more spread their work over several cores on the desktop. Memory limits follow the computer's memory, and a raster or project it can't hold is an error, not a crash. See Analysis.
  • Publication output: layouts, reports and printed maps export as vector PDF and SVG, with map frames and surrounds kept as vectors. Legends set in up to three columns, publication layouts get arrangements and a favourite, scale bars take a colour and a fill, and a layout's page copies to the clipboard. Export Map writes the view as a GeoTIFF placed on the ground, Export Raster writes a tile layer's tiles as one, and layers export as binary STL beside OBJ. See Layouts.
  • Richer cartography: pie and bar diagrams from several numeric fields. Labels gain callouts, Show All Labels, a Move Label tool, and alternate places to try along lines, with their text, size, colour and angle set by expression. Unique Values by expression, with QGIS rule-based renderers and filters imported through it, and Invert Color Ramp. MapLibre styles draw raster-dem sources as hillshade and colour relief, with every sprite they use. See Cartography.
  • Editing and geometry tools: Cut Polygon, Reshape and Trace along an edge while drawing. Check Geometry and Repair Geometry find and fix invalid shapes, and Polygon To Line, Split Line At Vertices, Feature Envelope To Polygon, Unsplit Line, Points Along Lines, Tabulate Intersection and Rasterize join the toolbox. Dissolve and Summarize Within take summary fields, and expressions measure areas and lengths in a chosen unit. See Editing.
  • More data, read in place: CityJSON city models as footprints with their heights, ArcGIS feature services read as protocol buffers, cloud-optimised GeoTIFFs as raster layers read in place (or a window of one by bounding box), a Shapefile opened by its .shp address, and exports into an existing GeoPackage as an added or replaced table. Web services take basic-auth or API-key logins, sinusoidal, Robinson, orthographic and Mercator systems are read, JAXA Earth's data cubes open on the time slider, and PDOK Locatieserver joins the geocoders. See Data Formats.
  • A better workspace: the History pane shows tool runs and the session log, filtered, saved as CSV or JSON Lines, or copied back to the Script pane. Write custom themes as JSON files and scale the interface. Hide and reorder attribute table columns, read UTM and MGRS coordinates in the status bar and search for them, and download and install updates from Check for Updates on Windows. Greek and Lao join the interface languages, and Requesty and TrustedRouter join the AI Assistant's providers.

Download

Get the app for your platform at https://downloads.rustgis.app (or below), and see https://rustgis.app/installation/ for which file to pick.

What's Changed

  • docs(contributing): faster builds on macOS, rust-analyzer's own target folder, nextest from Homebrew by @jgregoriorincon in #1231
  • Web: explain why a page opened as a local file cannot start by @giswqs in #1237
  • fix(data): refuse FlatGeobuf in the web app instead of aborting it by @Mavrick-F in #1152
  • Measure on the WGS 84 ellipsoid in the attribute table, measure tool and network tools (#939) by @subarna-kandel in #998
  • ci(review): show the Claude reviewer the review threads already on a PR by @Mavrick-F in #1239
  • fix(analysis): Join Field matches a text key with an integer key written out in full by @PawelKra in #1186
  • fix(data): sweep the Shapefile index cache once per index built, not three times per open (#1230, part 1) by @jgregoriorincon in #1232
  • fix(data): say when Z and M values are dropped on import and export by @Mavrick-F in #1214
  • perf(data): building a layer feature by feature is linear, not quadratic by @pick2510 in #1245
  • perf(analysis): geodesic buffers take each vertex back once and look at fewer edges, on all cores by @pick2510 in #1248
  • fix(engine): prevent offline sync field layout corruption by @Jesse-jApps in #1246
  • fix(data): count only the Z/M values readers really drop by @Mavrick-F in #1247
  • fix(analysis): Buffer says how many features had no geometry; review follow-ups to #1248 by @pick2510 in #1251
  • fix(analysis): refine buffer arcs to meet reference tolerance by @Mavrick-F in #1241
  • fix(engine): warn when offline sync replaces changes made in the source by @Mavrick-F in #1250
  • perf(analysis): one helper spreads a tool's items over the cores; Select by Location buffers on it by @pick2510 in #1254
  • test(data): keep the Shapefile indexes tests build out of the user's cache (#1230, part 2a) by @jgregoriorincon in #1243
  • perf(data): read a whole layer within a memory budget instead of a feature count by @Mavrick-F in #1255
  • fix(data): drop stale Shapefile indexes: earlier versions and ones unused too long (#1230, part 2b) by @jgregoriorincon in #1258
  • fix(data): reject partial GeoJSON collections by @Mavrick-F in #1257
  • fix(data): refuse whole reads of sampled LiDAR clouds by @Mavrick-F in #1256
  • feat(engine): empty the Shapefile index cache with cache.emptyIndexes by @jgregoriorincon in #1268
  • fix(data): leave out OGC API collections of 3D Tiles and meshes by @pick2510 in #1270
  • fix(engine): a new feature doesn't take a deleted feature's locked label by @jgregoriorincon in #1271
  • perf(analysis): IDW and kriging rows on several cores by @pick2510 in #1273
  • fix(plugins): a built-in tool's output layer name needs no files permission (#1233) by @elpidioassinaturas in #1235
  • feat(tiles): draw raster-dem sources as hillshade and color-relief layers by @milovanderlinden in #1215
  • fix(ui): fill the elevation profile's area segment by segment (#1276) by @elpidioassinaturas in #1278
  • fix(geom): preserve unwrapped Mercator geometry and bound world extents by @subarna-kandel in #1001
  • perf(analysis): viewshed rows on several cores by @pick2510 in #1283
  • fix(data): say which GeoParquet and FlatGeobuf columns are left out or read as numbers by @Mavrick-F in #1275
  • docs: let quality review points wait for a release quality pass by @Mavrick-F in #1279
  • fix(data): say on export when positions are approximate or not longitude/latitude by @Mavrick-F in #1281
  • fix(geom): switch measurement units for negative distances and areas (#1284) by @TalhaHunter101 in #1285
  • refactor(data): share the 3D footprint step, for readers beyond File Geodatabase by @jgregoriorincon in #1292
  • feat(geolibre): provide field pickers for GeoLibre field parameters and relabel table row header (#1081) by @sutharprin098 in #1093
  • fix(labels): keep full feature ids in web label locks by @Mavrick-F in #1302
  • fix(data): say when raster values are rounded to 32-bit floats by @Mavrick-F in #1286
  • perf(geom): reuse trigonometric evaluations in ring area and polyline length by @TalhaHunter101 in #1288
  • fix(style): fills come back after No Fill by @pick2510 in #1304
  • fix(render): fold sharp stroke joins at the width the GPU draws them (#1295) by @deniial00 in #1296
  • fix(view): Terrain from the active DEM layer, with a button in View › Scene (#1277) by @elpidioassinaturas in #1280
  • fix(data): a Shapefile whose .dbf header date is zero opens by @pick2510 in #1307
  • feat(analysis): add four geometry conversion tools by @Mavrick-F in #1306
  • feat(analysis): add a Tabulate Intersection tool by @Mavrick-F in #1293
  • fix(analysis): budget buffer storage separately from overlay complexity by @Mavrick-F in #1305
  • fix(data): say which field names a Shapefile export changes by @PawelKra in #1274
  • feat(labels): label text, size, colour and angle by expression (#882 pieces 6+7, part 3) by @pick2510 in #1309
  • perf(analysis): reuse candidate buffer in spatial extent queries by @TalhaHunter101 in #1289
  • feat(analysis): a running tool can be cancelled and reports its progress by @pick2510 in #1311
  • chore: state the copyright in LICENSE by @Mavrick-F in #1323
  • feat(ui): add session-local diagnostics history by @deniial00 in #1181
  • feat(gp): the Tools pane runs a built-in tool in the background, with progress and Cancel by @pick2510 in #1317
  • feat(style): Unique Values by expression; QGIS rule-based renderers and filters through expressions (#882 pieces 6+7, part 4) by @pick2510 in #1314
  • feat(analysis): an output raster the machine can't hold is an error, not a crash (#1291 step 1, part 1) by @pick2510 in #1328
  • chore(deps): bump proj4rs from 0.2.1 to 0.3.0 by @dependabot[bot] in #1199
  • fix(data): read WFS features past server page limits by @Mavrick-F in #1315
  • fix(qgis): a QGIS label class whose text is an empty expression is noted by @pick2510 in #1329
  • fix(data): read CSV in Latin-1 (Windows-1252) or UTF-16 instead of refusing it (#1303) by @elpidioassinaturas in #1312
  • feat(data): measure areas and lengths in expressions, in a chosen unit by @Mavrick-F in #1337
  • feat(data): ASCII grids, Zarr stores and pictures the machine can't hold are errors, not crashes (#1291 step 1, part 2) by @pick2510 in #1338
  • fix(style): an imported rule style keeps its classes when applied again; scale-read classes said by @pick2510 in #1336
  • feat(analysis): summary fields on Dissolve and Summarize Within by @PawelKra in #1253
  • test(ui): the Summarize Within test waits for its background run by @giswqs in #1343
  • ci(fuzz): build and run for the gnu target by @giswqs in #1344
  • fix(ui): a file with several layers in Recent or Favourites asks which to add by @pick2510 in #1345
  • fix(plugins): a mosaic of the project's raster layers needs no files permission (#1234) by @elpidioassinaturas in #1236
  • refactor(render): draw maps, layouts and reports through a Canvas by @Mavrick-F in #1356
  • feat(tiles): read every sprite of a style, and the image expression by @milovanderlinden in #1294
  • fix(diagnostics): keep the headers after a credential header, say a server's absences again, and record request failures one way by @deniial00 in #1333
  • test(analysis): compact generated reference geometry by @Mavrick-F in #1361
  • fix(data): report Shapefile attribute export losses by @Mavrick-F in #1362
  • feat(render): layouts, reports and printed maps as vector PDF by @Mavrick-F in #1359
  • feat(edit): cut polygons, reshape features and trace along edges by @Mavrick-F in #1351
  • perf(analysis): deep-learning classification rows on several cores (#1252) by @pick2510 in #1365
  • perf(analysis): slope, aspect and hillshade rows on several cores (#1252) by @pick2510 in #1368
  • feat(raster): a window of a cloud-optimised GeoTIFF by its address as a raster layer: layer.addUrl {"bbox"} (#1204) by @elpidioassinaturas in #1210
  • fix(engine): reject projects too large to reopen before saving by @Mavrick-F in #1364
  • perf(analysis): Near searches its features on several cores (#1252) by @pick2510 in #1369
  • feat(render): SVG layout export with map frames and surrounds as vectors by @Mavrick-F in #1367
  • feat(data): GeoTIFF and COG rasters the machine can't hold are errors, not crashes (#1291 step 1) by @pick2510 in #1370
  • feat(engine): raster commands the machine can't hold are errors, not crashes (#1291 step 1, part 3) by @pick2510 in #1371
  • fix(data): reject malformed reader allocation sizes by @Mavrick-F in #1360
  • fix(analysis): leave a bilinear or cubic cell over no-data without a value by @GISspecialistAlejandraDuque in #1039
  • feat(data): read ArcGIS feature-service answers as protocol buffers (f=pbf) by @jgregoriorincon in #1327
  • feat(data): the memory limits follow the computer's memory on the desktop (#1291 step 2) by @pick2510 in #1372
  • fix(ui): a number typed is one undo step, set on Enter or a click away, and Escape brings back the value (#1194) by @jgregoriorincon in #1350
  • feat(data): read CityJSON models as footprints with their heights by @jgregoriorincon in #1300
  • feat(analysis): Viewshed, IDW and Kriging take as many times the work as the threads they run on (#1291 step 2) by @pick2510 in #1376
  • fix(style): Unique Values on numbers in numeric order, and say what is past the first 64 (#1340) by @PawelKra in #1373
  • feat(labels): try alternate positions along lines by @choupeanut in #1363
  • History pane: Tool runs and Session log views; the log filtered, saved as CSV or JSON Lines, cleared or turned off (#797, part 2) by @elpidioassinaturas in #1324
  • perf(analysis): Zonal Statistics works out its zones on several cores (#1252) by @pick2510 in #1377
  • perf(analysis): Resample and band math make their rows on several cores (#1252) by @pick2510 in #1380
  • perf(analysis): the Georeferencer's leave-one-out refits run on several cores (#1252) by @pick2510 in #1381
  • perf(analysis): Project Raster and the georeferencer's warp make their rows on several cores (#1252) by @pick2510 in #1382
  • docs: link the 30DayMapChallenge 2026 gallery from the site menu by @giswqs in #1383
  • perf(analysis): k-means and Kernel Density make their rows on several cores (#1252) by @pick2510 in #1384
  • test(engine): the plain-TIFF test server reads its requests on Windows by @giswqs in #1386
  • docs: add a Video Tutorials page by @giswqs in #1389
  • feat(analysis): Buffer's budget, Kernel Density's cells and the threads' scratch follow the computer's memory (#1291 step 2) by @pick2510 in #1390
  • docs: even out the lengths of the Highlights cards by @giswqs in #1391
  • feat(ui): Add From Service removes a layer it already added by @mgaux-dev in #1190
  • feat(analysis): Points Along Lines, points at a set distance along lines and rings by @flight1973 in #1099
  • fix(plugins): the web app lists plugins it couldn't load at start, with Retry and Remove by @deniial00 in #1366
  • fix(tiles): a tile layer's opacity fades its icons and labels too (#1358) by @ninhhaidang in #1393
  • fix(analysis): Pivot Table says which cells it rounded past 2^53 by @PawelKra in #1388
  • fix(geom,analysis): measure polar caps cut at ±180° on the ellipsoid by @choupeanut in #1396
  • fix(data): verify HTTPS servers with the system's certificate trust (#1154) by @deniial00 in #1282
  • i18n: Add Greek language support (el) by @pancost in #1399
  • feat(ui): the Analysis pane's Zonal Statistics, Viewshed and Interpolate run in the background (#1291 step 3) by @pick2510 in #1404
  • feat(data): read an ArcGIS layer's description before its first page (#1326 step 1) by @jgregoriorincon in #1397
  • fix(data): keep a CityJSON ground's courtyard past the face cap, and give each layer its own name (#1374, #1375) by @jgregoriorincon in #1401
  • feat(data): read an ArcGIS layer in f=pbf pages when it lists them (#1326 step 2) by @jgregoriorincon in #1410
  • feat(labels): try other places along lines from labels.placement and the pane by @jgregoriorincon in #1411
  • fix(analysis): Spatial Join's merge rules take whole numbers exactly and say what they lose by @PawelKra in #1400
  • perf(data): compress GeoParquet exports with Zstd by @Mavrick-F in #1407
  • feat(ui): the Classification Wizard and Deep Learning run in the background (#1291 step 3) by @pick2510 in #1412
  • fix(engine): read RustGIS files only from regular files, within their limit by @Mavrick-F in #1415
  • feat(layout): arrangements for publication layouts, a favourite, and surrounds moved off the data (#1379) by @elpidioassinaturas in #1392
  • fix(analysis): bend the line of sight as visible light does by @GISspecialistAlejandraDuque in #1402
  • feat(ui): the Analysis pane's single-pass raster tools run in the background (#1291 step 3) by @pick2510 in #1416
  • fix(data): cap the steps an expression's LIKEs take per row by @flight1973 in #1408
  • feat(data): open a Shapefile by its .shp address, fetching its parts beside it by @elpidioassinaturas in #1244
  • fix(engine): Calculate Field keeps decimals exactly, and says what a whole-number field cuts by @PawelKra in #1406
  • feat(analysis): a run that can be cancelled takes no work cap (#1291 step 2) by @pick2510 in #1418
  • fix(ui): each layout keeps its own page zoom and pan by @jgregoriorincon in #1425
  • feat(engine): add an ArcGIS layer read in f=pbf pages from service.add and Add From Service (#1326 step 2) by @jgregoriorincon in #1422
  • feat(qgis): categorized renderers by an expression as Unique Values by expression (#882) by @pick2510 in #1421
  • fix(ui): credit Natural Earth only where its world outline is drawn by @jgregoriorincon in #1428
  • fix(map): do not reset zoom when adding a service or layer by @mgaux-dev in #1195
  • feat(analysis): Check Geometry writes the features with invalid geometry and says what is wrong by @PawelKra in #1417
  • feat(assistant): add Requesty as a provider by @Thibaultjaigu in #1423
  • feat(ui): Export Features and Export Raster write their file in the background (#1291 step 3) by @pick2510 in #1433
  • fix(ui): a double-click is counted at slow frame rates, so a layer's opens Symbology (#1321) by @elpidioassinaturas in #1322
  • test(engine): release the archives before the GeoLibre sources test cleans up by @giswqs in #1436
  • feat(data): export into an existing GeoPackage as an added or replaced table by @Mavrick-F in #1403
  • test(engine): compare export answers with Windows paths escaped as JSON by @giswqs in #1439
  • feat(analysis): burn polygons onto a chosen grid (raster.rasterize, #821 part 2) by @elpidioassinaturas in #1409
  • fix(ui): a plugin command shows it has started, and clicks made while it runs are dropped (#1319) by @elpidioassinaturas in #1426
  • feat(connections): log in to web services with basic auth or an API-key header, for the session by @deniial00 in #1223
  • feat(data): a memory budget, the GeoJSON fallback said, losses of kept features and field aliases for ArcGIS protocol buffer pages (#1432) by @jgregoriorincon in #1437
  • feat(symbology): pie and bar diagram symbology from several numeric fields by @A-talebifard in #1048
  • feat(ui): custom themes as JSON files, and an interface scale by @Wolren in #1151
  • feat(ui): Download and Install updates for setup.exe installs on Windows (#1290) by @DanielD-S in #1320
  • fix(layout): draw a legend's points as the map does by @jgregoriorincon in #1442
  • feat(labels): callouts, show all labels, and a Move Label tool by @huzaifffa in #1128
  • feat(layout): a colour and a fill for the scale bar by @jgregoriorincon in #1452
  • feat(ui): Export Map and Export Layout in the background by @pick2510 in #1460
  • feat(analysis): Repair Geometry writes each feature with its geometry made valid and says what it did by @PawelKra in #1443
  • docs: clarify desktop agent-control settings navigation by @robmarkcole in #1468
  • feat(tiles): PDOK Locatieserver as a geocoder for Find Place and layer.geocode by @PawelKra in #1444
  • feat(layout): copy a layout's page to the clipboard by @choupeanut in #1430
  • fix(engine): check file compatibility before imports by @Mavrick-F in #1472
  • feat(ui): a Zarr layer following the time slider reads its step off the frame by @pick2510 in #1469
  • fix(tiles): keep authenticated HEAD refusal diagnostics status-only by @deniial00 in #1462
  • fix(tiles): use browser crypto for service login bindings by @deniial00 in #1473
  • fix(i18n): distinguish Analysis from Analyze in Chinese by @dswwedxc in #1471
  • fix(ui): Add From Service says how a layer's download went once it lands by @jgregoriorincon in #1454
  • fix(engine): a label lock forgets removed layers and deleted features' anchors by @jgregoriorincon in #1484
  • fix(ui): give translated toolbox headers stable identities by @Mavrick-F in #1485
  • fix(data): read a GeoPackage coordinate system from its WKT definition when it has no EPSG code by @jgregoriorincon in #1480
  • feat(ui): Add Data and Load All read their file off the frame (#1291 step 3) by @pick2510 in #1479
  • test(tiles): answer the derived-style test's requests by path (fix macOS CI on main) by @giswqs in #1482
  • fix(data): reject non-finite segments and fix degenerate ring centroid by @TalhaHunter101 in #1332
  • fix(engine): validate model files and preserve repeated inputs by @Mavrick-F in #1474
  • docs: who approves coordinate-first changes, and rules for saved files by @Mavrick-F in #1481
  • fix(deps): clear cargo audit vulnerabilities; guard .xls against looping sector chains by @giswqs in #1493
  • feat(i18n): support contextual translations in catalogs by @Mavrick-F in #1492
  • fix(engine): add a source split into several layers polygons first, so its points stay on top by @jgregoriorincon in #1491
  • fix(data): follow only calamine's .xls chains; add a sheets fuzz target by @giswqs in #1496
  • ci(deps): check dependency sources and pin workflow actions by @Mavrick-F in #1489
  • fix(data): prevent service documents from choosing login bindings by @deniial00 in #1464
  • feat(models): run a model's tools off the frame on the desktop by @pick2510 in #1487
  • feat(scripts): run a Script pane script's tools off the frame on the desktop by @pick2510 in #1503
  • feat(plugins): a plugin command whose layer.addUrl left a download runs again when it lands, and goes on with the layer (#1202) by @elpidioassinaturas in #1341
  • fix(layout): refuse a colour the element kind doesn't have (#1455) by @choupeanut in #1459
  • perf(data): band statistics count on several threads, summing in the band's order by @pick2510 in #1509
  • perf(analysis): Dissolve finds each feature's group by its key's hash by @pick2510 in #1507
  • test: UI tests take turns for the tile cache; a COG just probed is framed after a cache clear (#1499) by @jgregoriorincon in #1500
  • perf(analysis): Feature To Point, Minimum Bounding Geometry per feature and Calculate Geometry make each feature's result on several cores by @pick2510 in #1514
  • perf(analysis): zonal means test only the cells in their zone's window by @pick2510 in #1508
  • feat(ui): the Script pane's last run whole in a Details window by @jgregoriorincon in #1516
  • fix(data): refuse a GeoParquet dictionary page that claims more values than it holds by @Mavrick-F in #1527
  • fix(map): a streamed view applies its definition query before its feature limit by @Mavrick-F in #1525
  • build(deps): bump anthropics/claude-code-action from 1.0.264 to 1.0.268 in the actions-minor-patch group by @dependabot[bot] in #1528
  • build(deps): bump astral-sh/setup-uv from 7.6.0 to 10.3.3 by @dependabot[bot] in #1529
  • build(deps): update dtolnay/rust-toolchain requirement to b725eda525362e7cf34af9a7243cac1e3f01a7ec by @dependabot[bot] in #1530
  • build(deps): bump the cargo-minor-patch group with 6 updates by @dependabot[bot] in #1531
  • fix(ui): start the Script pane blank when another project opens (#1511) by @jgregoriorincon in #1524
  • feat(raster): cloud-optimised GeoTIFFs are raster layers read in place by @siiinc in #1339
  • fix(analysis): keep polar geometry through the geometry tools (#1033) by @flight1973 in #1347
  • refactor(data): move the city model's shared part out of the CityJSON reader (#1536) by @jgregoriorincon in #1537
  • fix(ui): the browser's layout page is drawn again as its map frames' tiles land by @jgregoriorincon in #1535
  • perf(analysis): IDW at a power of 2 weighs by squared distances, with no square root or power by @pick2510 in #1520
  • fix(security): keep credentials within runtime boundaries by @Mavrick-F in #1521
  • fix(engine): Spatial Join's and Zonal Statistics' output layer name runs on a script's copy by @pick2510 in #1541
  • fix(ui): the Symbology pane lists up to 200 Unique Values classes, and says how many it leaves out by @pick2510 in #1543
  • fix(security): bind approvals to exact execution scopes by @Mavrick-F in #1461
  • feat(symbology): Invert Color Ramp reverses the colors of a layer's classes (#1355) by @ninhhaidang in #1387
  • feat(table): hide and reorder attribute table columns by @choupeanut in #1497
  • fix(tiles): let go of an MBTiles file once no layer reads it by @elpidioassinaturas in #1440
  • feat(layout): a legend in up to three columns, and publication layouts use them for long legends (#1379) by @elpidioassinaturas in #1494
  • feat(raster): read a COG window off the frame in the app (#1330, part 1) by @elpidioassinaturas in #1512
  • fix(data): say when a coordinate system is another body's, and refuse what would land in the wrong place by @PawelKra in #1478
  • ci: cancel running label-triggered workflows when label is removed by @deniial00 in #1450
  • ci(nightly): bound the Census downloads and the real-data job; check a null assessment through the overlay by @Mavrick-F in #1550
  • fix(engine): edit polar features on the ground (#1033) by @flight1973 in #1348
  • fix(data): CityJSON levels, footprints, attribute names and layer order on edge cases (#1538) by @jgregoriorincon in #1549
  • fix(analysis): measure radius searches on the ground near a pole, and meet at the poles (#1033) by @flight1973 in #1349
  • fix(ui): give the Script's keys a colour of their own, alternative keys included (#1554) by @jgregoriorincon in #1555
  • ci: save only the caches something restores: the nightly reuses main's test cache, previews share the web app's by @Mavrick-F in #1558
  • feat(geom): UTM and MGRS coordinate readouts, copies and search by @PawelKra in #1429
  • feat(ui): a Clear button empties the Script pane, its script back with Ctrl+Z (#1567) by @jgregoriorincon in #1568
  • fix(raster): keep the NIR band of RGBI GeoTIFFs through processing and export (supersedes #1420) by @giswqs in #1571
  • test(ui): install the Persian face in the right-to-left note test (fixes macOS CI on main) by @giswqs in #1578
  • refactor(data): city models convert to longitude/latitude at the end and build layers without a GeoJSON round trip (#1536) by @jgregoriorincon in #1565
  • feat(share): export a layer as binary STL beside OBJ by @choupeanut in #1431
  • feat(data): read sinusoidal, Robinson, orthographic and Mercator (variant A) systems; equidistant cylindrical on its ellipsoid by @PawelKra in #1463
  • feat(plugins): a plugin command's service.add reads off the frame on the desktop (#1319) by @elpidioassinaturas in #1513
  • fix(tiles): harden redirects, picture probes and Earthdata sign-out by @PawelKra in #1570
  • feat(engine): batch geoprocessing runner (gp.batch) by @quanguet0409 in #1458
  • fix(engine): keep a cloud-optimised GeoTIFF's look in a saved project by @elpidioassinaturas in #1533
  • feat(stac): data cubes from static collections laid out by date (JAXA Earth) (#1532 part 1) by @elpidioassinaturas in #1557
  • i18n: translate the new interface strings in every language by @giswqs in #1580
  • feat(assistant): add TrustedRouter as a provider by @jperla in #1559
  • fix(data): add a service's layers past the first 2000 by name, and say when a listing stops (#1519) by @elpidioassinaturas in #1526
  • test(data): planetary CRS tests expect equidistant cylindrical on the ellipsoid (fixes main CI) by @giswqs in #1587
  • i18n(lo): add Lao translation catalog and update documentation by @bounkirdni-2025 in #1466
  • feat(ui): the status bar keeps the last pointer position off the map by @choupeanut in #1609
  • feat(share): Export Map writes the view as a GeoTIFF placed on the ground by @pick2510 in #1566
  • fix(engine): cap gp.batch's inputs and report dropped input aliases by @giswqs in #1582
  • fix(data): release quality sweep (readers, GeoPackage replace, interpolation notices) by @giswqs in #1608
  • fix(geom, render, engine): release quality sweep by @giswqs in #1605
  • fix(engine): release quality sweep (messages, notices, web login choice) by @giswqs in #1602
  • test(engine): the GeoTIFF tile-layer test no longer deletes an open archive (fixes main CI on Windows) by @giswqs in #1618
  • fix(engine,docs): release quality sweep for docs and apps by @giswqs in #1604
  • fix(data): open GDAL inputs with their own drivers only by @Mavrick-F in #1563
  • fix(engine): release quality sweep (imports, models, tile templates, docs) by @giswqs in #1606
  • fix(ui-egui): release quality sweep by @giswqs in #1603
  • fix(analysis): release quality sweep by @giswqs in #1607
  • fix(data): release quality sweep (CityJSON, GML, WFS, rasters, editing) by @giswqs in #1612
  • feat(share): Export Raster writes a tile layer's tiles as a GeoTIFF (#1561) by @pick2510 in #1619
  • Engine: say when native HTTPS falls back to the bundled CA roots by @giswqs in #1628
  • Data: say which values a GeoParquet export wrote as null by @giswqs in #1635
  • Data: say when SQL Server layers drop Z and M values by @giswqs in #1627
  • Python: add_data returns a list when a file adds several layers by @giswqs in #1624
  • Data: keep the login on same-origin links with spaces, sent as a browser would by @giswqs in #1625
  • Rasters: keep the rounded-values note on clipped and edited rasters by @giswqs in #1636
  • Engine: say when boolean parameter text can't be read by @giswqs in #1630
  • Engine: report diagram and layout repairs when a project opens by @giswqs in #1629
  • Render: draw diagrams on extruded and tilted layers, say when they can't show by @giswqs in #1631
  • feat(ui): the Session log names each entry's project and copies it back to the Script pane (#1579) by @jgregoriorincon in #1583
  • Geometry: tell antimeridian seams from full turns in ring area and perimeter by @giswqs in #1632
  • feat(engine): the largest project follows the computer's memory (#1615) by @pick2510 in #1639
  • fix(plugins): a malformed blocklist refresh keeps the last good list by @Mavrick-F in #1569
  • Engine: say when an opened layer's diagram won't show by @giswqs in #1640
  • Engine: let a batch stop with the run it is part of by @giswqs in #1637
  • Tiles: say when a style's color-relief layer can't be drawn by @giswqs in #1633
  • i18n: fill every catalog, including the Lao backlog by @giswqs in #1647
  • UI: name languages in English while the interface is English, sorted alphabetically by @giswqs in #1648
  • Release v0.6.0: version, roadmap and highlights by @giswqs in #1649

New Contributors

Full Changelog: v0.5.0...v0.6.0