Title: “No shard feelings: GeoZarr rendering in QGIS, powered by GDAL” Speaker: Wietze Suijker
When: Wednesday, March 4, 2026 at 12 PM US Eastern (2026-03-04T17:00:00Z) Where:Launch Meeting - Zoom Abstract:
What happens when you point QGIS at a sharded Zarr v3 store on S3 and just… click render? Until recently: 81 HTTP requests per viewport. After >20 PRs to GDAL’s Zarr driver: 4 requests and parallel decompression. Zarr can match COG byte for byte. Now the tooling is catching up.
Live demo on Sentinel-2 from EOPF Explorer (one of the only STACs serving sharded Zarr v3 with GeoZarr conventions). We’ll unpack what makes sharded reads fast and where GeoZarr is heading. Open source plugin, no terminal required.
Try it: search “GeoZarr” in the QGIS plugin manager. Full sharding support requires GDAL 3.13 (mid-2026, or build from master).
M1 Pro, NVMe, warm cache, ZSTD L3, median of 7 runs:
Access pattern
COG
Zarr v3
Overview (zoomed out)
28 ms
72 ms
Full-res zoom
105 ms
94 ms
Random tiles (50x)
288 ms
136 ms
Parallel scaling (1 to 8 cores)
1.1x
4.3x
File size (same codec)
71 MB
51 MB
All local decode. The HTTP request reduction (81 down to 4) should matter most over the network.
Optimization patterns for Zarr readers (Max’s question)
These came out of GDAL work but should transfer to any Zarr reader:
Probe v3 first to skip legacy v2 metadata lookups. Saves 2-3 404 round trips
Cache coordinate arrays brought band reopen from 1030 ms to 148 ms (#13872)
Batch inner-chunk reads by reading the shard index and computing byte ranges. One fetch instead of N (#13871)
Cache shard indices with a small LRU. 64 entries covers a full Sentinel-2 scene (#14021)
Parallel decompression gave 4.3x at 8 cores (#13972)
Pre-fetch unaligned viewports so you get the full chunk set before the per-block loop (#14019)
Browser side (Emmanuel’s question on chunk alignment)
Looked into why zarrita.js + OpenLayers makes so many requests for sharded Zarr. Opened PRs for both projects covering array cache, parallel band opens, request batching, and shard index dedup. The array cache alone cuts metadata fetches from 27 to 3 for a 9-tile RGB viewport. Details in ol#17368.
Notes
QGIS 4.0: PR#63358 adds native Zarr support to the STAC browser (thanks Tom for flagging). Plugin becomes optional for basic loading.
GTI for large tile collections: Scott asked about virtualization vs conversion. If you’re working with something like stac-3dep-1m, GTI + STAC GeoParquet seems to work well. Tip: GDAL_MAX_DATASET_POOL_SIZE=750 avoids reopening files repeatedly, and GTI_NUM_THREADS=ALL_CPUS enables parallel reads. Also worth looking at rio-stac-io as alternative to TiTiler (thanks Julia).
Timeline: QGIS 4.0 targets March 2026. GDAL 3.13 targets mid-2026. GeoZarr RC May, OGC review June. Sharding needs 3.13; until then, build from source.
Help wanted
Cloud benchmarks: if you have COG + Zarr v3 of the same data in the same cloud region, would love to benchmark it
Time series testing: only tested quickly on EOPF Sentinel-2 so far. Other catalogs welcome