GeoLibre v3.8.0 brings complete QGIS and QField projects, Bluetooth GNSS with RTK corrections on Android, and much richer STAC and Planetary Computer search. You can now import a QField-ready project with its forms, symbology, and linked tables, survey with a centimeter-grade rover straight from the Android app, search imagery by any shape with a cloud cover cap, and start Model Builder from ready-to-run samples. It brings together 58 pull requests from 10 contributors, 8 of them contributing for the first time. Thank you to everyone who helped!
Highlights
- QGIS and QField projects, complete: importing a QGIS project now brings each layer's attribute form (Value Map, Range, Checkbox, Date/Time, and UUID widgets, Value Relation and Relation Reference dropdowns, aliases, required fields, defaults, sections, and photo fields) and its categorized, graduated, and rule-based symbology. GeoPackage tables without geometry come in as table layers, and relation dropdowns read them live, so a project prepared for QField collects data the same way in GeoLibre. See Projects.
- Bluetooth GNSS and RTK on Android: the Android app connects to a paired Bluetooth GNSS receiver directly and feeds it RTK corrections from an NTRIP caster (NTRIP 1.0 and 2.0, optionally over TLS). The corrections go straight to the receiver, so a survey-grade rover needs no second app. See GPS Tracking.
- STAC search by shape: the STAC browser searches by a drawn point, line, or polygon, a selected feature, or a file, with an optional buffer. Results sort by date, a Max cloud filter keeps hazy scenes out, and items can be added with band renderings. See STAC Catalogs.
- Planetary Computer, connected: the panel adds date-range mosaics, restyles layers after they are added, identifies pixel values, and turns search results into a Time Slider stack with a pixel time series. Python and the MCP server can author Planetary Computer layers, and AI Assistant layers now show up in the panel. See Planetary Computer.
- Earthdata GIS: results load as you scroll, and an image service's card picks one of its published raster functions (such as NDVI), which you can switch on a layer already on the map. See Earthdata GIS.
- Model Builder samples: a Samples menu opens six ready-to-run workflows, from DEM stream networks and Strahler order to terrain derivatives, contours, and route stations near cities, each with its sample data. See Model Builder.
- AI Assistant and plugins: TrustedRouter joins the AI providers, and a managed deployment can switch on keyless Parallel web search. Plugins can read files shipped in their own bundle with
app.readPluginAsset()and send headers such asAuthorizationfor tiles they draw themselves withapp.setUrlRequestHeaders(). See AI Assistant and the Plugin API. - Fixes: quick filters count values across the whole layer, saved projects reopen in 3D with their terrain look, Zarr layers redraw on reopen, ArcGIS ImageServer source rasters draw and identify pixel values, story map chapter fades keep layer styles, and more than 110 Whitebox tools now reach Model Builder.
Download
Launch GeoLibre Web at https://web.geolibre.app, or get the desktop and mobile apps from https://geolibre.app/downloads/ (or the assets below).
What's Changed
- feat(assistant): add TrustedRouter as a provider by @jperla in #3379
- fix(3d-tiles): ground I3S scene layers with absolute heights on a flat map by @giswqs in #3376
- fix(python): file ArcGIS SceneServer URLs from add_3d_tiles as I3S layers by @giswqs in #3378
- Add readPluginAsset app API for plugin-bundled assets by @zhengqiuyang in #3301
- fix(geo-editor): place edge markers on their edges' midpoints by @giswqs in #3383
- feat(assistant): add opt-in keyless Parallel web search by @georgeatparallel in #3380
- feat(stac): search by shape, date sort, cloud cover, buffer, and band renderings by @ianhorn in #3381
- chore(deps): bump anthropics/claude-code-action from 1.0.266 to 1.0.269 in the actions-minor-patch group by @dependabot[bot] in #3385
- chore(deps): bump @google/genai from 2.32.0 to 3.0.0 by @dependabot[bot] in #3387
- chore(deps): bump the cargo-minor-patch group in /apps/geolibre-desktop/src-tauri with 2 updates by @dependabot[bot] in #3384
- chore(deps): bump the npm-minor-patch group with 33 updates by @dependabot[bot] in #3386
- fix(navigation): move to the next unit when a distance rounds up to it by @kevin9327 in #3389
- fix(imdf): style units with a categorized renderer the Style pane shows by @giswqs in #3390
- fix(processing): type generic WASM outputs so 110+ Whitebox tools reach Model Builder by @giswqs in #3392
- feat(model-builder): add a Samples menu of ready-to-run workflows by @giswqs in #3391
- fix(desktop): explain Flatpak sandbox when dropped files are unreadable by @giswqs in #3394
- feat(assistant): add UberLLM as a provider by @PSA-Team-source in #3396
- feat(gps): connect Bluetooth GNSS receivers in the Android app by @giswqs in #3399
- feat(gps): feed NTRIP RTK corrections to a Bluetooth receiver on Android by @giswqs in #3401
- feat(qgis): import form setup from QGIS/QField projects by @giswqs in #3403
- feat(qgis): import categorized, graduated and rule-based symbology by @giswqs in #3404
- feat(qgis): tables, linked records, photo fields and form sections by @giswqs in #3405
- feat(plugins): send request headers for a URL prefix a plugin draws itself by @TheSylex in #3406
- fix(legend): show values that round to 1,000.0K as 1.0M by @cpruijsen in #3407
- fix(terrain): keep the map center clamped to the ground so zoom is not capped over high terrain by @giswqs in #3411
- fix(attribute-table): constrain long cell values by @JPPereira93 in #3410
- feat(earthdata-gis): load more results on scroll by @giswqs in #3413
- feat(earthdata-gis): pick an image service's raster function by @giswqs in #3414
- fix(arcgis): draw ImageServer source rasters and identify pixel values by @giswqs in #3412
- docs: even out the homepage feature card lengths by @giswqs in #3415
- feat(planetary-computer): mosaics, restyle, Identify, Time Slider stacks, and Python/MCP authoring by @giswqs in #3417
- fix(dashboard): show cells and sort rows in the List widget by @giswqs in #3418
- fix(storymap): keep layer styles in chapter fades, show the title on the start view by @giswqs in #3422
- fix(vector): smart styling for Add Vector Layer layers by @giswqs in #3421
- fix(zarr): draw a reopened project's Zarr layers on MapLibre by @giswqs in #3425
- fix(about): wrap long link URLs so the dialog never scrolls sideways by @giswqs in #3429
- fix(project-history): redraw a layer restored from a snapshot by @giswqs in #3420
- fix: reopen saved projects in 3D (LiDAR camera reset, terrain look not saved) by @giswqs in #3427
- fix(url): drop the compact z/lat/lon token when syncing the live view by @giswqs in #3428
- fix(url): reject decoded delimiters in compact coordinate keys by @giswqs in #3431
- fix(plugins): honor the FlatGeobuf panel's Layer Name field by @giswqs in #3430
- fix(attribute-table): keep the selection when opening the table by @giswqs in #3432
- fix(selection): keep selection panels inside a shrunken map area by @giswqs in #3433
- fix(layers): keep the feature selection when layer actions activate a layer by @giswqs in #3437
- fix(viewer): skip the leave-site prompt where saving is unavailable by @giswqs in #3435
- fix(sun): let the Sun panel's date field take a typed year by @giswqs in #3434
- fix(lidar): reset the LiDAR panel's Color By and picking on project open by @giswqs in #3436
- chore(deps): bump maplibre-gl-raster to 0.14.18 by @giswqs in #3440
- fix(zarr): point the sea surface temperature sample at a land-masked store by @giswqs in #3441
- fix(quick-filters): count values across the whole layer, not the first 5,000 features by @giswqs in #3419
- fix(attribute-table): offer to embed attribute edits on URL-backed layers by @giswqs in #3423
- fix(share): stop logging the hosted server's optional-route 404s by @giswqs in #3438
- fix(search): frame a picked place by its bounding box by @giswqs in #3424
- Revert "feat(assistant): add UberLLM as a provider (#3396)" by @giswqs in #3442
- perf(quick-filters): profile fields lazily, off the render path by @giswqs in #3443
- fix(quick-filters): honor exclude with explicit fields; drop a dead guard by @giswqs in #3444
- i18n: translate 135 new strings in all 20 locales by @giswqs in #3446
- docs(workshops): restructure the NGIS 2026 workshop into eight new sections by @giswqs in #3439
- chore(release): v3.8.0 by @giswqs in #3447
New Contributors
- @jperla made their first contribution in #3379
- @zhengqiuyang made their first contribution in #3301
- @georgeatparallel made their first contribution in #3380
- @ianhorn made their first contribution in #3381
- @kevin9327 made their first contribution in #3389
- @PSA-Team-source made their first contribution in #3396
- @TheSylex made their first contribution in #3406
- @cpruijsen made their first contribution in #3407
Full Changelog: v3.7.0...v3.8.0