Releases: mapbox/mapbox-maps-android
Releases · mapbox/mapbox-maps-android
v11.26.0-alpha.1
Features ✨ and improvements 🏁
- [compose] Introduce experimental
IndoorSelectorcomposable function available insideMapboxMap, displaying a scrollable floor-selection widget that appears automatically when an indoor building is in view. ExposesIndoorSelectorStatefor programmatic access to the current floor list and selected floor, and anonFloorClickedcallback for reacting to user selections. - [compose] Add
IndoorSelectorControlheadless composable insideMapIndoorSelectorScope: attaches the indoor plugin to anIndoorSelectorStatewithout rendering any UI, enabling custom floor-selector implementations. - [compose] Add
rotateBy,moveBy,pitchBy, andscaleBymethods toMapViewportStatefor incremental camera animations. - [compose] Add
rememberStyleImage(imageId, image9Patch: NinePatchImage)andremember9PatchStyleImage(imageId, bitmap: Bitmap)overloads for nine-patch images. - Introduce new experimental
ViewAnnotationOptions.enableSymbolLayerCollisionoption which allows view annotations to hide underlying map symbols to avoid visual clutter.
By default, the full bounding box of the view annotation is used for collision detection. If your annotation has a non-rectangular shape, it is highly recommended to mark the specific subviews that should participate via the new experimentalView.mbxCollisionBoxflag. - Support drawing view annotation collision boxes when
MapView.debugOptionsis set toCOLLISION. - Internal fixes and performance improvements.
Dependencies
- Update gl-native to v11.26.0-alpha.1, common to v24.26.0-alpha.1.
v11.25.0
Breaking changes ⚠️
MapView.setMaximumFpsandMapSurface.setMaximumFpsare now annotated@MainThread. Callers must invoke them from the main thread; off-main callers will see a lint warning.
Features ✨ and improvements 🏁
- [compose] Add Standard
IndoorLabelsfeatureset and indoor configuration options (showIndoor,showIndoorLabels,colorIndoorLabelHighlight,colorIndoorLabelSelect) for the Mapbox Standard style. - Add
useNativeFlingDecelerationoption toGesturesPluginthat usesOverScrollerfor physics-based fling deceleration instead of the legacyeaseToanimation, providing a more natural fling experience. - Throttle
MapboxMappost destroyed warning logs. - Expose
verticalFovinCameraOptions, allowing a custom vertical field of view to be set insetCamera,easeTo, andflyTo. - Allow using color string literals in
interpolateexpressions, including when set on style config at runtime. - Support using
line-progressinline-emissive-strength. - Add support for zoom-and-feature-dependent appearance conditions.
- Add client-side SD/HD road and traffic conflation, hiding redundant roads based on functional road class coverage with stencil-masked transitions and configurable opacity fade.
- Add animated cross-fade transitions for boolean style config options (e.g. switching HD roads on/off).
- Add an option to disallow expensive network requests in
loadStylePack.
Bug fixes 🐞
- Fix a
ConcurrentModificationExceptioncrash that could occur when a plugin was added or removed duringMapView.onDestroy. - Fix frame pacing breaking when the panel switches refresh-rate modes mid-session (VRR or per-UID
frameRateOverride).FpsManagernow updates itsscreenRefreshRatevia aDisplayManager.DisplayListenerinstead of only sampling once atonStart. - [maps-sdk] Fix Vulkan rendering being permanently disabled when the Android surface arrived before the native map was set. The renderer now defers setup and retries via
onMapSet()once the map is available. - Fix a crash that could occur while iterating map interactions when a callback modifies interaction state.
- Fix a use-after-free crash in the map caused by asynchronous tasks accessing a partially destroyed map instance.
- Fix a crash caused by dereferencing a null index buffer when drawing symbols.
- Fix a crash when an overriding terrain source was merged with another source from the same root style.
- Fix missing letters in the middle of text labels placed along lines elevated by terrain.
- Fix aliasing artifacts on lines with borders.
- Fix step expression evaluation when using uniform buffer objects.
- Improve symbol appearances performance for Vulkan backend.
- Fix rare process crashes during HTTP downloads (failure to create a temporary file, and an uncaught error while writing the response).
- Fix a crash sometimes occurring when using a custom raster source.
- Internal fixes and performance improvements.
Dependencies
v11.25.0-rc.2
Bug fixes 🐞
- Internal fixes and performance improvements.
Dependencies
- Update gl-native to v11.25.0-rc.2, common to v24.25.0-rc.2.
v11.25.0-rc.1
Breaking changes ⚠️
MapView.setMaximumFpsandMapSurface.setMaximumFpsare now annotated@MainThread. Callers must invoke them from the main thread; off-main callers will see a lint warning.
Features ✨ and improvements 🏁
- [compose] Add Standard
IndoorLabelsfeatureset and indoor configuration options (showIndoor,showIndoorLabels,colorIndoorLabelHighlight,colorIndoorLabelSelect) for the Mapbox Standard style. - Add
useNativeFlingDecelerationoption toGesturesPluginthat usesOverScrollerfor physics-based fling deceleration instead of the legacyeaseToanimation, providing a more natural fling experience. - Throttle
MapboxMappost destroyed warning logs. - Expose
verticalFovinCameraOptions, allowing a custom vertical field of view to be set insetCamera,easeTo, andflyTo. - Allow using color string literals in
interpolateexpressions, including when set on style config at runtime. - Support using
line-progressinline-emissive-strength. - Add support for zoom-and-feature-dependent appearance conditions.
- Add client-side SD/HD road and traffic conflation, hiding redundant roads based on functional road class coverage with stencil-masked transitions and configurable opacity fade.
- Add animated cross-fade transitions for boolean style config options (e.g. switching HD roads on/off).
- Add an option to disallow expensive network requests in
loadStylePack.
Bug fixes 🐞
- Fix a
ConcurrentModificationExceptioncrash that could occur when a plugin was added or removed duringMapView.onDestroy. - Fix frame pacing breaking when the panel switches refresh-rate modes mid-session (VRR or per-UID
frameRateOverride).FpsManagernow updates itsscreenRefreshRatevia aDisplayManager.DisplayListenerinstead of only sampling once atonStart. - [maps-sdk] Fix Vulkan rendering being permanently disabled when the Android surface arrived before the native map was set. The renderer now defers setup and retries via
onMapSet()once the map is available. - Fix a crash that could occur while iterating map interactions when a callback modifies interaction state.
- Fix a use-after-free crash in the map caused by asynchronous tasks accessing a partially destroyed map instance.
- Fix a crash caused by dereferencing a null index buffer when drawing symbols.
- Fix a crash when an overriding terrain source was merged with another source from the same root style.
- Fix missing letters in the middle of text labels placed along lines elevated by terrain.
- Fix aliasing artifacts on lines with borders.
- Fix step expression evaluation when using uniform buffer objects.
- Improve symbol appearances performance for Vulkan backend.
- Fix rare process crashes during HTTP downloads (failure to create a temporary file, and an uncaught error while writing the response).
Dependencies
- Update gl-native to v11.25.0-rc.1, common to v24.25.0-rc.1.
v11.21.7
v11.24.3
v11.21.6
v11.24.2
v11.24.1
11.24.1 May 19, 2026
Features ✨ and improvements 🏁
- Expose
FeaturesetFeature.originalFeatureproperty. - Add Vulkan rendering backend support (Public Preview). The Vulkan backend is published as a separate artifact (
android-core-vulkan/android-core-vulkan-ndk27) that replaces the default OpenGL-basedandroid-core. To use it, replace the default core dependency with the Vulkan variant. In yourbuild.gradle.ktsadd:Known limitations:configurations.all { resolutionStrategy.dependencySubstitution { all { val requested = requested as? ModuleComponentSelector if (requested?.group == "com.mapbox.maps" && (requested.module == "android-core" || requested.module == "android-core-ndk27") ) { val vulkanModule = requested.module.replace("android-core", "android-core-vulkan") useTarget("com.mapbox.maps:$vulkanModule:${requested.version}") } } } }- Android 12 (API 31) or later is recommended. Earlier Android versions may exhibit GPU driver bugs, particularly on devices with Adreno GPUs.
- Only
arm64-v8ais supported. - No automatic fallback to OpenGL.
MapWidget(Android Auto) is not yet supported.- Custom layer API is not yet supported.
MapView.snapshot()is not yet supported.- Rain precipitation effect is not rendered (snow works).
- Add support for rendering landmark models with level-of-detail (LOD), improving performance and memory use for distant 3D landmarks.
- Improve additive blend mode rendering on line layers with high data density, and add the
line-blend-additive-clampstyle property for opting out of dynamic density mapping with a fixed value. - Set a default ambient cache quota of 1 GB and over-evict when the quota is exceeded to reduce eviction churn.
TileStore.create(path)is no longer supported (deprecated since v11.19). Only one TileStore instance per process is now supported.
Bug fixes 🐞
- Fix a crash that could occur when the map is destroyed while asynchronous operations are still in progress.
- Fix the
NetworkRestriction.DISALLOW_EXPENSIVEnetwork option not being respected, which could cause map requests to proceed over metered connections when configured otherwise. - Fix
isMetricUnits/distanceUnitssync in ScaleBar settings DSL generated by KSP codegen. - Fix style import config property updates being lost when applied while a concurrent import URL change was loading.
- Fix incorrect color output when applying a color LUT to premultiplied colors.
- Fix incorrect symbol elevation rendering on Mali GPUs (e.g. Google Pixel 9 Pro XL) caused by insufficient shader precision for large z-offset values.
- Fix a crash in the vector tile layer cache when a sibling tile was destroyed during cache reuse.
- Internal fixes and performance improvements.