多端地理空间数据分析平台
为GeoLibre打分
给出您宝贵的评分:
手机端可长按上方图片保存到相册,或点击「下载/分享」分享到微信
使用 GeoLibre,你可以:
云原生轻量GIS平台,浏览器、桌面、移动端、Jupyter均可运行,实现地理数据可视化、探索与分析。
用户评论 (0)
2026年07月02日
2026年06月22日
2026年06月17日
2026年09月09日
2026年09月08日
2026年09月08日
2026年09月07日
2026年09月07日
2026年09月04日
2026年09月04日
v2.9.0
2026年09月03日
This release landed 53 pull requests from 10 contributors plus Dependabot, and 6 people made their first contribution to GeoLibre. Thank you all.
What's Changed
- fix: restore Windows sidecar connectivity by @giswqs in #2133
- fix(linux): improve Nvidia WebKit frame pacing by @giswqs in #2135
- feat: add DashMap support for Plotly Dash by @andyrich in #2136
- fix(style-import): keep a stack whose class layer names no colour, per the spec default (#2125) by @clintonlunn in #2126
- Add Vantor Open Data as a built-in Web Services plugin by @giswqs in #2138
- Add full annotation layer editing by @giswqs in #2144
- docs: add Maptitude vs GeoLibre to comparisons hosted elsewhere by @Maptitude in #2147
- Improve identify across visible vector and raster layers by @giswqs in #2146
- fix(field-collection): make the quick-open pill dismissable via a session by @giswqs in #2145
- Clarify background controls and add Blank styling by @giswqs in #2148
- fix(field-collection): let the session own an auto-resolved capture target by @giswqs in #2149
- feat: enforce deployment capabilities for kiosk/classroom modes (#1673) by @RohithPariki in #2143
- feat(core): implement application capability model and store slice (#1672) by @RohithPariki in #2097
- Fix remote zipped Shapefiles in the web app by @giswqs in #2160
- fix(python): list raster style layer ids in swipe sides by @aborruso in #2155
- Keep click selection active for multiple features by @giswqs in #2157
- Open dropped GeoLibre project files by @giswqs in #2159
- Open GeoLibre projects from the desktop by @giswqs in #2163
- fix(swipe): resolve project layer ids to style layer ids on load by @giswqs in #2162
- feat(geoparquet): parse the full geo metadata block, native logical-type CRS, and lon/lat tables by @gsueur in #2156
- Fix marker styles when loading partial project styles by @giswqs in #2165
- feat: add Planet Open Data plugin by @giswqs in #2167
- feat: dock first web service panels by @giswqs in #2168
- fix: route desktop WMS tiles through native fetch by @giswqs in #2169
- fix: prevent photo imports from blocking desktop startup by @giswqs in #2171
- fix: prevent map flash during window resize by @giswqs in #2173
- fix: persist terrain control in projects by @giswqs in #2175
- docs(downloads): clarify iOS release IPA by @dajiaohuang in #2177
- fix(flight-simulator): bank camera in aircraft direction by @Craun718 in #2192
- chore(deps): bump anthropics/claude-code-action from 1.0.200 to 1.0.210 in the actions-minor-patch group by @dependabot[bot] in #2195
- chore(deps): bump actions/setup-java from 5 to 6 by @dependabot[bot] in #2196
- chore(deps): bump flate2 from 1.1.9 to 1.1.10 in /apps/geolibre-desktop/src-tauri in the cargo-minor-patch group by @dependabot[bot] in #2193
- chore(deps): keep bincode on 1.x and stop Dependabot major bumps by @giswqs in #2199
- chore(deps): bump the npm-minor-patch group with 28 updates by @dependabot[bot] in #2197
- fix: preserve map frame through resize by @giswqs in #2201
- fix: default map sharing to public by @giswqs in #2202
- feat: add keyless global DEM downloader by @giswqs in #2203
- fix: stabilize Android GPS readings by @giswqs in #2204
- 3D globe: offer the pane without a Cesium Ion token and render the store basemap on it by @giswqs in #2205
- 3D globe: place the camera against terrain, not the ellipsoid, so the panes stay in scale by @giswqs in #2207
- fix: load rasters with large TIFF metadata by @giswqs in #2209
- 3D globe: build a bare CesiumWidget, import the engine directly, and smoke-test the globe by @giswqs in #2208
- fix(assistant): keep conversation history across turns by @Barbhuiya12 in #2211
- fix(tests): make the local quality gate pass off Linux by @Barbhuiya12 in #2214
- fix(python): declare the widget front-end as ESM for Node by @Barbhuiya12 in #2215
- i18n: fill the 78 keys the identify, Vantor, and Cesium features left behind by @giswqs in #2219
- chore(release): v2.9.0 by @giswqs in #2220
New Contributors
- @andyrich made their first contribution in #2136
- @Maptitude made their first contribution in #2147
- @aborruso made their first contribution in #2155
- @gsueur made their first contribution in #2156
- @dajiaohuang made their first contribution in #2177
- @Barbhuiya12 made their first contribution in #2211
Full Changelog: v2.8.0...v2.9.0
详细ChangeLogv2.8.0
2026年08月27日
What's Changed
- chore: ignore Android Gradle cache by @Craun718 in #2050
- Mirror release downloads to GitHub Pages by @giswqs in #2052
- Omit maintainer-only MSIX from download mirror by @giswqs in #2053
- Hide AppImage update metadata from download mirror by @giswqs in #2054
- Document and brand the GeoLibre download mirror by @giswqs in #2055
- Migrate web.geolibre.app to GitHub Pages by @giswqs in #2056
- Cut web.geolibre.app over from Workers to Pages by @giswqs in #2058
- Remove web.geolibre.app from the viewer Worker by @giswqs in #2060
- feat: maximize the Model Builder panel by @giswqs in #2061
- fix: support assets on static STAC collections by @giswqs in #2066
- feat: add interactive SamGeo segmentation plugin by @giswqs in #2063
- fix: repair nested ArcGIS polygon rings by @giswqs in #2069
- fix: preserve attribute rows on portrait phones by @giswqs in #2070
- feat(i18n): localize processing tools in Simplified Chinese by @Craun718 in #2049
- Preserve KML folder structure on import by @giswqs in #2074
- Fix raster calculator values and discrete styling by @giswqs in #2071
- feat: add optional Google Analytics to the hosted sites by @giswqs in #2076
- fix: read the GA measurement ID from a secret as well as a variable by @giswqs in #2077
- feat: implement per-layer capabilities and ui/backend enforcement (#1674) by @RohithPariki in #2051
- i18n: complete every locale catalog (SamGeo, Whitebox, language packs) by @giswqs in #2078
- docs: ship an agent skill for driving GeoLibre from an external agent by @giswqs in #2081
- Add configurable startup map view by @giswqs in #2083
- feat: add per-layer cartographic blend modes (#1981) by @giswqs in #2082
- feat (npm_package): pack core and map into npm package by @kongdd in #2084
- feat: add Earth Engine layers to Python API by @giswqs in #2085
- fix: install MapLibre transform compat on the headless entry by @kongdd in #2088
- feat: add GPT-native disaster search route by @giswqs in #2090
- feat: show basemap thumbnails in the Basemaps panel by @kongdd in #2089
- fix(add-data): gate PostgreSQL on the desktop runtime, not just Tauri by @giswqs in #2092
- fix: keep MCP tool errors readable under the mcp 2.1 SDK by @giswqs in #2095
- fix: read the source CRS of a GeoParquet from its
geometadata by @giswqs in #2094 - fix: keep the desktop renderer alive on x86-64 CPUs without AVX by @giswqs in #2093
- fix: load exported HTML projects from local files by @giswqs in #2096
- feat: make annotation toolbar collapsible by @giswqs in #2098
- chore(deps): bump anthropics/claude-code-action from 1.0.193 to 1.0.200 in the actions-minor-patch group by @dependabot[bot] in #2099
- fix: improve dark theme destructive contrast by @giswqs in #2102
- chore(deps): bump the npm-minor-patch group with 25 updates by @dependabot[bot] in #2100
- fix: render big-endian Float64 COGs by @giswqs in #2106
- docs: add a Video Tutorials page by @giswqs in #2107
- feat: support xarray raster layers in Python API by @giswqs in #2105
- fix: proxy local raster URLs in Colab by @giswqs in #2108
- fix(macos): embed local vectors in App Store projects by @giswqs in #2109
- Export GeoEditor sketches as a project layer by @giswqs in #2111
- feat(layers): show a tiled archive as a group of its source layers by @clintonlunn in #2065
- docs: correct the user guide against the running app and add screenshots by @giswqs in #2112
- docs: split the maintenance notes out of CLAUDE.md by @giswqs in #2120
- Fix Ollama model discovery and chat UUIDs by @giswqs in #2118
- Popup and tooltip designer: choose what a viewer sees on hover and click by @giswqs in #2119
- Fix opaque analytics responses in diagnostics by @giswqs in #2123
- feat(layers): search the loaded layers' attributes from the search box by @giswqs in #2121
- feat(layers): quick filters, data-driven filter controls per layer by @giswqs in #2122
- feat(statistics): composite score builder for suitability and index analysis by @giswqs in #2124
- fix(raster): restore WASM metadata and previews by @giswqs in #2127
- Fix Ollama LAN origin error guidance by @giswqs in #2128
- i18n: fill the 136 keys missing from every non-English catalog by @giswqs in #2129
- fix(build): keep build-machine credentials out of redistributable builds by @giswqs in #2130
- chore(release): v2.8.0 by @giswqs in #2131
New Contributors
Full Changelog: v2.7.0...v2.8.0
详细ChangeLogv2.7.0
2026年08月22日
What's Changed
- fix(ci): re-measure a line-only coverage shortfall before failing by @giswqs in #1890
- ci: attach mobile and Mac App Store builds to published releases by @giswqs in #1891
- feat(postgis): select geometry columns by @giswqs in #1893
- chore(deps): bump maplibre-gl-raster to 0.14.7 by @giswqs in #1896
- chore(deps): bump maplibre-gl to 6.3.0 by @giswqs in #1510
- feat(style): drive geometry-generator size and buffer distance by an attribute by @giswqs in #1894
- fix(processing): project multiple ring buffers by @NgoQuocViet2001 in #1900
- docs(comparison): close the tables to new columns by @giswqs in #1908
- Add Excel XY point-layer import by @giswqs in #1906
- fix(deps): preserve vectors across basemap swaps by @giswqs in #1907
- fix(import): group project-import warnings by reason by @giswqs in #1910
- fix(import): consult the .gdb workspace suffix only as a last resort by @giswqs in #1911
- fix(toolbar): size the Project and Add Data menus to their content by @giswqs in #1914
- fix(menu): disambiguate the Whitebox catalog's "GeoLibre" subcategory by @giswqs in #1913
- fix(ui): keep dropdown submenus on screen on narrow viewports by @giswqs in #1915
- fix(ui): let a submenu keep a wider min-width floor by @giswqs in #1919
- fix(processing): make the Whitebox toolbox usable on a narrow panel by @giswqs in #1917
- fix(processing): honor a tool's recommended output extension over the… by @Ahmedseko in #1901
- fix(raster): render JPEG COGs with the WASM engine by @giswqs in #1920
- Fix Layer Swipe for restored raster projects by @giswqs in #1923
- fix(layers): enable Android panel scrolling by @giswqs in #1924
- fix(stac): page static catalog searches instead of reporting page size as total by @clintonlunn in #1918
- fix(plugins): exempt bundled drop-ins from remote-bundle SHA-256 pinning by @davidzha712 in #1926
- fix: guard large GeoTIFF COG conversions by @giswqs in #1925
- docs(processing): explain the two toolboxes and fix stale menu paths by @giswqs in #1929
- Support multiple data URL query parameters by @giswqs in #1930
- fix(legend): show derived geometry by @giswqs in #1931
- Add Chrome extension for opening webpage datasets by @giswqs in #1932
- Preserve text field types in attribute summaries by @giswqs in #1937
- fix(print-layout): compact mixed legend rows by @giswqs in #1939
- fix(layout): persist Browser and Comments panel toggles by @giswqs in #1940
- Fix repeated project save prompts by @giswqs in #1938
- feat(layers): add Style panel button to layer cards by @giswqs in #1944
- Fix heatmap and cluster layer ordering by @giswqs in #1943
- feat(stac): browse a static catalog as a tree and search from what you pick by @clintonlunn in #1945
- feat(core): add automatic feature editor tracking (#1677) by @RohithPariki in #1897
- fix(chrome-extension): resolve Hugging Face file URLs by @giswqs in #1947
- fix(android): reopen the startup project after the app process restarts (#1948) by @giswqs in #1949
- feat(elevation): profile selected line features by @giswqs in #1954
- fix(style): preserve Mapbox color classes by @giswqs in #1957
- feat(map): select features by drawing on the map by @giswqs in #1956
- fix(processing): close polygon rings in Polygons To Lines by @giswqs in #1960
- fix(map): allow grabbing the map during inertial pan by @mfkj8866 in #1961
- Fix startup project projection initialization by @giswqs in #1962
- i18n: fill 14 missing keys across all 18 locale catalogs by @giswqs in #1963
- fix(qgis): ignore Print Layout legend trees when importing a project by @giswqs in #1965
- feat(stac): add PMTiles assets to the map by @clintonlunn in #1950
- feat(chrome-extension): detect geospatial services by @giswqs in #1967
- fix(chrome-extension): keep background.mjs a text file by @giswqs in #1969
- fix(stac): make disabled panel buttons look disabled by @giswqs in #1974
- fix(stac): label asset formats in search results by @giswqs in #1975
- fix(processing): preserve dissolve attribute groups by @giswqs in #1978
- feat(stac): add GeoParquet assets to map by @giswqs in #1976
- fix(dxf): recode TEXT from $DWGCODEPAGE after ST_Read by @mfkj8866 in #1979
- docs: link the published Chrome Web Store listing by @giswqs in #1989
- fix(desktop): capture timer refs inside LayerPanel unmount effect by @aoright in #1988
- chore(deps): bump geotiff-geokeys-to-proj4 from 2024.4.13 to 2026.8.13 by @dependabot[bot] in #1987
- chore(deps): bump the npm-minor-patch group with 24 updates by @dependabot[bot] in #1986
- chore(deps): bump anthropics/claude-code-action from 1.0.189 to 1.0.193 in the actions-minor-patch group by @dependabot[bot] in #1985
- chore(deps): bump rusqlite from 0.40.1 to 0.40.2 in /apps/geolibre-desktop/src-tauri in the cargo-minor-patch group by @dependabot[bot] in #1984
- fix(desktop): save the Print Layout composer in the project by @giswqs in #1994
- fix(desktop): scrub Print Layout blocks when their layer is deleted by @giswqs in #1995
- fix(planetary): correct measurements, buffers, and circles off Earth by @giswqs in #1993
- fix(stac): reach planetary catalogs and pick the COG engine by @giswqs in #1996
- fix(processing): let Whitebox Dissolve take a grouping field by @giswqs in #1997
- fix(charts): allow explicit category and value fields by @giswqs in #2001
- Let /tavily be served by a model's own web search by @giswqs in #2003
- Fix Source Cooperative tag detection by @giswqs in #2006
- Preserve globe projection for COG deep links by @giswqs in #2007
- Default the AI proxy to GPT-5.6 Luna and send chats on Enter by @giswqs in #2008
- fix(chrome): find map services without broad host permissions by @giswqs in #1998
- fix(collab): allow hosted app origins by @giswqs in #2011
- feat(processing): ArcGIS-style Model Builder canvas by @giswqs in #1983
- Label a tool's input port even when it has only one by @giswqs in #2012
- feat: load shared desktop settings from URL by @giswqs in #2017
- feat(assistant): create Model Builder workflows by @giswqs in #2015
- Add selected feature statistics scope by @giswqs in #2018
- Add Copy Python script to Model Builder by @giswqs in #2019
- Add building massing authoring workflow by @giswqs in #2020
- Enable USGS LiDAR clip pipeline export by @giswqs in #2022
- feat(stac): add Zarr assets to the map by @clintonlunn in #2005
- Add support for Iceberg Tables as Vector Layer by @C-Loftus in #2023
- Make plugins and processing tools internationalizable by @giswqs in #2025
- i18n: fill all 18 locale catalogs to 100% coverage by @giswqs in #2027
- Fix raster calculator comparison outputs by @giswqs in #2033
- feat(stac): read Icechunk repositories through their own manifest by @clintonlunn in #2036
- feat: Encoded Polyline Encoder/Decoder Implementation by @takavi in #2030
- Fix embedded GeoPackage project restore by @giswqs in #2042
- Add ImageServer raster function browser by @giswqs in #2043
- fix(measure): add advanced precision tools by @giswqs in #2044
- feat(processing): add Merge layers tool with a multi-layer parameter picker by @Ayush7614 in #2028
- feat(processing): add Extract vertices and Points along geometry tools by @Ayush7614 in #2031
- fix: support multiple Whitebox dataset inputs by @giswqs in #2041
- fix(processing): count unwalkable features in the Points along geometry skip summary by @giswqs in #2045
- feat: implement activity log for shared projects and collaboration sessions by @RohithPariki in #2035
- Fix cumulative Time Slider rendering lag by @giswqs in #2047
- i18n: translate encoded polyline, ArcGIS raster function, and new vector tool strings in all 18 locales by @giswqs in #2046
- chore(release): v2.7.0 by @giswqs in #2048
New Contributors
- @NgoQuocViet2001 made their first contribution in #1900
- @Ahmedseko made their first contribution in #1901
- @clintonlunn made their first contribution in #1918
- @davidzha712 made their first contribution in #1926
- @mfkj8866 made their first contribution in #1961
- @aoright made their first contribution in #1988
- @C-Loftus made their first contribution in #2023
- @takavi made their first contribution in #2030
Full Changelog: v2.6.0...v2.7.0
详细ChangeLogv2.6.0
2026年08月14日
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
详细ChangeLogv2.5.0
2026年08月06日
GeoLibre is a free and open-source, lightweight, cloud-native GIS platform for visualizing, exploring, and analyzing geospatial data. It runs in the web browser, on the desktop, on mobile, and inside Jupyter notebooks, while keeping your data local and private.
v2.5.0 is about meeting you where your work already lives: open your QGIS and ArcGIS Pro projects directly, talk to your team on the map itself, explore hyperspectral imagery as a 3D cube, work in discrete global grids, and run sharing and live collaboration on your own server.
By the numbers
| Pull requests merged | 121 |
| Issues closed | 52 |
| Contributors | 14 (12 of them first-time contributors) |
Released 8 days after v2.4.0. Thank you to everyone who filed an issue, reviewed a PR, or sent a fix.
Live collaboration and commenting
This release turns collaboration from a live-session-only experiment into something a team can actually run and keep.
Anchored comments on a project (#1518, #1607). Pin a comment to any map location or to a specific feature, reply in a thread, resolve and reopen it, and delete it when it is done. Comments render as pins on the map with a dockable Comments panel beside them, so you can filter, jump to, and work through feedback without leaving the map. They are saved with the project, so a review conversation survives closing the app, and they travel with the .geolibre.json file to whoever you send it to. The panel is opt-in from Settings (#1638), so a solo project stays uncluttered.
Comments sync live. In a collaboration session, adding, replying, resolving, and deleting all fan out to every participant in real time, and respect the host's per-participant edit permissions. Comment mutations are validated and rate-limited on the relay (#1629), and comments, dashboard widgets, and legend entries are scrubbed when the layer they point at is removed (#1627), so a session cannot be poisoned by stale or oversized state.
Self-hostable sharing and collaboration (#1685, #1686, #1687, #1690). Sharing and live sessions no longer require Cloudflare or our hosted service. This release adds a documented projects and identity API with a FastAPI reference implementation, plus a plain Node collaboration relay, both Docker-deployable. A published web container can be pointed at your own endpoints at runtime, with no rebuild, which makes GeoLibre viable for classrooms, workshops, and organizations that cannot send project data off-premises. See Collaboration and the server API reference.
Credentials never leave with the project (#1680, #1702, #1704). Project credentials and per-layer connection records are redacted on every egress path (share, export, publish), so shared and self-hosted projects cannot leak a token that was only ever meant to sit on your machine.
Other highlights
- QGIS and ArcGIS Pro project import (#1562, #1637). Open a
.qgs,.qgz,.aprx, or.mapxand get the layers, nested groups, visibility, order, styling, and saved map view rebuilt in GeoLibre, with a per-layer report of anything that had to be skipped. - Discrete global grids (#1650, #1710). Three new DGGS plugins (A5, DGGRID, DGGAL) render and identify cells over the current view, joined by DGGS Generator, Binning, and Compact processing tools.
- Hyperspectral data you can read (#1708, #1713, #1719, #1723). Local NetCDF and HDF grids are colormapped in the browser and fitted to the camera, an RGB band combination is picked by wavelength, and a 3D image cube view renders the scene as a volume with draggable slice cuts.
- Spectral profiles from a click. Identify a pixel to chart its spectrum against wavelength, compare up to six sampled points marked on the map in their chart colors, and export as PNG or CSV.
- Smart styling on add (#1519, #1530, #1536). Every new layer arrives with its own color and geometry-appropriate sizing, a Style suggestions strip offers one-click renderers derived from the layer's own attributes, and vector-tile layers can now be classified by their tile attributes.
- Quick analysis (#1523). Buffer, centroids, convex hull, bounding box, and isochrones straight from the map right-click and layer menus, with defaults filled in and every run saved to Processing History.
- Autosave, crash recovery, and project history (#1522), plus project duplication and templates (#1528), an Elements panel for managing every annotation from one list (#1524), and a Layer Library that saves a configured layer for re-adding to any later project (#1520).
- Geocode a CSV at import time (#1526). Pick the address columns and each row is geocoded through your provider, with unmatched rows kept as null-geometry features so you can see and fix them.
- KML/KMZ throughout. KML and KMZ export (#1566), Super-Overlay import (#1598), preserved custom icons and formatted descriptions, and TIFF-backed ground overlays.
- Nested layer groups (#1589), multi-layer selection and group moves (#1610), and field-level visibility that hides attributes and excludes them on share and export (#1676).
- Typed embed SDK (#1525):
@geolibre/embed, a richer embed protocol, and a viewer embed preset. - Mobile and platforms. GeoLibre Desktop is now on the Mac App Store, Android GPS streams at the GNSS rate with precise accuracy and satellite count (#1554), and an NMEA receiver can be used as a position source.
- Internationalization. Thai joins the shipped locales, bringing all 16 non-English catalogs to 100% coverage.
What's Changed
- feat(style): classify vector-tile layers by tile attributes by @giswqs in #1536
- fix(ci): restore Claude PR review under subprocess env scrubbing by @giswqs in #1539
- docs: add the Google Play listing and refresh project status by @giswqs in #1545
- feat(processing): quick analysis from the map and layer menus by @giswqs in #1529
- feat(style): smart styling on add and a Style suggestions strip by @giswqs in #1530
- fix(ios): make the signed CI path work and document the real build recipe by @giswqs in #1546
- fix(mobile): correct the app name on iOS and collapse Style by default by @giswqs in #1551
- fix(ios): stamp a valid unique build number and declare export compliance by @giswqs in #1550
- fix(add-data): style the dialog's vector sources with initialLayerStyle by @giswqs in #1549
- fix(style): auto-fill proportional size range and show it in print legend by @dinesh-at-is in #1548
- feat(plugins): expose queryZarrLayer for click-to-value on native Zarr layers by @giswqs in #1557
- fix(ios): ship the real app icon instead of the Tauri placeholder by @giswqs in #1558
- fix(map): show a KMZ that spans the world instead of an empty globe by @giswqs in #1553
- feat(processing): pick a CRS from a searchable list on EPSG parameters by @giswqs in #1556
- feat: add project duplication, save as template, and open copy in gallery by @HarshShinde0 in #1532
- feat(print): support touch drag for print extent drawing by @Varshavia in #1533
- Display precise GPS accuracy and satellite count by @giswqs in #1559
- feat(processing): pick the Download OSM Vector area from the map by @giswqs in #1561
- fix(processing): correct the Download OSM Vector form (geolibre-wasm 1.4.2) by @giswqs in #1565
- feat: add KML and KMZ layer export by @giswqs in #1568
- fix(i18n): distinguish Chinese progress strings from action labels and unify "sidecar" by @ztcools in #1570
- fix(backend): gate PostGIS connections behind a host allowlist by @giswqs in #1571
- fix(desktop): install PostGIS sidecar runtime by @giswqs in #1579
- feat: add Elements panel & promote annotations to map elements #1524 by @HarshShinde0 in #1567
- Preserve KMZ custom icons and formatted descriptions by @giswqs in #1580
- feat(processing): enter distances in meters on WGS84 layers by @giswqs in #1560
- feat(browser): save a configured layer and re-add it from My Data by @giswqs in #1564
- feat: import QGIS project files by @giswqs in #1563
- feat(desktop): add a sandboxed Mac App Store build variant by @giswqs in #1581
- Keep KML icons independent from background controls by @giswqs in #1588
- fix(layers): hide control vectors with groups by @giswqs in #1590
- fix(layers): truncate long layer names by @giswqs in #1591
- Add nested layer groups by @giswqs in #1593
- fix(desktop): disable WebKit DMABUF for Nvidia by @giswqs in #1595
- fix: load vector URLs through native HTTP by @giswqs in #1596
- Convert Whitebox raster outputs to COGs by @giswqs in #1594
- fix(import): preserve QGIS source paths and group visibility by @ShiroKSH in #1584
- fix(workers): stop edge proxies from following off-origin redirects by @Ayush7614 in #1576
- test(import): fix stale QGIS nested group name expectation by @giswqs in #1597
- fix: keep project load, collab sync, and layer cleanup consistent by @Ayush7614 in #1575
- fix(sidecar): harden band-math eval, job caps, and result bounds by @Ayush7614 in #1574
- feat(dashboard): add selector widget type (issue #1381) by @bgoniasa in #1504
- feat: support KML Super-Overlay imports by @giswqs in #1599
- feat(python): add leafmap-parity data and layer helpers by @giswqs in #1600
- fix(desktop): route built-in GeoLens through native HTTP by @giswqs in #1601
- Add autosave, crash recovery, and project history by @giswqs in #1602
- feat: add ArcGIS Hub data plugin by @giswqs in #1603
- fix(settings): contain mobile dialog content by @giswqs in #1613
- feat(layers): move selected layers as a group by @giswqs in #1612
- Allow all values in categorized styles by @giswqs in #1609
- feat(add-data): geocode delimited-text addresses at import time by @shima78 in #1604
- Support inline GeoJSON styles in notebook bridge by @giswqs in #1619
- add map comments with collab sync by @HarshShinde0 in #1607
- Follow-up: notebook style review fixes by @giswqs in #1620
- feat: persist layer connections and add open data catalogs by @giswqs in #1614
- docs: quote pip extras install examples by @nyxst4ck in #1473
- fix(gps): stream Android fixes at GNSS rate and keep follow mode reachable by @giswqs in #1623
- feat: add NMEA receiver position source to GPS Tracking by @giswqs in #1624
- fix: render KMZ ground overlays whose image is a TIFF by @giswqs in #1622
- fix(gps): close NMEA connection lifecycle races by @giswqs in #1626
- fix: add notebook layer read-back by @giswqs in #1621
- Add typed embed SDK and viewer preset by @giswqs in #1615
- i18n: fill 218 missing keys across all 15 non-English catalogs by @giswqs in #1635
- docs: fix stale content, cover shipped features, drop hardcoded versions by @giswqs in #1634
- fix(sidecar): bound Sedona SQL with a statement timeout by @Ayush7614 in #1630
- fix: clear select/load dialog layer ids when layers are removed by @Ayush7614 in #1628
- fix: scrub widgets, comments, and legend when layers disappear by @Ayush7614 in #1627
- docs: drop the deprecated CodeSandbox badge by @giswqs in #1636
- fix: make the Comments panel opt-in from Settings by @giswqs in #1638
- fix(ci): stop superseded Pages builds failing the PR preview deploy by @giswqs in #1640
- feat: import ArcGIS Pro projects from CIM JSON by @giswqs in #1637
- fix: resolve relative style/tileset URLs for OGC vector tiles by @giswqs in #1641
- fix: surface notebook runtime dir failures and reclaim port 8766 on Windows by @giswqs in #1644
- fix: keep the Vite dev watcher out of src-tauri by @giswqs in #1646
- fix: drop benign ResizeObserver loop errors from diagnostics by @giswqs in #1647
- fix(workers): harden Vite proxy and github-raw redirect fetches by @Ayush7614 in #1633
- docs: highlight the 1,000+ browser-based geoprocessing tools by @giswqs in #1648
- fix(sidecar): stop leaking raw vector and SQL errors to clients by @Ayush7614 in #1632
- fix(mas,ios): drop the network.server entitlement with Earth Engine sign-in by @giswqs in #1651
- Fix laggy globe dragging with atmospheric effects by @santiago-ramos-02 in #1653
- fix(backend): validate aspatial geopackage layer writes & add test co… by @RohithPariki in #1654
- docs: add the Mac App Store listing and its limitations by @giswqs in #1656
- fix(mas): build JupyterLite so the Notebook panel is not a second map by @giswqs in #1658
- fix(attributes): make web URLs clickable by @giswqs in #1659
- fix(collab): validate and rate-limit comment mutations by @Ayush7614 in #1629
- docs: add Europa, Callisto, and Charon basemap screenshots by @giswqs in #1661
- fix(sidecar): cap concurrent ML segmentation proxy requests by @Ayush7614 in #1631
- chore(deps): clear the four transitive advisories failing the audit gate by @giswqs in #1688
- feat: add DGGS plugin by @thangqd in #1650
- fix: resolve SedonaDB thread pool leak on sql timeout by @RohithPariki in #1663
- fix(shell): recover a drop overlay that outlived its drag by @giswqs in #1683
- feat(share): point the app at a self-hosted share/collab server at runtime by @giswqs in #1687
- feat(server): add a self-hostable projects API and collaboration relay by @giswqs in #1690
- chore(deps-dev): bump undici from 7.29.0 to 8.9.0 by @dependabot[bot] in #1696
- chore(deps): bump the actions-minor-patch group with 2 updates by @dependabot[bot] in #1693
- chore(deps): bump the npm-minor-patch group across 1 directory with 15 updates by @dependabot[bot] in #1697
- feat(i18n): add Thai (th) translation catalog by @Navavit in #1698
- Show every category in the print layout legend by @giswqs in #1699
- fix: keep KMZ icons above lower layers by @giswqs in #1701
- fix: replace jupyter relay dispatch with broadcast to fix broken active notebooks by @RohithPariki in #1691
- fix: redact project credentials on egress by @giswqs in #1702
- fix: redact credentials from a layer's connection record by @giswqs in #1704
- feat(export): Exclude hidden fields from vector data by @RohithPariki in #1705
- feat(processing): add DGGS processing by @thangqd in #1710
- feat(netcdf): fit, colormap, and band combination for local grids by @giswqs in #1708
- fix(ci): opt in to fork PR checkout so Claude review stops failing by @giswqs in #1715
- chore(rearrange dggs processing) by @thangqd in #1714
- feat(netcdf): mark sampled pixels and float the spectral profile by @giswqs in #1713
- fix(layers): hide control-rendered rasters with their group by @giswqs in #1720
- feat(netcdf): add a 3D image cube view for hyperspectral grids by @giswqs in #1719
- fix(vector): stream large local vector files through DuckDB by @giswqs in #1716
- feat: CartoCiudad (IGN España) geocoding provider by @bgoniasa in #1712
- fix(legend): draw proportional size ramps with the layer's marker by @giswqs in #1722
- fix(netcdf): let an RGB composite be sampled like a single band by @giswqs in #1723
- refactor(netcdf): share the band label's coordinate rounding by @giswqs in #1724
- i18n: fill the 16 locale catalogs to 100% coverage by @giswqs in #1725
- fix(dev): answer the proxy guard's DNS lookup in the shape the connector asked for by @giswqs in #1726
- fix(stac): let a vector layer draw above STAC Search imagery by @giswqs in #1727
- fix(deps): patch the two high-severity audit findings without downgrading wrangler by @giswqs in #1729
- chore(release): v2.5.0 by @giswqs in #1728
- docs: add a platform comparison page by @giswqs in #1730
New Contributors
- @dinesh-at-is made their first contribution in #1548
- @HarshShinde0 made their first contribution in #1532
- @Varshavia made their first contribution in #1533
- @ztcools made their first contribution in #1570
- @ShiroKSH made their first contribution in #1584
- @Ayush7614 made their first contribution in #1576
- @shima78 made their first contribution in #1604
- @nyxst4ck made their first contribution in #1473
- @santiago-ramos-02 made their first contribution in #1653
- @RohithPariki made their first contribution in #1654
- @thangqd made their first contribution in #1650
- @Navavit made their first contribution in #1698
Full Changelog: v2.4.0...v2.5.0
详细ChangeLogv2.4.0
2026年07月29日
What's Changed
- feat(time-slider): bind vector tiles, PMTiles and MBTiles to the timeline by @giswqs in #1425
- feat(geolens): render private rasters by attaching the API key via transformRequest by @ishiland in #1428
- ci(preview): split PR preview into build + deploy so fork PRs get previews by @giswqs in #1429
- feat(dashboard): add indicator widget type by @bgoniasa in #1392
- feat(geolens): edit and save vector data back to a GeoLens dataset by @giswqs in #1430
- feat(huggingface): browse, load, create and upload HF dataset repos by @giswqs in #1432
- fix(huggingface): keep the file list in place when adding a dataset by @giswqs in #1434
- chore(deps): update maplibre-gl-time-slider to 1.7.1 by @giswqs in #1435
- fix(time-slider): identify COG/mosaic pixels and restore the saved date list by @giswqs in #1436
- fix(overture): render 3D extrusion for Overture Maps polygon layers by @giswqs in #1437
- fix(time-slider): restore the pixel time-series panel for COG and mosaic by @giswqs in #1439
- fix(vector): load KMZ from a URL in Add Data → Vector Layer by @giswqs in #1441
- feat(notebook): drive the map from external Jupyter clients (VS Code) by @giswqs in #1444
- feat(plugins): add addZarrLayer and honor plugin-owned paint for custom layers by @giswqs in #1447
- feat(add-data): add OGC API - Features collections as vector layers by @giswqs in #1449
- feat(assistant): add a model picker and refresh the provider model lists by @giswqs in #1443
- docs: slim the README and move reference sections into the docs site by @giswqs in #1451
- docs: point the NYC demo at a GIF small enough for GitHub by @giswqs in #1452
- feat(time-slider): drive a layer's internal time dimension via a generic temporal adapter by @giswqs in #1450
- fix(assistant): make the Docker deployment AI proxy usable in the browser by @giswqs in #1453
- Expose bounded Overture queries to cooperating plugins by @giswqs in #1456
- fix(measure): show a real total in the Measure panel by @giswqs in #1465
- fix(processing): honor WASM tool defaults and offer attribute pickers for field parameters by @giswqs in #1464
- Expose layer groups to external plugins by @giswqs in #1467
- feat(embed): add a versioned postMessage API for host pages by @giswqs in #1468
- fix(plugins): keep globe projection when adding a Zarr layer via addZarrLayer by @turban in #1470
- feat(zarr): open a Zarr store from a local folder, and make the selector work by @giswqs in #1469
- feat(plugins): add an Earthdata GIS browser under Web Services by @giswqs in #1471
- feat(flight-simulator): interactive free-flight camera over terrain and 3D layers by @giswqs in #1455
- fix(raster): keep local rasters in saved projects and under layer order by @giswqs in #1472
- fix(plugins): invalidate stale bundled assets by @giswqs in #1474
- feat(detection): support geotagged photos by @giswqs in #1476
- chore(deps): bump actions/download-artifact from 7 to 8 by @dependabot[bot] in #1479
- chore(deps): bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in #1478
- fix(map): restack layers top-down so a late control layer cannot bury the rest by @giswqs in #1486
- Separate Cloudflare and GitHub Pages previews by @giswqs in #1487
- Fix saved 3D Tiles rendering by @giswqs in #1480
- chore(deps): bump duckdb from 1.10504.0 to 1.10505.0 in /apps/geolibre-desktop/src-tauri in the cargo-minor-patch group by @dependabot[bot] in #1477
- chore(deps): bump the npm-minor-patch group with 33 updates by @dependabot[bot] in #1481
- chore(deps): bump openai from 6.48.0 to 7.0.0 by @dependabot[bot] in #1483
- chore(deps): bump pbf from 4.0.2 to 5.1.2 by @dependabot[bot] in #1484
- chore(deps): bump @mapbox/vector-tile from 2.0.5 to 3.0.0 by @dependabot[bot] in #1485
- fix(basemaps): make the basemap control's Mapbox styles load by @giswqs in #1488
- fix: enable symbology attributes for tiled vector layers by @giswqs in #1490
- fix(runtime): use bundled PROJ data in managed sidecars by @ElhamDevelopmentStudio in #1491
- feat(search): resolve H3 cell indexes in the place-search box by @giswqs in #1497
- feat(release): embed AppImage update information and publish zsync by @giswqs in #1498
- feat(i18n): complete Georgian (ka) translation to 100% by @ezdanapak in #1493
- fix(time-slider): honor temporal adapter cadence by @giswqs in #1502
- fix: adapt time slider tick density by @giswqs in #1505
- chore(deps): bump opengeos-owned dependencies to latest by @giswqs in #1506
- fix: update time slider to 1.8.3 by @giswqs in #1507
- fix(map): patch Popup.prototype instead of the maplibre namespace by @giswqs in #1509
- feat(plugins): add an H3 hexagonal grid plugin by @giswqs in #1511
- fix: update time slider to 1.8.4 by @giswqs in #1513
- fix(time-slider): close the dock when the last temporal binding is removed by @giswqs in #1515
- i18n: backfill the 15 non-English catalogs to 100% coverage by @giswqs in #1514
- feat(plugins): add a STAC catalogs browser plugin by @giswqs in #1516
- chore(release): v2.4.0 by @giswqs in #1517
New Contributors
- @ishiland made their first contribution in #1428
- @bgoniasa made their first contribution in #1392
- @turban made their first contribution in #1470
- @ElhamDevelopmentStudio made their first contribution in #1491
Full Changelog: v2.3.0...v2.4.0
详细ChangeLogv2.3.0
2026年07月25日
What's Changed
- fix(android): drop native-tls/openssl-sys from Android build; bump setup-android to v4 by @giswqs in #1336
- feat(search): jump to a typed lat/lon in the place-search box by @giswqs in #1340
- feat(add-data): support delimited text layers in any CRS by @giswqs in #1341
- feat(layers): copy and paste layer styles between layers by @giswqs in #1342
- chore(deps): bump maplibre-gl-raster to 0.12.0 and maplibre-gl-planetary-computer to 0.4.0 by @giswqs in #1344
- feat(time-slider): mosaic (STAC/MosaicJSON) sources with GPU/WASM engine by @giswqs in #1345
- fix(time-slider): restore the dock open, add mosaic NoData, fix the WASM nodata border by @giswqs in #1346
- fix(embed): hide the Browser rail (and all side panels) in maponly mode by @giswqs in #1347
- chore(deps): bump maplibre-gl-time-slider to 1.5.0 by @giswqs in #1348
- fix(map): collapse the attribution control after the map loads by @giswqs in #1349
- feat(processing): add Random extract vector tool by @giswqs in #1352
- feat(android): make the build Google Play-ready by @giswqs in #1350
- fix(print-layout): draw point markers in the legend by @giswqs in #1356
- feat(map): auto-enable terrain when the Terrain control is turned on by @giswqs in #1358
- fix(whitebox): implement Assign Projection tools in the WASM engine (#1355) by @giswqs in #1359
- fix(plugins): update Add PMTiles sample data URL to a reachable release by @giswqs in #1361
- feat(processing): add Emerging Hot Spot Analysis (space-time cube) by @giswqs in #1360
- fix(vector): reproject GeoJSON declaring a non-WGS84 crs member by @giswqs in #1362
- feat(processing): deep-link Whitebox tools via ?tool= URL param by @giswqs in #1363
- chore(deps): bump the actions-minor-patch group with 2 updates by @dependabot[bot] in #1365
- chore(deps): bump the cargo-minor-patch group in /apps/geolibre-desktop/src-tauri with 3 updates by @dependabot[bot] in #1364
- chore(deps): bump actions/setup-node from 6 to 7 by @dependabot[bot] in #1366
- chore(deps): bump actions/setup-python from 6 to 7 by @dependabot[bot] in #1367
- chore(deps): bump actions/checkout from 4 to 7 by @dependabot[bot] in #1368
- chore(deps): bump the npm-minor-patch group with 33 updates by @dependabot[bot] in #1369
- fix(core): adapt to createExpression rootKey arg in style-spec 26 by @giswqs in #1371
- fix(mobile): request Android/iOS location permission for GPS capture by @giswqs in #1373
- feat(ios): scaffold Tauri iOS build (config, Info.plist, CI, docs) by @giswqs in #1374
- fix(raster): apply min/max zoom constraint to COG layers by @giswqs in #1376
- chore(deps): patch fast-uri high advisory, scope audit to prod deps by @giswqs in #1378
- feat(plugins): add GeoLens catalog browser plugin by @giswqs in #1377
- feat(layers): Layers-panel symbology swatches + auto on-map legend by @giswqs in #1379
- feat(vector): pick which GeoPackage layers to load in the Add Vector panel by @giswqs in #1382
- fix(desktop): ship the sidecar lockfile so Jupyter/sidecar start in installed builds by @giswqs in #1386
- fix(symbology): graduated classes are discrete, with correct class breaks by @giswqs in #1387
- fix(processing): restore parameters for WASM tools whose manifest declares none by @giswqs in #1388
- Publish PR previews to pages-preview, drop Netlify by @giswqs in #1391
- chore(deps): geolibre-wasm 1.1.0, maplibre-gl-basemap-control 0.13.0 by @giswqs in #1395
- feat(controls): Logos submenu with MapLibre and Maptoolkit logos by @giswqs in #1396
- docs: change heading 'Set up' to 'Setup' in contributing.md by @amir-rezaei in #1398
- feat(legend): auto-generated on-map Legend panel with customizable entries by @giswqs in #1397
- fix(shell): only surface project URL load failures on the map by @giswqs in #1399
- feat: persist the active layer and lift the GeoLens feature cap by @giswqs in #1400
- fix(layers): correct raster style paste for index mode and stop copying opacity by @giswqs in #1402
- fix(geolens): page the GeoJSON loader instead of passing the feature limit through by @giswqs in #1401
- fix(time-slider): offer bare-year columns in the Bind to Time Slider dialog by @giswqs in #1403
- fix(legend): merge graduated color and size into one legend block by @giswqs in #1413
- docs: fix Title Case section heading and fork clone URL placeholder in CONTRIBUTING.md by @amir-rezaei in #1407
- docs: fix Title Case section headings and clone URL placeholder in docs/contributing.md by @amir-rezaei in #1408
- fix(citation): quote DOI string literal in CITATION.cff by @amir-rezaei in #1409
- fix(sidecar): serialize lifecycle and reclaim orphaned port 8765 by @giswqs in #1414
- chore(deps): bump time-slider to 1.6.0, clear high audit findings by @giswqs in #1416
- chore(deps): bump geolibre-wasm to 1.2.0, regenerate menu catalog by @giswqs in #1417
- fix(share): record only plugin URLs a project uses, revalidate on load by @giswqs in #1418
- feat: multi-profile support for AI assistant providers by @rahuldshetty in #1410
- fix: Raster Calculator equality operations match nothing by @giswqs in #1422
- feat(layers): report raster CRS and pixel size in the metadata dialog by @giswqs in #1421
- i18n: complete catalog coverage and route the remaining hard-coded strings through t() by @giswqs in #1423
- chore(release): v2.3.0 by @giswqs in #1424
New Contributors
- @amir-rezaei made their first contribution in #1398
- @rahuldshetty made their first contribution in #1410
Full Changelog: v2.2.0...v2.3.0
详细ChangeLogv2.2.0
2026年07月19日
What's Changed
- chore(deps): bump zip from 6.0.0 to 8.6.0 in /apps/geolibre-desktop/src-tauri by @dependabot[bot] in #1232
- chore(deps): bump tauri-apps/tauri-action from 0.6 to 1.0 by @dependabot[bot] in #1233
- chore(deps): bump actions/setup-java from 4 to 5 by @dependabot[bot] in #1234
- chore(deps): bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in #1235
- chore(deps): bump docker/setup-buildx-action from 3 to 4 by @dependabot[bot] in #1236
- chore(deps): bump docker/metadata-action from 5 to 6 by @dependabot[bot] in #1237
- chore(deps): bump the cargo-minor-patch group in /apps/geolibre-desktop/src-tauri with 2 updates by @dependabot[bot] in #1231
- chore(deps): bump the npm-minor-patch group with 18 updates by @dependabot[bot] in #1238
- chore(deps-dev): bump typescript from 6.0.3 to 7.0.2 by @dependabot[bot] in #1239
- ci(claude-review): run Claude Code Review on fork/external PRs by @giswqs in #1246
- refactor(ui): migrate physical Tailwind utilities to logical properties by @pythonbass in #1241
- feat(i18n): Arabic translation with right-to-left UI support by @pythonbass in #1242
- fix: make deck.gl COG rasters swipeable in Layer Swipe (#1240) by @giswqs in #1245
- feat(desktop): watch local files for changes and reload layers from disk by @giswqs in #1247
- fix(print-layout): honor scale bar unit preference (imperial/metric/nautical) by @giswqs in #1250
- feat: terrain-aware 3D measurements in the Measure tool by @giswqs in #1252
- feat(desktop): OS trust store and mTLS client certs for native HTTP by @giswqs in #1225
- fix(assistant): persist AI provider API keys across restarts (#1249) by @giswqs in #1251
- feat(i18n): add Georgian (ka) locale by @ezdanapak in #1253
- feat: Timelapse mode — animate EOX Sentinel-2 cloudless annual basemaps by @giswqs in #1254
- feat(timelapse): NASA GIBS providers (Landsat/WELD + MODIS land cover) with a provider picker & legend by @giswqs in #1256
- feat(pmtiles): extract offline basemaps from remote PMTiles archives by @giswqs in #1257
- fix(assistant): make the Anthropic provider load in production builds by @giswqs in #1258
- feat(pmtiles): styled offline basemaps + consolidate offline menus + CORS worker by @giswqs in #1259
- feat(plugins): Source Cooperative data browser (Plugins > Web Services) by @giswqs in #1262
- feat(plugins): Natural Earth browser (Plugins > Web Services) by @giswqs in #1263
- fix(plugins): cache the pinned product across panel rebuilds by @giswqs in #1264
- feat(plugins): open or stream large GeoParquet from Source Cooperative by @giswqs in #1266
- feat(conversion): run COG, FlatGeobuf, Shapefile, GeoPackage conversions in the browser by @giswqs in #1267
- i18n: rename three menu labels, translate Browser / Record Video / Offline Basemap by @giswqs in #1268
- fix(gallery): open projects from the My projects tab by @giswqs in #1269
- feat(conversion): run Vector to PMTiles in the browser on a worker by @giswqs in #1270
- fix: use CSS :lang() pseudo-class for CJK vertical text rotation by @Craun718 in #1273
- fix(i18n): update Browser panel label live on language change by @giswqs in #1277
- fix(raster): honor internal COG mask band (PER_DATASET) as nodata by @giswqs in #1279
- docs(raster): bump 're-verified against' pins to v0.11.0 by @giswqs in #1281
- feat(processing): populate subset tool URLs from loaded layers by @giswqs in #1278
- fix(storymap): keep cloud raster layers in HTML export and change views in the PDF handout by @giswqs in #1280
- feat(record-video): burn an optional title/source caption into recordings by @giswqs in #1282
- feat(raster): add NAIP VRT mosaic to the Add Raster Layer sample datasets by @giswqs in #1283
- chore(deps): bump maplibre-gl-raster to 0.11.1 by @giswqs in #1286
- chore: update translation file for Chinese by @Craun718 in #1284
- feat(vector): add Esri File Geodatabase (.gdb) layers on desktop by @giswqs in #1289
- feat(record-video): capture on-map panels (HTML, legend, colorbar) in recordings by @giswqs in #1287
- feat(vector): Data quality tools — Check validity, Fix geometries, Check topology rules by @giswqs in #1296
- feat(vector): Fix topology tool (geolibre-wasm 0.9.0) by @giswqs in #1300
- feat(processing): add Processing History panel with re-run and Copy as Python by @giswqs in #1297
- feat(sql): add live query layers backed by DuckDB SQL by @giswqs in #1298
- feat(style): Style Manager with reusable symbol, ramp, and label preset library by @giswqs in #1299
- fix(style-manager): read the project-id snapshot fresh after the import file picker by @giswqs in #1303
- feat(style): add diagram symbology (pie/donut/bar charts on features) by @giswqs in #1302
- feat(print): Atlas / map series generation in Print Layout by @giswqs in #1301
- fix(i18n): use getter for panel title live localization by @Craun718 in #1288
- feat(print): Atlas pages along a line (uniform map series over a river or trail) by @giswqs in #1304
- feat(raster): Raster Attribute Table for single-band categorical rasters by @giswqs in #1308
- feat(style): per-rule symbol properties, scale ranges, nested rules, and toggles for the rule-based renderer by @giswqs in #1309
- feat(expressions): shared Expression Builder with function reference, field list, live preview, and variables by @giswqs in #1310
- feat(style): hide features matching no rule when the else rule is switched off by @giswqs in #1313
- feat(selection): Select by Expression and Select by Location by @giswqs in #1317
- feat(gps): live GPS tracking (position marker, track log, digitize from GPS) by @giswqs in #1318
- feat(style): proportional (data-driven) size for marker icons by @giswqs in #1325
- feat(joins): persistent attribute joins in layer properties (Fixes #1315) by @giswqs in #1319
- feat(style): symbology pack — inverted polygon masks, arrow/marker lines, geometry generators by @giswqs in #1326
- refactor(style): shared proportional-size guards and scoped control-layer radius override by @giswqs in #1328
- feat(labels): data-defined labeling engine (expression-driven properties, placement priority) by @giswqs in #1329
- feat(fields): virtual fields, expression-backed computed columns by @giswqs in #1330
- feat(attributes): attribute form designer with edit widgets, constraints, and conditional visibility by @giswqs in #1331
- feat(print): attribute-table and chart blocks in the Print Layout by @giswqs in #1332
- ci(review): skip Claude review runs initiated by bot actors by @giswqs in #1333
- ci(fmt): add ruff + oxfmt auto-format workflow and config by @Craun718 in #1327
- i18n: backfill missing translations for recent menus and dialogs by @giswqs in #1335
- chore(release): v2.2.0 by @giswqs in #1334
New Contributors
- @pythonbass made their first contribution in #1241
- @ezdanapak made their first contribution in #1253
- @Craun718 made their first contribution in #1273
Full Changelog: v2.1.0...v2.2.0
详细ChangeLogv2.1.0
2026年07月14日
What's Changed
- chore(processing): regenerate Whitebox menu catalog for geolibre-wasm 0.6.0 by @giswqs in #1181
- feat(docker): optional HTTP Basic Auth for the web container by @giswqs in #1184
- fix(security): harden sidecar auth, path sandboxing, plugin trust, and AI code exec by @giswqs in #1182
- fix(diagnostics): suppress benign three.js multiple-instances warning by @giswqs in #1187
- feat(route-animation): animate a marker along a line layer by @giswqs in #1185
- chore: bump maplibre-gl-basemap-control to ^0.12.0 by @giswqs in #1190
- feat(route-animation): export the animation as an MP4 video by @giswqs in #1189
- feat(record): record the map canvas or a drawn bbox to video by @giswqs in #1191
- feat(knowledge-cards): Wikipedia place info card from the map by @giswqs in #1192
- feat(add-data): GEBCO ocean bathymetry WMS sample with attribution by @giswqs in #1193
- chore: bump maplibre-gl-raster to ^0.10.1 and cog-tiler-wasm to ^0.2.5 by @giswqs in #1194
- feat(planetary): USGS basemaps for nine more celestial bodies by @giswqs in #1196
- refactor(add-data): shared applyServiceEntry dispatcher + layer builders by @giswqs in #1199
- feat(browser): Browser (Data Source Manager) panel — Services + Recent by @giswqs in #1200
- feat(browser): translate section labels; Layout toggle re-opens collapsed by @giswqs in #1201
- fix(browser): share one useProjectFileActions instance with the toolbar by @giswqs in #1202
- feat(browser): "New connection" action per service kind by @giswqs in #1203
- fix(effects): draw the atmospheric halo on Earth only by @giswqs in #1207
- ci(tiles): auto-deploy tiles worker on workers/tiles changes by @giswqs in #1206
- feat(browser): Databases section — browse PostGIS schemas & tables by @giswqs in #1204
- feat(plugins): add OpenAerialMap imagery search plugin by @giswqs in #1198
- feat(browser): Local files in the Browser panel (Phase 3) by @giswqs in #1208
- feat(browser): Favorites section (Phase 4) by @giswqs in #1209
- feat(browser): keyboard navigation (Phase 5 · Polish) by @giswqs in #1212
- fix(pwa): exclude bundled drop-in plugins from the SW precache by @giswqs in #1217
- feat(plugins): bundled drop-in activeByDefault + deployment welcome opt-out by @giswqs in #1218
- feat(route-animation): follow 3D tracks and add camera controls by @giswqs in #1214
- feat(photos): true native-resolution geotagged photo viewer by @giswqs in #1222
- fix(desktop): resolve bundled Jupyter sidecar in installed builds by @giswqs in #1224
- feat(processing): populate subset bbox from the map view by @giswqs in #1221
- feat(processing): make the Whitebox toolbox a floating panel by @giswqs in #1226
- feat(detection): in-browser ONNX/YOLO object detection (#902) by @giswqs in #905
- feat(map): switch scale bar between metric, imperial, and nautical units by @giswqs in #1228
- feat(ui): default to Advanced interface and skip the welcome dialog by @giswqs in #1229
- chore(release): v2.1.0 by @giswqs in #1230
Full Changelog: v2.0.0...v2.1.0
详细ChangeLogv2.0.0
2026年07月11日
What's Changed
- fix(desktop): drop in-app updater from the Microsoft Store build by @giswqs in #1078
- fix(whitebox): honor output extension and render expression fields for WASM tools by @giswqs in #1077
- fix(wms): honor WMS 1.3.0 in GetMap requests for 1.3.0-only servers by @giswqs in #1079
- feat(symbology): export vector layer symbology to Mapbox GL style JSON by @giswqs in #1071
- feat(editing): write vector layer edits back to GeoPackage/GeoJSON source files by @giswqs in #1072
- feat(editing): PostGIS write-back for editable database layers by @giswqs in #1080
- feat(symbology): import vector layer symbology from Mapbox GL style JSON by @giswqs in #1081
- fix(postgis): follow-ups from the final review round of #1080 by @giswqs in #1082
- feat(symbology): import/export vector layer symbology as OGC SLD by @giswqs in #1083
- feat(symbology): import/export vector layer symbology as QGIS QML by @giswqs in #1084
- fix(desktop): only disable WebKitGTK DMABUF renderer on old WebKitGTK by @giswqs in #1085
- test(ci): dependency audits, coverage floors, and E2E panel/theme/error specs by @giswqs in #1086
- chore(deps): bump cloudflare/wrangler-action from 3 to 4 by @dependabot[bot] in #1096
- chore(deps): bump the cargo-minor-patch group across 1 directory with 2 updates by @dependabot[bot] in #1087
- chore(deps): bump rusqlite from 0.32.1 to 0.40.1 in /apps/geolibre-desktop/src-tauri by @dependabot[bot] in #1088
- chore(deps): bump docker/setup-qemu-action from 3 to 4 by @dependabot[bot] in #1091
- chore(deps): bump actions/cache from 4 to 6 by @dependabot[bot] in #1092
- chore(deps): bump docker/build-push-action from 6 to 7 by @dependabot[bot] in #1093
- chore(deps): bump docker/login-action from 3 to 4 by @dependabot[bot] in #1094
- chore(deps): bump actions/github-script from 7 to 9 by @dependabot[bot] in #1095
- chore(deps-dev): bump @cloudflare/workers-types from 4.20260624.1 to 5.20260707.1 by @dependabot[bot] in #1101
- chore(deps-dev): bump @types/node from 22.19.21 to 26.1.0 by @dependabot[bot] in #1099
- chore(deps): bump apache-arrow from 17.0.0 to 21.1.0 by @dependabot[bot] in #1103
- chore(deps): bump @google/genai from 1.52.0 to 2.10.0 by @dependabot[bot] in #1104
- chore(deps): bump i18next from 25.10.10 to 26.3.4 by @dependabot[bot] in #1102
- chore(deps): bump @duckdb/duckdb-wasm from 1.33.1-dev45.0 to 1.33.1-dev57.0 by @dependabot[bot] in #1100
- fix: parse 3D tile content on main thread to avoid CDN worker by @giswqs in #1105
- feat: import delimited text (CSV) without coordinates as an attribute table by @giswqs in #1107
- chore(deps): bump zip from 2.4.2 to 6.0.0 in /apps/geolibre-desktop/src-tauri by @dependabot[bot] in #1090
- chore(deps): bump react-i18next from 16.6.6 to 17.0.8 by @dependabot[bot] in #1098
- fix: route share.geolibre.app through native HTTP on desktop by @giswqs in #1109
- chore(deps): bump the npm-minor-patch group across 1 directory with 47 updates by @dependabot[bot] in #1097
- chore(deps): bump getrandom from 0.2.17 to 0.4.2 in /apps/geolibre-desktop/src-tauri by @dependabot[bot] in #1089
- feat(raster): normalized-difference index builder for any HTTP COG by @giswqs in #1112
- fix(set-view): surface smart-paste behind a labeled toggle button by @giswqs in #1113
- feat(basemaps): Layers-panel toggle + dark-mode theming by @giswqs in #1115
- feat(terrain): double-click terrain control for vertical exaggeration by @giswqs in #1116
- feat(sun): Google Earth-style sun position simulation by @giswqs in #1117
- feat(view): View in Google Maps / Google Earth actions by @giswqs in #1118
- feat(basemaps): expand EOX Maps layers (annual s2cloudless + overlay/terrain) by @giswqs in #1127
- fix(gpx): import track points and route points as separate layers by @giswqs in #1123
- feat(style): render vector layers with Z coordinates in true 3D by @giswqs in #1124
- feat(kml): render KML/KMZ GroundOverlay images as map overlays by @giswqs in #1125
- fix(vector): load macOS-zipped and 3D MultiPatch shapefiles in the vector panel by @giswqs in #1129
- feat(layers): add a GeoEditor toggle button to the Layers panel header by @giswqs in #1132
- feat(basemaps): per-project ellipsoid + Mars/Moon basemaps by @giswqs in #1133
- fix(vector): load TIN/MultiPatch 3D shapefiles by @giswqs in #1126
- fix(controls): recover when the component-controls chunk fails to load by @giswqs in #1134
- feat(terrain): add Elevation Profile as a built-in plugin by @giswqs in #1137
- feat(kml): render KML/KMZ Collada (.dae) 3D models by @giswqs in #1131
- feat(kml): animate time-tagged KML/KMZ GroundOverlays via the Time Slider by @giswqs in #1135
- feat(controls): add a Clouds overlay to the Controls menu by @giswqs in #1140
- feat(map): add CesiumJS 3D-globe view (split-pane, camera + layer sync) by @giswqs in #1139
- refactor(3d-tiles): dedupe Google X-GOOG-API-KEY resolution into @geolibre/core by @giswqs in #1144
- feat(shortcuts): add Google Earth-style camera-reset keyboard shortcuts by @giswqs in #1146
- feat(assistant): read AI API keys from OS environment variables by @giswqs in #1143
- feat(i18n): complete all 13 locale catalogs + migrate hardcoded panel/dialog strings by @giswqs in #1147
- feat(weather): Weather menu with Clouds + Precipitation (RainViewer radar) by @giswqs in #1145
- fix(vector): reproject projected-CRS shapefiles on import (#1148) by @giswqs in #1150
- fix(deck): share one interleaved deck overlay so 3D Tiles, 3D Z vectors, and COG rasters coexist by @giswqs in #1151
- fix(deck): render 3D Z points as solid icons by @giswqs in #1153
- fix(terrain): unclamp map center while terrain is on to stop zoom snapping over steep relief by @giswqs in #1156
- fix(wfs): retry alternate GeoJSON output formats so ArcGIS WFS loads (#1160) by @giswqs in #1161
- feat(basemaps): replace planetary basemaps with the OpenPlanetaryMap set by @giswqs in #1162
- feat(basemaps): add a planet switcher to the Layers panel by @giswqs in #1164
- feat(raster): extract COG/WMS/XYZ bbox subsets in the browser by @giswqs in #1163
- feat(attribute-table): calculate geometry length and area in the Field Calculator by @giswqs in #1168
- feat(plugins): Historical Imagery plugin — theme-aware panel and vendor-neutral WMTS sample by @giswqs in #1169
- feat(attribute-table): select multiple rows with Ctrl and Shift by @giswqs in #1172
- feat(map-tour): add support for generating tour keyframes from path layers by @giswqs in #1157
- feat(plugins): UTM easting/northing grid mode for the Gridlines overlay by @giswqs in #1174
- feat(diagnostics): capture native Tauri HTTP requests in the network log; classify failed fetch() errors by @giswqs in #1176
- feat(plugins): add Mapillary coverage and street-level viewer plugin by @giswqs in #1173
- docs: add Terms of Service page for Earth Engine OAuth verification by @giswqs in #1177
- ci: bake Mapillary access token into web/container builds by @giswqs in #1178
- fix(earth-engine): open desktop OAuth in the system browser by @giswqs in #1179
- chore(release): v2.0.0 by @giswqs in #1180
New Contributors
- @dependabot[bot] made their first contribution in #1096
Full Changelog: v1.10.0...v2.0.0
详细ChangeLog