What's Changed
- feat(server-api): per-org security policy (1/3) by @deniial00 in #2788
- plugins: move Hugging Face, Mapillary and God's Eye View tokens to app.credentials by @deniial00 in #2793
- feat: load deployment.json before first paint (#2783 part 2) by @deniial00 in #2795
- docs: list S3 Browser deep link; ci: allowlist unpatched node-forge advisory by @giswqs in #2798
- fix(processing): open the file picker for LiDAR tool inputs by @giswqs in #2799
- feat: add a Map Preferences option to disable zoom to new layers by @giswqs in #2800
- feat(server-api): per-org OIDC federation and trusted-header proxy sign-in (2/3) by @deniial00 in #2796
- feat(plugins): add USGS Elevation (DEM) plugin by @andyrich in #2797
- feat(docker): generate validated deployment.json at boot (#2783 part 3) by @deniial00 in #2801
- fix(share): copied feedback and Open button on Active Shares rows by @deniial00 in #2806
- feat(server-api): add /api/shares with link role, expiry, and password by @deniial00 in #2807
- feat(desktop): config-dir deployment.json delivery (#2783 part 4) by @deniial00 in #2811
- fix(desktop): ask before closing a window with unsaved changes by @giswqs in #2812
- feat(server-api): SCIM 2.0 user and group provisioning (3/3) by @deniial00 in #2810
- feat(plugins): dock USGS LiDAR panel under Web Services by @giswqs in #2813
- feat(plugins): dock Historical Imagery, Timelapse, Overture, Basemaps panels by @giswqs in #2814
- feat(plugins): drop Time Slider submenu, list Web Services above Basemaps by @giswqs in #2815
- feat(controls): move Layer Control to top of Controls menu by @giswqs in #2816
- feat(docker): enforce sidecar and AI deployment policy (Part 5) by @deniial00 in #2817
- feat(plugins): expose host proj4 to external plugins by @deniial00 in #2824
- fix: use MapLibre's built-in RTL shaping for Kurdish labels by @giswqs in #2827
- fix(desktop): save projects with a reopenable extension and clarify the read error by @giswqs in #2828
- fix(plugins): keep docked plugins active across a renderer swap by @giswqs in #2832
- feat(plugins): let ?plugin= open registry plugins behind a trust prompt by @giswqs in #2831
- fix(plugins): offer a registry release as an update instead of failing the pinned plugin by @giswqs in #2835
- feat(plugins): let registry plugins keep project state through credential stripping by @giswqs in #2836
- Fix desktop layer reordering with pointer capture by @deniial00 in #2839
- feat(plugins): dock GeoAgent in the side panel and follow the dark theme by @giswqs in #2841
- feat(export): export 3D-extruded layers as glTF, OBJ, or STL models by @giswqs in #2838
- feat(python): drive the open desktop map from geolibre-mcp by @Amanpatni211 in #2829
- fix(basemaps): dark-theme dropdowns and "All categories" label by @giswqs in #2842
- feat(plugins): enforce deployment plugin policy (Part 6) by @deniial00 in #2818
- fix(plugins): report the native fetch error instead of the webview's by @giswqs in #2843
- fix(deps): patch brace-expansion, fast-uri and ip-address advisories by @giswqs in #2844
- feat: expose WFS layer API to plugins by @deniial00 in #2826
- feat(plugins): dock Layer Swipe in the side panel and follow the dark theme by @giswqs in #2845
- feat(plugins): sort the Web Services submenu alphabetically by @giswqs in #2846
- feat(plugins): dock the Elevation Profile in the side panel by @giswqs in #2847
- feat(plugins): group submenu plugins above Basemaps in the Plugins menu by @giswqs in #2849
- feat(plugins): give desktop plugins a native fetch with a cookie jar by @giswqs in #2848
- feat(plugins): group external plugins in a Plugins → Installed submenu by @giswqs in #2851
- feat(plugins): let plugins add items to the built-in toolbar menus by @giswqs in #2852
- feat(plugins): let users move a plugin's menu out of the toolbar by @giswqs in #2853
- feat(layers): show a service layer's source in its Metadata dialog, and let plugins add metadata by @giswqs in #2856
- ci: add job timeouts and split the CI gate into parallel jobs by @giswqs in #2859
- fix(plugins): close credential-store reads before external plugins load by @giswqs in #2861
- feat(history): show when autosave is paused for a large project by @giswqs in #2860
- ci: type-check the test suite with an error-count ratchet by @giswqs in #2862
- feat(plugins): verify registry installs and updates against the published bundle hash by @giswqs in #2857
- refactor(processing): extract and test ProcessingDialog parameter helpers by @giswqs in #2863
- refactor(plugins): build the six DGGS grid plugins from one factory by @giswqs in #2865
- refactor(settings): split SettingsDialog into per-section components by @giswqs in #2866
- refactor(plugins): move the plugin app API out of usePlugins.ts by @giswqs in #2864
- refactor(map): move shared engine helpers into neutral modules and lint the boundary by @giswqs in #2868
- test: contract tests for hand-mirrored upstream internals by @giswqs in #2867
- feat(raster): interactive histogram for the display stretch by @giswqs in #2871
- refactor(map): gate UI on engine capabilities, not renderer names by @giswqs in #2874
- fix(desktop): pin the CSP's jsDelivr script-src to versioned paths by @giswqs in #2875
- feat(coordinates): MGRS/USNG and any-EPSG coordinate readouts, grid-reference search by @giswqs in #2872
- build: ship h5wasm once and report bundle sizes in CI by @giswqs in #2870
- refactor(toolbar): split TopToolbar state into hooks and lazy dialogs by @giswqs in #2877
- test(e2e): fix the blend-modes flake and widen the per-commit gate by @giswqs in #2876
- ci(coverage): ratchet large modules that no test loads; lower lint cap to 242 by @giswqs in #2880
- refactor(map): declare each engine's supported layer kinds by @giswqs in #2881
- feat: color vision preview and starter projects in New Project by @giswqs in #2884
- feat(history): compare project snapshots and restore single layers by @giswqs in #2882
- feat(app): unified notify() toasts with Report issue by @giswqs in #2885
- feat(palette): reach individual tools and simplify the interface by @giswqs in #2883
- fix(identify): send WMS GetFeatureInfo in the layer's CRS by @aborruso in #2889
- feat(plugins): honor the plugin registry's blocklist by @giswqs in #2873
- feat(i18n): complete the catalogs and let plugins ship translations by @giswqs in #2893
- fix(a11y): un-nest layer rows and broaden the axe sweep by @giswqs in #2895
- feat(analysis): interactive line of sight between two map points by @giswqs in #2894
- perf(processing): move GeoJSON materialization and Turf tools off the main thread by @giswqs in #2897
- docs: generated plugin reference and deeper user guide pages by @giswqs in #2891
- feat(python): author filters, labels, plugin state and story maps; live processing in MCP by @giswqs in #2892
- fix(i18n): report missing translations instead of failing by @giswqs in #2901
- feat(identify): skip WMS layers marked queryable="0", show WMS exceptions as errors by @aborruso in #2890
- feat(identify): read WMS GetFeatureInfo HTML tables into fields by @aborruso in #2896
- fix(netcdf): place 0-360 grids and keep a local time axis selectable by @giswqs in #2909
- refactor(sidecar): extract shared database helpers by @deniial00 in #2903
- fix(processing): correct path, filter, output-name and LAZ heuristics by @giswqs in #2905
- chore: pin the web CSP's jsDelivr paths and tighten loose types by @giswqs in #2906
- feat(graticule): MGRS/USNG grid overlay and grid references in Set View by @giswqs in #2907
- fix(map): grid label font, Overture backfill on Mapbox, Maptoolkit logo by @giswqs in #2910
- feat(notify): layer failure toasts on Cesium/ArcGIS, tile health, and notify follow-ups by @giswqs in #2911
- perf(processing,map): cancel vector tool runs, slimmer warm Turf worker, tile large layers on a worker by @giswqs in #2912
- fix(app): app-UI follow-ups (language-pack race, palette memo/commands, vector panel race, focus, autosave indicator) by @giswqs in #2908
- feat(layers): editable layer metadata with STAC Item export by @giswqs in #2904
- docs: document deployment policy cutover by @deniial00 in #2900
- docs(privacy): describe the plugin registry's anonymous usage counts by @giswqs in #2915
- fix(web): ship a null deployment.json stub so static hosts don't 404 by @giswqs in #2917
- fix(plugins): activate installed registry plugins from ?plugin= in layout=viewer by @deniial00 in #2914
- feat(sidecar): editable SQL Server / Azure SQL data source by @deniial00 in #2913
- test(e2e): move four feature specs and registry deep-link flows to nightly by @giswqs in #2918
- fix(web): read BASE_URL inline so subpath builds fetch deployment.json by @giswqs in #2919
- ci(preview): smoke-test each deployed PR preview for a clean console by @giswqs in #2922
- fix(web): Open Recent for saved projects by @deniial00 in #2924
- feat(desktop): SQL Server / Azure SQL Add Data source (part 3a, #2802) by @deniial00 in #2920
- ci: consolidate PR checks behind a single "CI passed" gate by @giswqs in #2927
- fix(map): keep the Identify crosshair on the canvas container after camera moves by @giswqs in #2933
- fix: cross-cutting review findings (proxy IP, OIDC, GML, S3, antimeridian, EE OAuth) by @deniial00 in #2926
- fix(cesium): stop terrain correction pulling flights back to the seed view by @giswqs in #2931
- feat(desktop): SQL Server save-back and Browser panel (part 3b, #2802) by @deniial00 in #2928
- test(e2e): unload map pages before disposing each test's context (#2879) by @giswqs in #2937
- fix: UTM grid zone exceptions, grid redraw after basemap swap, metadata discard prompt, chunked autosave by @giswqs in #2938
- feat(identify): Edit geometry and Edit attributes on Identify results by @giswqs in #2935
- feat(s3): open projects from the S3 browser by @giswqs in #2939
- feat(s3): keep the S3 Browser open across project loads, open it at startup by @giswqs in #2941
- i18n: fill missing keys in all locale catalogs by @giswqs in #2940
- chore(release): v3.3.0 by @giswqs in #2942
New Contributors
- @Amanpatni211 made their first contribution in #2829
Full Changelog: v3.2.0...v3.3.0