✨ Features and improvements
- ~~⚠️ Changed `geometry-type` to identify "Multi-" features ([4877](https://github.com/maplibre/maplibre-gl-js/pull/4877)). Use `$type` which has no "Multi-" support or use `in` expression to get the previous behavior.~~
- ⚠️ `StyleLayer`'s `queryIntersectsFeature` method parameters were moved to `QueryIntersectsFeatureParams`. ([5276](https://github.com/maplibre/maplibre-gl-js/pull/5276)) Wrap the method parameters with `{}` to solve this
- ⚠️ Support setting WebGL context options on map creation ([5196](https://github.com/maplibre/maplibre-gl-js/pull/5196)). Previously supported WebGL context options like `antialias`, `preserveDrawingBuffer` and `failIfMajorPerformanceCaveat` must now be defined inside the `canvasContextAttributes` object on `MapOptions`.
- ⚠️ Change the return type of `on` method to return a `Subscription` to allow for easy unsubscribe ([5080](https://github.com/maplibre/maplibre-gl-js/pull/5080)). `map.on('x').on('y')` => `map.on('x'); map.on('y');`.
- ⚠️ Change drag rotate behavior to be around the center of the screen ([5074](https://github.com/maplibre/maplibre-gl-js/pull/5074))
- ⚠️ Return actual altitude from queryTerrainElevation + Pass non-translated matrices to custom layer on mercator map ([3854](https://github.com/maplibre/maplibre-gl-js/pull/3854))
- ⚠️ Remove unminified prod build ([4906](https://github.com/maplibre/maplibre-gl-js/pull/4906)). You'll need to use a different build.
- Allows setting the desired WebGL version to use ([5236](https://github.com/maplibre/maplibre-gl-js/pull/5236)). You can now use `contextType` inside `canvasContextAttributes` to choose which WebGL version to use
- Dual-Stack WebGL Runtime with WebGL2 to WebGL1 Fallback ([5198](https://github.com/maplibre/maplibre-gl-js/pull/5198))
- Add support for projection type expression as part of a refactoring of the transfrom and projection classes ([5139](https://github.com/maplibre/maplibre-gl-js/pull/5139))
- Export `Event` class ([5016](https://github.com/maplibre/maplibre-gl-js/pull/5016))
- Support Vertical Perspective projection ([5023](https://github.com/maplibre/maplibre-gl-js/pull/5023))
- When clustering circles and the promoteId is set to some parameter, the promoted ID is used on non-clustered features and the cluster_id is used on clustered features. Previously the ID was undefined for non-clustered features ([4899](https://github.com/maplibre/maplibre-gl-js/pull/4899))
- Support Terrain in Globe projection ([4976](https://github.com/maplibre/maplibre-gl-js/pull/4976))
- Improved performance of the `coveringTiles` (tile culling) function for globe ([4937](https://github.com/maplibre/maplibre-gl-js/pull/4937))
- Catches network fetching errors such as CORS, DNS or malformed URL as actual `AJAXError` to expose HTTP request details to the `"error"` event (https://github.com/maplibre/maplibre-gl-js/pull/4822)
- Add setVerticalFieldOfView() to public API ([4717](https://github.com/maplibre/maplibre-gl-js/issues/4717))
- Disable sky when using globe and blend it in when changing to mercator ([4853](https://github.com/maplibre/maplibre-gl-js/issues/4853))
- New GlobeControl ([4960](https://github.com/maplibre/maplibre-gl-js/pull/4960))
- Add support for pitch > 90 degrees ([4717](https://github.com/maplibre/maplibre-gl-js/issues/4717))
- Add support for camera roll angle ([4717](https://github.com/maplibre/maplibre-gl-js/issues/4717))
- Improve performance of `queryRenderedFeatures` by using JavaScript `Set`s to assess layer membership internally ([4777](https://github.com/maplibre/maplibre-gl-js/pull/4777))
- Support globe mode ([3963](https://github.com/maplibre/maplibre-gl-js/issues/3963))
- Merge atmosphere and sky implementation ([3888](https://github.com/maplibre/maplibre-gl-js/issues/3888))
- Add option to display a realistic atmosphere when using a Globe projection ([3888](https://github.com/maplibre/maplibre-gl-js/issues/3888))
🐞 Bug fixes
- ⚠️ Fix level of detail at high pitch angle by changing which tiles to load ([3983](https://github.com/maplibre/maplibre-gl-js/issues/3983))
- Fix holes at the poles when terrain is used with globe ([5232](https://github.com/maplibre/maplibre-gl-js/pull/5232))
- Fix geometry artifacts when globe terrain is zoomed out too much ([5232](https://github.com/maplibre/maplibre-gl-js/pull/5232))
- Fix center being incorrectly constrained when using globe ([5186](https://github.com/maplibre/maplibre-gl-js/pull/5186))
- Fix atmosphere improperly blending into the background ([5235](https://github.com/maplibre/maplibre-gl-js/pull/5235))
- Fix parsing wrong hash location ([5131](https://github.com/maplibre/maplibre-gl-js/pull/5131))
- Fix swallowing of errors ([4532](https://github.com/maplibre/maplibre-gl-js/issues/4532))
- Fix erroring requests not reported on `error` handler ([4613](https://github.com/maplibre/maplibre-gl-js/issues/4613))
- Fix children not retained when using globe ([5271](https://github.com/maplibre/maplibre-gl-js/pull/5271))
- Fix symbol size increasing when looking from poles ([5275](https://github.com/maplibre/maplibre-gl-js/pull/5275))
- Fix globe custom layers being supplied incorrect matrices after projection transition to mercator ([5150](https://github.com/maplibre/maplibre-gl-js/pull/5150))
- Fix custom 3D models disappearing during projection transition ([5150](https://github.com/maplibre/maplibre-gl-js/pull/5150))
- Fix regression in NavigationControl compass on Firefox and Safari browsers ([5205](https://github.com/maplibre/maplibre-gl-js/pull/5205))
- Fix smooth mouse wheel zooming ([5154](https://github.com/maplibre/maplibre-gl-js/pull/5154))
- Change drag rotate behavior to be less abrupt around the center ([5104](https://github.com/maplibre/maplibre-gl-js/pull/5104))
- Fix regression in render world copies ([5101](https://github.com/maplibre/maplibre-gl-js/pull/5101))
- Fix unwanted roll when motion is interrupted ([5083](https://github.com/maplibre/maplibre-gl-js/pull/5083))
- Fix `geometry-type` filter expression results ([5132](https://github.com/maplibre/maplibre-gl-js/pull/5132))
- Fix easeTo not applying padding in globe projection ([5134](https://github.com/maplibre/maplibre-gl-js/pull/5134))
- Convert WebGL1 shaders to WebGL2 ([5166](https://github.com/maplibre/maplibre-gl-js/pull/5166))
- Fixes line flickering problem ([5094](https://github.com/maplibre/maplibre-gl-js/pull/5094))
- Fix poor performance in Chrome related to passing matrices to WebGL ([5072](https://github.com/maplibre/maplibre-gl-js/pull/5072))
- Fixes scale control for globe on zoom out ([4897](https://github.com/maplibre/maplibre-gl-js/pull/4897))
- Fixes cooperative gestures displaying the mobile help text when screen width is smaller than 480px on non-touch devices ([5053](https://github.com/maplibre/maplibre-gl-js/pull/5053))
- Fixes incorrect cluster radius scaling in `GeoJSONSource.setClusterOptions()` ([5055](https://github.com/maplibre/maplibre-gl-js/pull/5055))
- Improve innerHTML handling in code ([5057](https://github.com/maplibre/maplibre-gl-js/pull/5057)))
- Fix geometry beyond tile borders being rendered ([4868](https://github.com/maplibre/maplibre-gl-js/pull/4868))
- Fix line-placed map-pitch-aligned texts being too large when viewed from some latitudes on a globe ([4786](https://github.com/maplibre/maplibre-gl-js/issues/4786))
- Disabled unsupported Fog rendering, for Terrain3D on Globe ([4963](https://github.com/maplibre/maplibre-gl-js/pull/4963))
- Fix issue where raster tile source won't fetch updates following request error ([4890](https://github.com/maplibre/maplibre-gl-js/pull/4890))
- Fix 3D models in custom layers not being properly occluded by the globe ([4817](https://github.com/maplibre/maplibre-gl-js/issues/4817))
- Fix issue where raster tiles were not rendered correctly when using globe and terrain ([4912](https://github.com/maplibre/maplibre-gl-js/pull/4912))
- Fix text not being hidden behind the globe when overlap mode was set to `always` ([4802](https://github.com/maplibre/maplibre-gl-js/issues/4802))
- Fix a single white frame being displayed when the map internally transitions from mercator to globe projection ([4816](https://github.com/maplibre/maplibre-gl-js/issues/4816))
- Fix loading of RTL plugin version 0.3.0 ([4860](https://github.com/maplibre/maplibre-gl-js/pull/4860))
- Fix a memory leak due to missing removal of event listener registration ([4824](https://github.com/maplibre/maplibre-gl-js/pull/4824))
- Improve symbol collision performance for both mercator and globe projections ([4778](https://github.com/maplibre/maplibre-gl-js/pull/4778))
- Fix bad line scaling near the poles under globe projection ([4778](https://github.com/maplibre/maplibre-gl-js/pull/4778))
- Fix globe loading many tiles at an unnecessarily high zoom level when the camera is pitched ([4778](https://github.com/maplibre/maplibre-gl-js/pull/4778))