What's Changed
- docs: add a Become a Sponsor page by @giswqs in #1732
- fix(ios): raise the deployment target to iOS 15.0 by @giswqs in #1731
- docs: add DeepWiki badge for automatic wiki updates by @anjishnuHyperworks in #1733
- fix(layers): give empty groups a real position so groups can be reordered by @giswqs in #1741
- fix(catalog): merge Source Cooperative product records field-by-field so no enrichment is lost by @Ayush7614 in #1738
- fix(layers): keep nested groups in order and movable inside their parent by @giswqs in #1744
- feat(python): add an MCP server for authoring GeoLibre projects by @giswqs in #1734
- fix(arcgis): page large FeatureServer layers instead of one unbounded query by @giswqs in #1747
- fix(layers): apply group opacity to vector controls by @giswqs in #1750
- fix(conversion): stop discarding the reason a browser conversion failed by @giswqs in #1748
- feat(i18n): add Persian language support (fa.json) by @itsmadson in #1737
- feat(arcgis): add MapServer and ImageServer support to Add Data by @giswqs in #1751
- Enable topological polygon digitizing by @giswqs in #1752
- feat(collaboration): portable snapshots and navigable map comments by @giswqs in #1753
- docs(comparison): add a CARTO column by @srtena in #1760
- feat(ui): add app typeface and a real dark-mode elevation ladder by @giswqs in #1754
- i18n(fa): Refine Persian translations for GIS terminology and UI read… by @arazshah in #1758
- feat(ui): codify map-floating glass, theme-aware shadows, tighter radius by @giswqs in #1764
- fix(vector): stop a failed restore from deleting multi-layer URL layers by @giswqs in #1761
- Support projected GeoParquet CRS overrides by @giswqs in #1766
- fix(arcgis): load feature services by viewport by @giswqs in #1765
- Fix GitHub Pages preview propagation failures by @giswqs in #1767
- docs: point contributors at geolibre-assets for images and demos by @giswqs in #1768
- docs: add comprehensive format reference and source code deep-dive tu… by @lby0102 in #1763
- chore(deps): bump dompurify to 3.4.13; re-verify the image-size allowlist by @giswqs in #1769
- feat(python): expand layer management and headless camera API by @giswqs in #1770
- Document the GeoLibre R package by @giswqs in #1771
- fix(python): trim Layer.source redaction cost and document save_project by @giswqs in #1772
- Highlight the R and Python packages by @giswqs in #1773
- feat: add a panels=collapsed embed layout option by @giswqs in #1774
- feat: open the Style panel only when explicitly requested by @giswqs in #1775
- feat(python): run Whitebox tools from the Jupyter widget by @giswqs in #1777
- fix(print-layout): match proportional legend sizes to map by @giswqs in #1779
- feat(i18n): use Vazirmatn font for Persian locale by @RMA1313 in #1781
- Fix categorized styling for marker icons by @giswqs in #1782
- fix(print-layout): improve atlas feature framing by @giswqs in #1783
- fix(print-layout): preserve graticule label visibility by @giswqs in #1785
- docs(comparison): frame GeoLibre and QGIS as complementary by @giswqs in #1787
- docs(python): document marimo workaround by @giswqs in #1788
- feat(arcgis): browse MapServer sublayers by @giswqs in #1789
- i18n: bring all 17 locale catalogs to 100% key coverage by @giswqs in #1790
- fix(print-layout): refine atlas table filtering by @giswqs in #1791
- docs: link hero screenshots and move media to assets.geolibre.app by @giswqs in #1792
- feat(print-layout): add intersecting page filter by @giswqs in #1794
- feat(url): open remote data and styles with ?data= and ?style= by @giswqs in #1795
- Fix browser OSM vector downloads by @giswqs in #1797
- fix(recovery): stop the crash-recovery prompt firing on every visit by @giswqs in #1798
- fix(recovery): harden session parsing and cover cross-tab liveness by @giswqs in #1799
- Fix mobile style panel scrolling by @giswqs in #1802
- Fix oval Whitebox vector buffers by @giswqs in #1801
- docs: use raw URLs in the embedding data/style examples by @giswqs in #1803
- Fix Android style file selection by @giswqs in #1806
- docs: add a self-hosting and private data guide by @giswqs in #1808
- Add native startup project preferences by @giswqs in #1810
- i18n: translate the startup project and ArcGIS sublayer strings by @giswqs in #1811
- Share-readiness check: warn when a shared project references data recipients cannot load by @giswqs in #1812
- Do not flag embedded deck.gl rows as unloadable in the share-readiness check by @giswqs in #1823
- Show terrain elevation under the cursor in the status bar (#1813) by @giswqs in #1820
- Populate the elevation readout when the toggle is switched on by @giswqs in #1828
- Show camera altitude ("Eye alt") in the status bar (#1816) by @giswqs in #1821
- Report heading and compass point in the Measure tool (#1817) by @giswqs in #1822
- Report the pointer coordinate in DD, DMS, DDM or UTM (#1814) by @giswqs in #1824
- Chart a spectral profile for multiband GeoTIFF, not just NetCDF (#1818) by @giswqs in #1825
- Add an interactive viewshed from a clicked map point (#1815) by @giswqs in #1826
- Bump geolibre-wasm to 1.5.0 and add its new tools to the menu catalog by @giswqs in #1830
- docs: document the new map readouts, quick analysis, and startup preference by @giswqs in #1831
- Write embedded GeoJSON compactly when saving a project (#1829) by @giswqs in #1832
- fix(assistant): stop OpenAI SDK telemetry headers from failing the CORS preflight by @giswqs in #1836
- fix: save a project opened from Android document storage (#1833) by @giswqs in #1837
- feat(storymap): clickable Google Maps pins in the PDF handout by @giswqs in #1840
- feat: add optional Clerk access gate by @giswqs in #1841
- Add secure disaster news proxy support by @giswqs in #1838
- ci: deploy studio.geolibre.app on every push to main by @giswqs in #1842
- chore(deps): bump the actions-minor-patch group with 2 updates by @dependabot[bot] in #1845
- Add GEOLIBRE_DUCKDB_WASM_CDN to load DuckDB-WASM from jsDelivr by @giswqs in #1844
- chore(deps): bump the npm-minor-patch group with 45 updates by @dependabot[bot] in #1846
- fix(studio): build the JupyterLite site into studio.geolibre.app by @giswqs in #1848
- fix(docker): publish the OPERA news endpoint where the plugin reads it by @giswqs in #1849
- Allow the opera.geolibre.app origin on the AI proxy by @giswqs in #1850
- fix(docker): build and serve JupyterLite in the official image by @giswqs in #1852
- Add an optional Auth0 sign-in gate alongside Clerk by @giswqs in #1853
- fix(geolens): request MVT attribute columns so tile layers keep their fields by @giswqs in #1857
- docs: link the GeoLibre + GeoLens video tutorial by @giswqs in #1858
- docs: link the GeoLibre + GeoLens video in the README by @giswqs in #1859
- docs: correct the Whitebox per-category tool counts by @giswqs in #1860
- fix(sidecar): append explicit unit 'degrees' to simplify result message by @RohithPariki in #1861
- fix(maplibre-geo-editor): restore the text_marker mode textarea's appearance and stacking by @KWangechi in #1864
- i18n: add Vietnamese (vi) locale by @nguyenloki258 in #1863
- feat(terrain): allow a COG DEM as the 3D terrain source by @giswqs in #1862
- i18n: translate the auth gate strings and fill the Vietnamese gaps by @giswqs in #1865
- fix(collab): ship the relay image's runtime dependencies by @giswqs in #1867
- fix(csv): stop a large delimited-text import from exhausting the renderer heap by @giswqs in #1868
- docs(ios): GeoLibre is on the App Store by @giswqs in #1869
- feat(basemap): add a Regional section with China basemaps to both pickers by @giswqs in #1871
- fix(raster): pick up the NaN nodata fix for Windows D3D11 by @giswqs in #1872
- feat(basemap): remember the selected basemap by @giswqs in #1873
- fix(map): silence noisy MapLibre fallbacks by @giswqs in #1874
- fix(web): avoid optional admin profile 404 by @giswqs in #1876
- Add remote data through the embed API by @giswqs in #1875
- fix(html-export): add sandbox attribute to restrict iframe permissions by @giswqs in #1878
- feat(embed): support hiding the top toolbar by @giswqs in #1881
- feat(build): add GEOLIBRE_NO_EXTERNAL_CDN flag to disable external CDN by @giswqs in #1880
- Fix Background pass claiming rebuilt vector render layers by @giswqs in #1883
- fix(map): auto show/hide the Maptoolkit logo and use the official mark by @muesliq in #1885
- fix: guard metric operations against antimeridian projection distortion by @RohithPariki in #1884
- implement collaboration upgrade proposals by @HarshShinde0 in #1856
- i18n: translate the collaboration moderation and no-CDN strings across all 18 locales by @giswqs in #1886
- feat: expose read-only layer queries to external plugins by @Jihkk in #1784
- fix(plugins): keep the plugin query tests off the plugin registry by @giswqs in #1888
- chore(release): v2.6.0 by @giswqs in #1887
New Contributors
- @anjishnuHyperworks made their first contribution in #1733
- @itsmadson made their first contribution in #1737
- @srtena made their first contribution in #1760
- @arazshah made their first contribution in #1758
- @lby0102 made their first contribution in #1763
- @RMA1313 made their first contribution in #1781
- @KWangechi made their first contribution in #1864
- @nguyenloki258 made their first contribution in #1863
- @muesliq made their first contribution in #1885
- @Jihkk made their first contribution in #1784
Full Changelog: v2.5.0...v2.6.0