What's Changed
- feat(processing): add Reproject, Explode, Aggregate vector tools (#283) by @giswqs in #290
- feat(macos): Homebrew Cask packaging for macOS by @giswqs in #294
- fix(macos): update Homebrew docs for tap trust and removed --no-quarantine by @giswqs in #295
- feat(processing): add Smooth, Regular grid, Voronoi/Delaunay vector tools by @giswqs in #293
- feat(processing): add IDW / kriging interpolation (point → raster surface) (#283) by @giswqs in #296
- feat(processing): add zonal stats, raster calculator, reclassify, mosaic, focal by @giswqs in #300
- feat(processing): add attribute (table) join vector tool by @giswqs in #314
- feat(attribute-table): add field statistics summary panel by @giswqs in #315
- feat(storymaps): scroll-driven story map builder, presenter, and HTML export by @giswqs in #299
- test(storymaps): add e2e regression test for story map persistence by @giswqs in #317
- feat(layout): user-editable legend for print layout (#303) by @giswqs in #316
- feat(geocoding): add batch geocoding and reverse geocoding tools by @giswqs in #318
- feat(export): add Shapefile and GeoPackage export (#310) by @giswqs in #322
- fix(storymaps): present bundled story on load and fix nav rotation by @giswqs in #320
- feat(raster): single-band pseudocolor + classification and RGB band combination (#305) by @giswqs in #319
- refactor: extract URL validation and make basemape registry immutable by @slowy07 in #326
- feat(layers): collapsible layer groups/folders in the layer panel (#311) by @giswqs in #323
- feat: add transparent rewrite support for public S3, GCS, and Azure cloud storage URLs in SQL queries (closes #313) by @Ka-iPy in #321
- feat(network): isochrones, service areas, and OD cost matrices (#308) by @giswqs in #324
- feat(layers): add glTF/GLB 3D model layer (#306) by @giswqs in #325
- fix(pwa): stop the web demo from auto-refreshing itself by @giswqs in #328
- feat(scripting): Python automation API + in-app Python Console by @giswqs in #327
- feat(collab): real-time multi-user collaboration MVP (#307) by @giswqs in #329
- fix(collab): render plugin layer types (raster/LiDAR/3D-tiles) on collaborators by @giswqs in #330
- fix(desktop): silence benign Tauri IPC startup transients in console (#332) by @giswqs in #334
- fix(parquet): load Parquet with non-standard WKB geometry column (#336) by @giswqs in #337
- feat(assistant): natural-language GIS assistant (Strands agent) by @giswqs in #331
- perf(attribute-table): virtualize rows for large layers (#338) by @giswqs in #354
- feat(sql): add Apache Sedona as an additional SQL Workspace engine (#335) by @giswqs in #353
- feat(ml): AI segmentation toolbox via SamGeo/SAM3 (#301) by @giswqs in #355
- feat(ingestion): warn before loading very large vector files (#339) by @giswqs in #357
- feat(map): client-side vector tiling for large local vector layers by @giswqs in #356
- perf(history): bound undo memory for large vector layers (#341) by @giswqs in #358
- feat(python): local raster, marker/cluster, and choropleth APIs (#348) by @giswqs in #360
- feat(geocoding): multi-provider geocoding abstraction (#346) by @giswqs in #361
- feat(raster): client-side raster processing fallback (no sidecar) by @giswqs in #359
- feat(geocoding): surface Google CORS hint and broaden API-key warning by @giswqs in #363
- feat(processing): add Spatial Statistics toolbox (#342) by @giswqs in #362
- feat(python): typed read-back of selected/drawn features and to_html export by @giswqs in #365
- test(map): add unit tests for MapController layer reconciliation by @giswqs in #364
- feat(processing): batch run and model/pipeline chaining (#344) by @giswqs in #367
- feat(python): split_map, add_legend, and add_colorbar helpers (#347) by @giswqs in #366
- fix(python): address review feedback on split_map/add_legend/add_colorbar by @giswqs in #369
- test(processing): shared golden fixtures for the vector engines (#352) by @giswqs in #368
- refactor(add-data): split AddDataDialog into per-source components (#350) by @giswqs in #371
- refactor(desktop): split TopToolbar god-component into menus and hooks (#350) by @giswqs in #372
- test(pwa): raise per-test timeout for offline shell boot by @giswqs in #370
- chore(release): v1.3.0 — version bump and docs update by @giswqs in #373
- chore(deps): bump maplibre-gl-streetview to ^0.6.0 by @giswqs in #374
- chore: coverage reporting + backend CRS-logging and type hardening by @giswqs in #375
- feat(desktop): make attribute table on-demand, hidden by default by @giswqs in #378
- feat(android,pwa): native Android build + offline caching + region download by @giswqs in #377
- chore(deps): bump maplibre-gl-3d-tiles to ^0.5.1 by @giswqs in #380
- fix: resolve raster blob fetch, gpkg thread crash, and invisible non-Web-Mercator COGs (#376) by @giswqs in #379
- perf(desktop): CDN-load the CereusDB wasm to shrink the build by ~9 MB by @giswqs in #381
- fix(gpkg): repair case-mismatched and non-ASCII gpkg_ogr_contents rows (#376 follow-up) by @giswqs in #382
New Contributors
Full Changelog: v1.2.0...v1.3.0