Coordination Layer Releases
v3.25.0-rc.1 latest - 02 June, 2026
Features:
- [HD Lite] Introduced an HD ↔ SD animated visual transition of the HD style fragment in case of an SD fallback (the car is located in an HD area but HD guidance could not be built for whatever reason). The transition happens only when the SD routeline appears in the viewport.
- [HD Lite] In SD fallback, the camera now follows SD zoom thresholds instead of HD_LITE ones.
- Exposed
PresentersNavigationContextAppBased#destroy()to release it when the context is no longer needed. We still recommend holding a singlePresentersNavigationContextAppBasedinstance per process. - Added
RouteLineConfig#hidePassedWaypoints(false by default). When enabled, waypoint markers on the route line are removed as the user passes them.
Bug fixes and improvements:
Known issues ⚠️:
Other changes:
v3.7.0-rc.1 - 03 February, 2025
v3.7.0 - 14 February, 2025
Changelog
Features:
Bug fixes and improvements:
- Fixed an issue where travelled part of alternative routes was not rendered correctly (8098).
- Fixed an issue where route line configuration was not applied for HD Lite routes (8090).
- Fixed an issue where route line might have blinked showing the whole route for a moment and only then applying the travelled part (8103).
- Fixed an issue where HD route line was not extended in time
- Fixed several issues with virtual lane groups resulting in incorrect HD route line in areas without HD coverage
- Integrated
isOnRoadflag to improve switching between HD and SD modes
Known issues ⚠️:
Other changes:
v3.7.1 - 28 February, 2025
v3.7.2 - 17 March, 2025
v3.7.3 - 21 March, 2025
v3.7.4 - 27 March, 2025
v3.7.5 - 31 March, 2025
v3.8.0-beta.1 - 03 March, 2025
v3.8.0-rc.1 - 14 March, 2025
v3.8.0 - 28 March, 2025
Changelog
Features:
- Added
OverviewConfig#overviewModeoption to control what camera frames in the overview mode: entire route or just the active leg. - Added
LocationIndicator2DConfig#accuracyConfigto configure accuracy radius presentation. - Added an ability to remove location indicator shadow, top or bearing images: now setting the corresponding images to null disables the image.
Bug fixes and improvements:
- Fixed an issue where the alternative route might have been displayed on top of primary route.
- Fixed an issue where waypoints were not hidden even if their visibility was set to false in config.
- Fixed an issue where with independent inactive legs styling the active leg wasn't changed after reaching a waypoint.
- Renamed
LocationIndicator2DConfig#...imageSizeproperties toLocationIndicator2DConfig#...imageScale.
⚠️ Breaking changes ⚠️:
- Renamed
ScaleExpressions#primaryCasingandScaleExpressions#alternativeCasingproperties toScaleExpressions#primaryBorderandScaleExpressions#alternativeBordercorrespondingly. - Removed
ScaleExpressions#arrowCasingproperty in favour ofScaleExpressions#arrowBorder, having also changed the semantics correspondingly. - Exposed properties in
LocationIndicator3DConfig#BuilderandLocationIndicator2DConfig#Builderto be set directly (applies to Kotlin users). - Replaced setter functions
property(newValue)withsetProperty(newValue)inLocationIndicator3DConfig#BuilderandLocationIndicator2DConfig#Builder(applies more to Java users). - Renamed
LocationIndicator3DConfig#modelUritoLocationIndicator3DConfig#uri. Also applies toLocationIndicator3DConfig#Builder. - Changed type of
LocationIndicator3DConfig#scalefromList<Double>toScaleValue. This allows to set scale both asList<Double>andExpression. - Renamed
ScaleExpressions#primaryCasingandScaleExpressions#alternativeCasingproperties toScaleExpressions#primaryBorderandScaleExpressions#alternativeBordercorrespondingly. - Removed
ScaleExpressions#arrowCasingproperty in favour ofScaleExpressions#arrowBorder, having also changed the semantics correspondingly. - Exposed properties in
LocationIndicator3DConfig#BuilderandLocationIndicator2DConfig#Builderto be set directly (applies to Kotlin users). - Replaced setter functions
property(newValue)withsetProperty(newValue)inLocationIndicator3DConfig#BuilderandLocationIndicator2DConfig#Builder(applies more to Java users). - Renamed
LocationIndicator3DConfig#modelUritoLocationIndicator3DConfig#uri. Also applies toLocationIndicator3DConfig#Builder.
Known issues ⚠️:
Other changes:
v3.8.1 - 31 March, 2025
v3.8.2 - 02 April, 2025
v3.8.3 - 10 April, 2025
v3.8.4 - 17 April, 2025
v3.8.5 - 23 April, 2025
v3.8.6 - 16 May, 2025
v3.9.0-beta.1 - 11 April, 2025
v3.9.0-rc.1 - 24 April, 2025
v3.9.0 - 09 May, 2025
Changelog
Features:
- Added
RouteLineConfig#displayRestrictedRoadSecrionsoption. - Added
RouteLineConfig#scaleExpressionsoption to configure route line width based on zoom level. - Added
LocationIndicator3DConfig#accuracyConfigoption to configure accuracy radius of a 3D location indicator. - Added
RouteLineConfig#arrowVisibleproperty. - Added
RouteLineConfig#enableSharedCacheproperty. - Added
OverviewCameraConfig#overviewAlternativeRoutesproperty that makes camera in ROUTE_OVERVIEW mode frame primary route together with all the alternatives, if any are present.
Bug fixes and improvements:
- Optimized camera update frame animations.
Known issues ⚠️:
Other changes:
v3.9.1 - 19 May, 2025
v3.9.2 - 23 May, 2025
v3.9.3 - 05 June, 2025
v3.9.4 - 12 June, 2025
v3.9.5 - 17 July, 2025
v3.10.0-beta.1 - 22 May, 2025
v3.10.0-beta.2 - 30 May, 2025
v3.10.0-rc.1 - 06 June, 2025
v3.10.0 - 19 June, 2025
Changelog
Features:
Bug fixes and improvements:
- Optimized
NavigationPresenter#configureexecution time. - Optimized performance of long routes with alternatives.
⚠️ Breaking changes ⚠️:
- Changed type of
PresentedRoutesInfo#alternativeRoutesfromSettoList.
Known issues ⚠️:
Other changes:
v3.10.1 - 23 July, 2025
v3.10.2 - 30 July, 2025
v3.11.0-beta.1 - 04 July, 2025
v3.11.0-rc.1 - 21 July, 2025
v3.11.0 - 01 August, 2025
Changelog
Features:
- Added
NavigationPresenterEvent.HdLiteGeometryUpdatedevent, which can be observed viaNavigationPresenter#events. Listen for these events to receive HD Lite geometry of a route for debug purposes. - Added
NavigationPresenterConfig#debugsubconfig, which allows to configure debug tools, for example, whether HD Lite route geometry should be send with history and Copilot events (disabled by default).
Bug fixes and improvements:
- Fixed an issue with SD route line flickering during navigation.
Known issues ⚠️:
Other changes:
v3.11.1 - 08 August, 2025
v3.11.2 - 15 August, 2025
v3.11.3 - 18 August, 2025
v3.11.4 - 29 August, 2025
v3.11.5 - 04 September, 2025
v3.11.6 - 04 September, 2025
v3.11.7 - 11 September, 2025
v3.11.8 - 19 September, 2025
v3.11.9 - 21 October, 2025
v3.12.0-beta.1 - 15 August, 2025
Changelog
Features:
- Supported route callouts. They are disabled by default, but can be enabled and configured via [RouteLineConfig#callouts] property. [CalloutsConfig] allows you to set visibility of callouts and configure the callout view. You can either use and customize default view ([DefaultCalloutAdapterConfig]) or provide fully custom view ([CustomCalloutAdapterConfig]). Callout clicks will be handled under the hood: clicking on a callout makes the corresponding route primary. Note that clicks on custom views are handled by default (and not reported via events), only if the view does not already have any custom OnClick listeners. If it does, Coordinator will not handle OnClick events.
- Added
NavigationPresenterConfig#animationConfigoption, which allows to set general configuration for animations of all map components between matched location updates. - Supported native navigator recreation in Coordinator. No additional interactions with the Coordination Layer API are required from user in this case.
Bug fixes and improvements:
- Improved camera animations smoothness.
- Fixed an issue where camera center might have jumped after exiting a maneuver.
- Fixed an issue where camera center might have jumped after transition from overview or idle mode to following mode.
- Fixed an issue where some of the
CameraConfigoptions might not have been updated at runtime onNavigationPresenter#configurecall. - Smoothed out animations for cases with highly frequent location updates.
Known issues ⚠️:
- Route Callouts will not work properly with HD Lite routes after driving along the route for some time.
Other changes:
v3.12.0-rc.1 - 28 August, 2025
Changelog
Features:
- Supported route callouts for HD Lite routes.
Bug fixes and improvements:
⚠️ Breaking changes ⚠️:
- Updated the NavigationPresenter construction methods. It now accepts two separate context objects -
PresentersScreenContextthat is per-map instance, andPresentersNavigationContextwhich is a single object per MapboxNavigation.
Known issues ⚠️:
- Callouts for alternative routes might be attached to the common part of the primary and alternative routes.
Other changes:
v3.12.0 - 12 September, 2025
Changelog
Features:
- Supported blurred route line feature. See the new
RouteLineConfig#bluroption. - Added
LocationIndicator3DConfig#modelCastShadowsproperty to enable/disable shadows cast by the 3D location indicator. - Added
NavigationPresenterEvent.LocationIndicatorClickedandNavigationPresenterEvent.LocationIndicatorLongClickedevents that allow you to listen for clicks and long clicks on the location indicator. You can observe these events viaNavigationPresenter#events. - Supported route callouts for HD Lite routes.
- Supported route callouts. They are disabled by default, but can be enabled and configured via [RouteLineConfig#callouts] property. [CalloutsConfig] allows you to set visibility of callouts and configure the callout view. You can either use and customize default view ([DefaultCalloutAdapterConfig]) or provide fully custom view ([CustomCalloutAdapterConfig]). Callout clicks will be handled under the hood: clicking on a callout makes the corresponding route primary. Note that clicks on custom views are handled by default (and not reported via events), only if the view does not already have any custom OnClick listeners. If it does, Coordinator will not handle OnClick events.
- Added
NavigationPresenterConfig#animationConfigoption, which allows to set general configuration for animations of all map components between matched location updates. - Supported native navigator recreation in Coordinator. No additional interactions with the Coordination Layer API are required from user in this case.
Bug fixes and improvements:
- Improved camera animations smoothness.
- Fixed an issue where camera center might have jumped after exiting a maneuver.
- Fixed an issue where camera center might have jumped after transition from overview or idle mode to following mode.
- Fixed an issue where some of the
CameraConfigoptions might not have been updated at runtime onNavigationPresenter#configurecall. - Smoothed out animations for cases with highly frequent location updates.
⚠️ Breaking changes ⚠️:
- Updated the NavigationPresenter construction methods. It now accepts two separate context objects -
PresentersScreenContextthat is per-map instance, andPresentersNavigationContextwhich is a single object per MapboxNavigation.
Known issues ⚠️:
Other changes:
v3.12.1 - 29 September, 2025
Changelog
Features:
- Added
RouteLineConfig#hdLite#cutout#aroundLocationIndicatorconfig to customize HD Lite route line cutout around the location indicator improving visual clarity by removing elevated roads, tunnels and 3D objects.
Bug fixes and improvements:
- Fixed an issue where the navigation state might have been lost after NavigationPresenter recreation.
- Fixed an issue where changing some of the route line options at runtime in HD_LITE mode might have resulted in double route line.
Known issues ⚠️:
- HD route object matcher sometimes matches objects slightly shifted relative to HD route on maneuvers.
Other changes:
v3.12.2 - 03 October, 2025
Changelog
Features:
Bug fixes and improvements:
- Fixed an issue where the app crashed if HD Lite was enabled on presenter creation.
- Fixed a known issue of 3.12.1 with HD route object matcher shifted results on maneuvers.
Known issues ⚠️:
Other changes:
v3.12.3 - 21 October, 2025
v3.16.0-beta.1 - 26 September, 2025
Changelog
Notes:
3.16.x is the next version after 3.12.x. For technical reasons, versions 3.13.x, 3.14.x and 3.15.x are skipped. Starting from 3.16.x, the Nav SDK minor version will be aligned with other Mapbox dependencies.
Features:
- Added
LocationIndicatorConfig#interactionsproperty to configure location indicator clicks. - Added
NavigationPresenterEvent#RouteClickedevents to listen for route click events. Note that switching to the selected route happens under the hood: you don't need to do anything on your side. You may use these events for some additional logic, for example, to remember rejected routes.
Bug fixes and improvements:
- Fixed an issue where after the switch to an alternative route the arrows from the new alternative route might have been visible.
Known issues ⚠️:
Other changes:
v3.16.0-rc.1 - 10 October, 2025
Changelog
Features:
Bug fixes and improvements:
- Fixed an issue where
RouteLineConfig#congestionVisibleflag was not applied. - Improved performance of SD -> HD Lite -> SD transitions.
- Fixed an issue where the app crashed if HD Lite was enabled on presenter creation.
- Fixed an issue where
RouteLineConfig#congestionVisibleflag was not applied.
⚠️ Breaking changes ⚠️:
- Removed
FollowingCameraConfig#xxxUpdatesAllowedproperties. You can fix the properties to a single value usingFollowingCameraConfig#overridesinstead.
Known issues ⚠️:
Other changes:
v3.16.0-rc.2 - 17 October, 2025
Changelog
Features:
- Added
OverridesCameraConfig#isFramingManeuverproperty. - Added
CameraConfig#gesturesDetectionEnabledflag andFollowingCameraConfig#gesturesconfig to configure map gestures detection which Coordination Layer does under the hood. If enabled, Coordination Layer will intercept map gestures and process them in a way that is configured throughGesturesConfig, i. e. when zoom gesture is detected (like double-tapping), zoom-in occurs and Presenter camera remains active (in its previous state: either NAVIGATION or ROUTE_OVERVIEW).
Bug fixes and improvements:
- Improved SD - HD Lite switching conditions to minify unnecessary switching based on zoom level.
hdLiteZoomThresholdparameter is now required to be greater than or equal to 15, otherwise an exception will be thrown.
Known issues ⚠️:
Other changes:
v3.16.0 - 23 October, 2025
Changelog
Notes:
3.16.x is the next version after 3.12.x. For technical reasons, versions 3.13.x, 3.14.x and 3.15.x are skipped. Starting from 3.16.x, the Nav SDK minor version will be aligned with other Mapbox dependencies.
Features:
- Added
OverridesCameraConfig#isFramingManeuverproperty. - Added
CameraConfig#gesturesDetectionEnabledflag andFollowingCameraConfig#gesturesconfig to configure map gestures detection which Coordination Layer does under the hood. If enabled, Coordination Layer will intercept map gestures and process them in a way that is configured throughGesturesConfig, i. e. when zoom gesture is detected (like double-tapping), zoom-in occurs and Presenter camera remains active (in its previous state: either NAVIGATION or ROUTE_OVERVIEW). - Added
LocationIndicatorConfig#interactionsproperty to configure location indicator clicks. - Added
NavigationPresenterEvent#RouteClickedevents to listen for route click events. Note that switching to the selected route happens under the hood: you don't need to do anything on your side. You may use these events for some additional logic, for example, to remember rejected routes.
Bug fixes and improvements:
- Improved SD - HD Lite switching conditions to minify unnecessary switching based on zoom level.
hdLiteZoomThresholdparameter is now required to be greater than or equal to 15, otherwise an exception will be thrown.- Fixed an issue where
RouteLineConfig#congestionVisibleflag was not applied. - Improved performance of SD -> HD Lite -> SD transitions.
- Fixed an issue where the app crashed if HD Lite was enabled on presenter creation.
- Fixed an issue where
RouteLineConfig#congestionVisibleflag was not applied. - Fixed an issue where after the switch to an alternative route the arrows from the new alternative route might have been visible.
⚠️ Breaking changes ⚠️:
- Removed
FollowingCameraConfig#xxxUpdatesAllowedproperties. You can fix the properties to a single value usingFollowingCameraConfig#overridesinstead.
Known issues ⚠️:
Other changes:
v3.16.1 - 29 October, 2025
v3.16.2 - 04 November, 2025
v3.16.3 - 14 November, 2025
v3.16.4 - 14 November, 2025
v3.16.5 - 21 November, 2025
v3.16.6 - 21 November, 2025
v3.16.7 - 11 December, 2025
v3.17.0-beta.1 - 13 November, 2025
Changelog
Features:
- Added
RouteLineConfig#waypointsSlotNameandRouteLineConfig#waypointsBelowLayerIdproperties. - Added
LocationIndicator3DConfig#modelReceiveShadowsproperty. - Supported adjusting the following camera zoom using zoom-in/zoom-out gestures while keeping the camera in following mode when
CameraConfig#gesturesDetectionEnabledis true. - Added
PresenterCameraState#gesturesOverridesproperty andNavigationPresenterCamera#resetGesturesOverridesmethod. You can observePresenterCameraState#gesturesOverridesto track the moment when the camera zoom is overridden by gestures and you can reset it at any time by invokingNavigationPresenterCamera#resetGesturesOverrides. - Added
NavigationPresenterState.hdCoverageAvailableproperty. It tells whether HD coverage is available. Note that even if this flag is true,NavigationPresenterState.navDefinitionQualityand map components (like route line) might still be SD due the visual factors (like zoom levels). - Added separate following camera configs for SD and HD_LITE modes. You can set your base config for SD mode with the old API:
presenter.configure {
camera {
following {
// your config here
}
}
}
and by default this will be applied to both SD and HD_LITE modes. However, now you can override a subset of configuration options for HD_LITE mode specifically, for example:
presenter.configure {
camera {
following {
minZoom(13.0)
maxZoom(16.35)
defaultPitch(30.0)
}
hdLite {
minZoom(17.0)
maxZoom(18.0)
}
}
}
will override only minZoom and maxZoom options for HD_LITE mode, while defaultPitch will remain the same as in the base config.
You can reset the value to the default one (passed in the base config) by passing null:
presenter.configure {
camera {
following {
minZoom(13.0)
hdLite {
minZoom(null)
}
}
}
}
This will reset minZoom in HD_LITE mode to use the value from the base config (13.0 in this example).
Note: overrides from FollowingCameraConfig#overrides always supersede any other settings and are applied regardless of the current mode (SD or HD_LITE).
HD_LITE camera settings are activated when NavigationPresenterConfig#navigationQuality is set to HD_LITE and HD coverage is available.
Note that depending on the CameraConfig#hdLiteZoomThreshold value, route line and puck may not yet switch to HD_LITE, for example, with this configuration:
presenter.configure {
hdLiteZoomThreshold(17.0)
camera {
following {
minZoom(13.0)
maxZoom(16.0)
defaultPitch(30.0)
hdLite {
minZoom(16.0)
maxZoom(18.0)
defaultPitch(45.0)
}
}
}
}
once we enter HD-covered area, the HD_LITE camera settings will be applied (minZoom=16.0, maxZoom=18.0, defaultPitch=45.0), but if the camera stays in zoom levels below 17.0 (since its range is 16..18, this is possible: the zoom is chosen under the hood based on the current framing strategy), the route line and puck will still be in SD style. But when the camera zoom changes to 17.0 or higher, they will switch to HD_LITE.
Bug fixes and improvements:
- Fixed an issue where the animation to the set zoom (minZoom, maxZoom, zoom overrides), pitch or padding in following mode might never reach the actual value.
Known issues ⚠️:
Other changes:
v3.17.0-rc.1 - 21 November, 2025
Changelog
Features:
- Added
LocationIndicator3DConfig#emissiveStrengthproperty. - Added HD Lite Cutout APIs for Free Drive mode. Configuration is similar to Active Guidance mode and also supports
maxNumberOfForkOnPathproperty:
configure {
cutout {
hdLite {
aroundLocationIndicator {
freeDrive {
// your config here
}
}
}
}
}
Bug fixes and improvements:
- Fixed an issue where the camera might have jumped when padding changed during the to-following- or to-overview-transition animations.
- Fixed an issue where map components switched to SD when a new route was set or a reroute happened.
- Fixed memory leak in
PresentersScreenContext#setMap(null). - Fixed memory leak in
PresentersNavigationContextwhenMapboxNavigationis destroyed. - Fixed an issue where Maps SDK camera animations might not have been executed correctly immediately after Coordination Layer camera deactivation.
⚠️ Breaking changes ⚠️:
- Moved HD Lite Cutout APIs for Active Guidance:
// before
configure {
routeLine {
hdLite {
cutout {
aroundLocationIndicator {
// your config here
}
}
}
}
}
// now
configure {
cutout {
hdLite {
aroundLocationIndicator {
activeGuidance {
// your config here
}
}
}
}
}
Known issues ⚠️:
Other changes:
v3.17.0-rc.2 - 24 November, 2025
Changelog
Features:
Bug fixes and improvements:
- [HD Lite] Fixed narrow cutout width of tunnels in Free Drive mode.
- [HD Lite] Shifted route line towards non-divergent maneuvers.
Known issues ⚠️:
Other changes:
v3.17.0-rc.3 - 01 December, 2025
Changelog
Features:
- HD matched route objects can be elevated on the bridges and tunnels. To elevate the objects
layer/source that display the HD matched objects should be configured properly :
- layer that displays the objects should be updated :
MapboxMap.addLayerElevationProperty(layer)
- source backing the layer should build features with :
MatchedRouteObjects.buildElevatedFeature()
Bug fixes and improvements:
- [HD Lite] Improved HD Lite performance when using multiple maps.
⚠️ Breaking changes ⚠️:
RouteObjectMatcherObserverreturns list of matched or canceled objects instead of a single object.- Behaviour of the HD
RouteObjectMatcherhas changed. Full list of matchable objects for the whole route can be sent at once. Multiple matching requests are also supported as earlier. All the matching requests are stored internally.RouteObjectMatcherstores all the matching requests internally,RouteObjectMatcherObservernotifies when new parts of the route are HD matched and the next list of objects are matched. NOTE - if route changes, objects won't be rematched automatically andRouteObjectMatcherneeds to be invoked again.
Known issues ⚠️:
Other changes:
v3.17.0 - 04 December, 2025
Changelog
Features:
- Added
FollowingCameraConfig#maxUpdateFrameAnimationDurationandOverviewCameraConfig#maxUpdateFrameAnimationDurationoptions to control the maximum duration of camera update frame animations. - HD matched route objects can be elevated on the bridges and tunnels. To elevate the objects
layer/source that display the HD matched objects should be configured properly :
- layer that displays the objects should be updated :
MapboxMap.addLayerElevationProperty(layer)
- source backing the layer should build features with :
MatchedRouteObjects.buildElevatedFeature()
- Added
LocationIndicator3DConfig#emissiveStrengthproperty. - Added HD Lite Cutout APIs for Free Drive mode. Configuration is similar to Active Guidance mode and also supports
maxNumberOfForkOnPathproperty:
configure {
cutout {
hdLite {
aroundLocationIndicator {
freeDrive {
// your config here
}
}
}
}
}
Bug fixes and improvements:
- [HD Lite] Improved HD Lite performance when using multiple maps.
- [HD Lite] Fixed narrow cutout width of tunnels in Free Drive mode.
- [HD Lite] Shifted route line towards non-divergent maneuvers.
- Fixed an issue where the camera might have jumped when padding changed during the to-following- or to-overview-transition animations.
- Fixed an issue where map components switched to SD when a new route was set or a reroute happened.
- Fixed memory leak in
PresentersScreenContext#setMap(null). - Fixed memory leak in
PresentersNavigationContextwhenMapboxNavigationis destroyed. - Fixed an issue where Maps SDK camera animations might not have been executed correctly immediately after Coordination Layer camera deactivation.
- Fixed an issue where the animation to the set zoom (minZoom, maxZoom, zoom overrides), pitch or padding in following mode might never reach the actual value.
⚠️ Breaking changes ⚠️:
RouteObjectMatcherObserverreturns list of matched or canceled objects instead of a single object.- Behaviour of the HD
RouteObjectMatcherhas changed. Full list of matchable objects for the whole route can be sent at once. Multiple matching requests are also supported as earlier. All the matching requests are stored internally.RouteObjectMatcherstores all the matching requests internally,RouteObjectMatcherObservernotifies when new parts of the route are HD matched and the next list of objects are matched. NOTE - if route changes, objects won't be rematched automatically andRouteObjectMatcherneeds to be invoked again. - Moved HD Lite Cutout APIs for Active Guidance:
// before
configure {
routeLine {
hdLite {
cutout {
aroundLocationIndicator {
// your config here
}
}
}
}
}
// now
configure {
cutout {
hdLite {
aroundLocationIndicator {
activeGuidance {
// your config here
}
}
}
}
}
Known issues ⚠️:
Other changes:
v3.17.1 - 12 December, 2025
Changelog
Features:
Bug fixes and improvements:
- Improved performance on setting route / reroute by reducing unneeded route conversion operations. The effect is even more noticeable when HD Lite is used.
- [HD Lite] Fixed periodical HD Lite route line flickering.
- [HD Lite] Fixed distorted HD Lite route line in some areas.
- [HD Lite] Fixed incorrect location indicator rendering in tunnels when cutout is active.
- Fixed a potential crash:
java.lang.Error: latitude must not be NaN
at com.mapbox.maps.CameraManager.pixelForCoordinate(Native Method)
...
at com.mapbox.navigation.ui.maps.camera.lifecycle.NavigationScaleGestureHandler.adjustFocalPoint(r8-map-id-b124fbe2c97a720500674886cfdfb6feb3a2f8bf543231cb46da0d23739c392a:13)
at com.mapbox.navigation.ui.maps.camera.lifecycle.NavigationScaleGestureHandler.onIndicatorPositionChangedListener$lambda$1(r8-map-id-b124fbe2c97a720500674886cfdfb6feb3a2f8bf543231cb46da0d23739c392a:11)
...
at com.mapbox.navigation.coordination.scope.presenter.map.camera.BaseCameraComponent.setInterpolatedLocation(r8-map-id-b124fbe2c97a720500674886cfdfb6feb3a2f8bf543231cb46da0d23739c392a:10)
at com.mapbox.navigation.coordination.scope.presenter.map.camera.PlatformCameraComponent.setInterpolatedLocation(r8-map-id-b124fbe2c97a720500674886cfdfb6feb3a2f8bf543231cb46da0d23739c392a:6)
at com.mapbox.navigation.coordination.scope.presenter.map.MapComponent.onLocationChanged(r8-map-id-b124fbe2c97a720500674886cfdfb6feb3a2f8bf543231cb46da0d23739c392a:8)
at com.mapbox.navigation.coordination.scope.presenter.map.AnimatorsComponent.onLocationChanged(r8-map-id-b124fbe2c97a720500674886cfdfb6feb3a2f8bf543231cb46da0d23739c392a:24)
at com.mapbox.navigation.coordination.scope.application.animator.NavigationStatusAnimator$animationObserver$1.onAnimationTimerUpdated(r8-map-id-b124fbe2c97a720500674886cfdfb6feb3a2f8bf543231cb46da0d23739c392a:34)```
- Fixed an issue where camera might not have been deactivated when the request to deactivate it happened during the state transition animation.
Known issues ⚠️:
Other changes:
v3.17.2 - 23 December, 2025
Changelog
Features:
Bug fixes and improvements:
- Fixed an awkward transition-to-following animation in framing maneuver mode.
Known issues ⚠️:
Other changes:
v3.17.3 - 25 February, 2026
v3.17.4 - 03 March, 2026
v3.17.5 - 06 March, 2026
v3.18.0-beta.1 - 18 December, 2025
Changelog
Features:
- Added
POINTS_OVERVIEWcamera mode to frame and overview specific geographic points on the map. This mode can be configured viaNavigationPresenter#configureAPI to control camera padding, zoom limits, and points to frame:
presenter.configure {
camera {
pointsOverview {
padding(padding)
maxZoom(maxZoom)
points(points)
}
}
}
Activate POINTS_OVERVIEW camera mode:
presenter.camera.setMode(CameraMode.POINTS_OVERVIEW)
presenterContext.camera.activateCamera(presenter.camera)
- Added
RoutesPreviewPresenter. It allows you to:
- Display and overview routes that are not currently set to the navigator (using
RoutesPreviewPresenter#setRoutesAPI); - Promote routes to the navigator and avoid blinking of route line on the map (using
RoutesPreviewPresenter#promoteRoutesToNavigationAPI); - Configure visual options using
RoutesPreviewPresenter#configureAPI (seeRoutesPreviewPresenterConfig); - Listen to
RouteClickedevents on previewed routes (usingRoutesPreviewPresenter#eventsAPI), note that making the clicked route primary happens under the hood; - Observe
RoutesPreviewPresenter's state (usingRoutesPreviewPresenter#stateAPI) to track currently displayed routes; - Control preview camera (using
RoutesPreviewPresenter#cameraAPI).
Note that this presenter is not currently integrated with preview API from MapboxNavigation (MapboxNavigation.setRoutesPreview), which means that you don't have to use it for preview if it doesn't fit your needs - you can use this presenter separately.
The creation process for RoutesPreviewPresenter is the same as for NavigationPresenter: there are 2 ways to create it (based on whether you you create MapboxNavigation through MapboxNavigationProvider or use MapboxNavigationApp):
val routesPreviewPresenter = RoutesPreviewPresenter.create(
PresentersScreenContext.create(mapboxNavigation),
PresentersNavigationContext.create(mapboxNavigation)
)
or
val routesPreviewPresenter = RoutesPreviewPresenter.create(
PresentersScreenContext.create(),
PresentersNavigationContext.create(mapboxNavigation)
)
- Added base presenter event types:
com.mapbox.navigation.coordination.scope.presenter.RouteClickedandcom.mapbox.navigation.coordination.scope.presenter.RoutesSelectionFailedthat represent route clicks / selection failures captured by any presenter (either Navigation or RoutesPreview). For example, if you want to observe route click events from any presenter (and you don't care which one produce the event), you may write the following code:
merge(
navigationPresenter.events.filterIsInstance<com.mapbox.navigation.coordination.scope.presenter.RouteClicked>(),
previewPresenter.events.filterIsInstance<com.mapbox.navigation.coordination.scope.presenter.RouteClicked>(),
).collect { routeCLickEvent: com.mapbox.navigation.coordination.scope.presenter.RouteClicked ->
// add your logic here
}
, but if you are interested only in route clicks from, for example, NavigationPresenter, you can keep your old code:
navigationPresenter.events.filterIsInstance<NavigationPresenterEvent.RouteClicked>().collect {
}
- Added an ability to override camera animation duration for one specific transition. The fallback duration can be set, as previously, through config (
CameraConfig#modeChangeAnimationDurationorPreviewCameraConfig#transitionAnimationDuration), but for a specific transition you may pass duration override directly toPresentersCameraManager#activateCamera:
screenContext.camera.activateCamera(presenter.camera, NavigationCameraTransitionOptions.Builder().maxDuration(overriddenDuration).build())
- [HD Lite] Added
positionfunction when configuring cutout:presenter.configure { cutout { hdLite { position(MapLayerPosition(...)) } } }
Bug fixes and improvements:
- Fixed an awkward transition-to-following animation in framing maneuver mode.
- Fixed a crash on AppBased presenters destruction.
- Improved camera animators to start interpolating puck and camera positions immediately after MapView change.
- Fixed a crash which might have happened on MapView change if HD Lite mode was active at that moment.
⚠️ Breaking changes ⚠️:
- Renamed camera overview classes to clarify it's for route overview specifically. The
overviewDSL function and related classes are now prefixed withrouteOverview:CameraConfig#overviewproperty →CameraConfig#routeOverviewOverviewCameraConfigclass →RouteOverviewCameraConfig- Configuration DSL:
camera { overview { ... } }→camera { routeOverview { ... } }
This change distinguishes route overview from the new points overview mode.
- Changed the way camera can be activated and deactivated. Now the activation controls live in
PresentersCameraManager(which you can get from screen context:PresentersScreenContext#camera):PresentersCameraManager#activateCameraandPresentersCameraManager#deactivateCurrentCamera.PresentersCameraManager#activateCamerawill under the hood deactivate current active camera and you don't have to do it manually. If you want to enable your custom camera logic, you may deactivate current active presenters camera usingPresentersCameraManager#deactivateCurrentCamera.
Before:
presenter.camera.setActive(true)
After:
screenContext.camera.activateCamera(presenter.camera)
Before:
presenter.camera.setActive(false)
After:
screenContext.camera.deactivateCurrentCamera()
- There is no initially active camera anymore (previously navigation camera was active by default). You need to activate it explicitly at the beginning if you need to:
screenContext.camera.activateCamera(navigationPresenter.camera)
If you want the camera to perform an instant initial animation to the current location, you may override the duration for one specific transition by passing options parameter to activateCamera:
screenContext.camera.activateCamera(navigationPresenter.camera, NavigationCameraTransitionOptions.Builder().maxDuration(0).build())
Known issues ⚠️:
Other changes:
v3.18.0 - 16 January, 2026
Changelog
Features:
- Added
RouteLineConfig#switchRoutesOnClickoption to control whether clicking on an alternative route will automatically make it primary. It is enabled by default. - Added
LocationIndicator3DConfig#modelCutoutRadius,LocationIndicator3DConfig#modelCutoutOpacity,LocationIndicator3DConfig#modelCutoutFadeStart. Set these parameters to create a cutout effect around the 3D location indicator. Note that HD Lite cutout (CutoutConfig#hdLite) is a different type of cutout and applies the effect around the route line as opposed to the circular cutout around the location indicator introduced here. - Added
RouteLineConfig#interactionRadiusoption to configure the radius around the route line where route clicks are detected. - Added
NavigationPresenterState#viewportNavDefinitionQualityto better track what visual components are rendered in the current viewport. - Added
POINTS_OVERVIEWcamera mode to frame and overview specific geographic points on the map. This mode can be configured viaNavigationPresenter#configureAPI to control camera padding, zoom limits, and points to frame:
presenter.configure {
camera {
pointsOverview {
padding(padding)
maxZoom(maxZoom)
points(points)
}
}
}
Activate POINTS_OVERVIEW camera mode:
presenter.camera.setMode(CameraMode.POINTS_OVERVIEW)
presenterContext.camera.activateCamera(presenter.camera)
- Added
RoutesPreviewPresenter. It allows you to:
- Display and overview routes that are not currently set to the navigator (using
RoutesPreviewPresenter#setRoutesAPI); - Promote routes to the navigator and avoid blinking of route line on the map (using
RoutesPreviewPresenter#promoteRoutesToNavigationAPI); - Configure visual options using
RoutesPreviewPresenter#configureAPI (seeRoutesPreviewPresenterConfig); - Listen to
RouteClickedevents on previewed routes (usingRoutesPreviewPresenter#eventsAPI), note that making the clicked route primary happens under the hood; - Observe
RoutesPreviewPresenter's state (usingRoutesPreviewPresenter#stateAPI) to track currently displayed routes; - Control preview camera (using
RoutesPreviewPresenter#cameraAPI).
Note that this presenter is not currently integrated with preview API from MapboxNavigation (MapboxNavigation.setRoutesPreview), which means that you don't have to use it for preview if it doesn't fit your needs - you can use this presenter separately.
The creation process for RoutesPreviewPresenter is the same as for NavigationPresenter: there are 2 ways to create it (based on whether you you create MapboxNavigation through MapboxNavigationProvider or use MapboxNavigationApp):
val routesPreviewPresenter = RoutesPreviewPresenter.create(
PresentersScreenContext.create(mapboxNavigation),
PresentersNavigationContext.create(mapboxNavigation)
)
or
val routesPreviewPresenter = RoutesPreviewPresenter.create(
PresentersScreenContext.create(),
PresentersNavigationContext.create(mapboxNavigation)
)
- Added base presenter event types:
com.mapbox.navigation.coordination.scope.presenter.RouteClickedandcom.mapbox.navigation.coordination.scope.presenter.RoutesSelectionFailedthat represent route clicks / selection failures captured by any presenter (either Navigation or RoutesPreview). For example, if you want to observe route click events from any presenter (and you don't care which one produce the event), you may write the following code:
merge(
navigationPresenter.events.filterIsInstance<com.mapbox.navigation.coordination.scope.presenter.RouteClicked>(),
previewPresenter.events.filterIsInstance<com.mapbox.navigation.coordination.scope.presenter.RouteClicked>(),
).collect { routeCLickEvent: com.mapbox.navigation.coordination.scope.presenter.RouteClicked ->
// add your logic here
}
, but if you are interested only in route clicks from, for example, NavigationPresenter, you can keep your old code:
navigationPresenter.events.filterIsInstance<NavigationPresenterEvent.RouteClicked>().collect {
}
- Added an ability to override camera animation duration for one specific transition. The fallback duration can be set, as previously, through config (
CameraConfig#modeChangeAnimationDurationorPreviewCameraConfig#transitionAnimationDuration), but for a specific transition you may pass duration override directly toPresentersCameraManager#activateCamera:
screenContext.camera.activateCamera(presenter.camera, NavigationCameraTransitionOptions.Builder().maxDuration(overriddenDuration).build())
- [HD Lite] Added
positionfunction when configuring cutout:presenter.configure { cutout { hdLite { position(MapLayerPosition(...)) } } }
Bug fixes and improvements:
- [HD Lite] Fixed possible location indicator and camera jump when entering HD area.
- Fixed an issue where initial preview config might not have been applied.
- Fixed an awkward transition-to-following animation in framing maneuver mode.
- Fixed a crash on AppBased presenters destruction.
- Improved camera animators to start interpolating puck and camera positions immediately after MapView change.
- Fixed a crash which might have happened on MapView change if HD Lite mode was active at that moment.
- Avoid high CPU usage when user location is stationary.
- Improve DR accuracy after sharp turns.
- Update interface for retrieving last voice instructions.
- Incident positions after a mid-leg route refresh now use correct distance calculations.
- Disallow route refreshes in other than Tracking state.
- Native Route Object via Flatbuffers.
- Implement reaction on notification that user-provided-charging-station is not needed.
⚠️ Breaking changes ⚠️:
- Renamed camera overview classes to clarify it's for route overview specifically. The
overviewDSL function and related classes are now prefixed withrouteOverview:CameraConfig#overviewproperty →CameraConfig#routeOverviewOverviewCameraConfigclass →RouteOverviewCameraConfig- Configuration DSL:
camera { overview { ... } }→camera { routeOverview { ... } }
This change distinguishes route overview from the new points overview mode.
- Changed the way camera can be activated and deactivated. Now the activation controls live in
PresentersCameraManager(which you can get from screen context:PresentersScreenContext#camera):PresentersCameraManager#activateCameraandPresentersCameraManager#deactivateCurrentCamera.PresentersCameraManager#activateCamerawill under the hood deactivate current active camera and you don't have to do it manually. If you want to enable your custom camera logic, you may deactivate current active presenters camera usingPresentersCameraManager#deactivateCurrentCamera.
Before:
presenter.camera.setActive(true)
After:
screenContext.camera.activateCamera(presenter.camera)
Before:
presenter.camera.setActive(false)
After:
screenContext.camera.deactivateCurrentCamera()
- There is no initially active camera anymore (previously navigation camera was active by default). You need to activate it explicitly at the beginning if you need to:
screenContext.camera.activateCamera(navigationPresenter.camera)
If you want the camera to perform an instant initial animation to the current location, you may override the duration for one specific transition by passing options parameter to activateCamera:
screenContext.camera.activateCamera(navigationPresenter.camera, NavigationCameraTransitionOptions.Builder().maxDuration(0).build())
Known issues ⚠️:
Other changes:
v3.18.1 - 30 January, 2026
Changelog
Features:
Bug fixes and improvements:
- Fixed an issue where location indicator might have been positioned below waypoints from the RoutesPreviewPresenter.
- Supported setting
LocationIndicator3DConfig#modelCutoutRadius,LocationIndicator3DConfig#modelCutoutOpacity,LocationIndicator3DConfig#modelCutoutFadeStartas zoom-based and pitch-based expressions. - [HD Lite] Fixed an issue when route progress might render incorrectly (e.g. when the route is self intersecting).
⚠️ Breaking changes ⚠️:
- Removed
RouteLineConfig#routeLineBelowLayerIdandRouteLineConfig#routeLineSlotNamein favour ofRouteLineConfig#routeLinePosition. If you used to have code like this:
presenter.configure {
routeLine {
routeLineBelowLayerId("some-layer-id")
routeLineSlotName("some-slot-name")
}
}
, change it to:
presenter.configure {
routeLine {
routeLinePosition(
mapComponentPosition {
layerPosition = LayerPosition(null, "some-layer-id", null)
slot = "some-slot-name"
}
)
}
}
, but note that for most cases you don't have to do that: the default behaviour already guarantees the following:
- Route line is placed in the middle slot if it's present in style.
- Route line is positioned below waypoints.
- Waypoints are positioned below location indicator.
- Waypoints and location indicator are positioned on top of everything (above the "top" slot).
- Using property access syntax for setting
LocationIndicator3DConfig#modelCutout...properties now requiresExpressiontype instead ofDouble. For example, if you used to have:
config3D {
modelCutoutRadius = 10.0
}
change it to
config3D {
setModelCutoutRadius(10.0)
}
or
config3D {
modelCutoutRadius = literal(10.0)
}
Known issues ⚠️:
Other changes:
v3.18.2 - 12 February, 2026
v3.18.3 - 01 April, 2026
v3.19.0-beta.1 - 30 January, 2026
Changelog
Features:
- Added
PresentersScreenContext#mapPositionReferences. You may use the slots defined there to position your custom layers. - Exposed
PresentersNavigationContext#configuremethod to allow configuration of navigation context settings per MapboxNavigation instance. These settings apply to all presenters that share the same PresentersNavigationContext, including multiple presenters of the same type (e.g., multiple NavigationPresenters for different screens/PresentersScreenContexts). Currently supports configuring route congestion ranges:
navigationContext.configure {
routeLowCongestionRange(0..39)
routeModerateCongestionRange(40..59)
routeHeavyCongestionRange(60..79)
routeSevereCongestionRange(80..100)
}
- Updated
POINTS_OVERVIEWcamera mode to now support custombearingandpitchviaCameraOptions:
presenter.configure {
camera {
pointsOverview {
pitch(padding)
bearing(maxZoom)
}
}
}
Bug fixes and improvements:
- Fixed an issue where the
MapIdleevents might not have been emitted in some cases even when the map was idle. - Fixed an issue where disabling
RouteLineConfig#switchRoutesOnClickdid not disable clicks on route callouts. - Fixed an issue where in some cases the initial camera animation might have not been instant.
- Fixed an issue where an alternative route line might have been forever stuck on the map after routes promotion.
- Fixed a memory leak of
AnimationTimerobservers. - Optimized
RoutesPreviewPresenter#setRoutesto skip updates for a list of routes if the same list is already set.
⚠️ Breaking changes ⚠️:
- Removed congestion range configuration from
RouteLineConfigin favour ofNavigationContextConfig. If you used to configure congestion ranges per presenter like this:
presenter.configure {
routeLine {
lowCongestionRange(0..39)
moderateCongestionRange(40..59)
heavyCongestionRange(60..79)
severeCongestionRange(80..100)
}
}
, you should now configure them once per MapboxNavigation instance via PresentersNavigationContext:
navigationContext.configure {
routeLowCongestionRange(0..39)
routeModerateCongestionRange(40..59)
routeHeavyCongestionRange(60..79)
routeSevereCongestionRange(80..100)
}
This configuration will apply to all presenters sharing the same PresentersNavigationContext, including multiple presenters of the same type for different screens.
Known issues ⚠️:
Other changes:
v3.19.0-rc.1 - 13 February, 2026
Changelog
Features:
Bug fixes and improvements:
- Fixed an issue where transition-to-following animation might not have been cancelled properly.
- Fix incorrect navigation arrow head size when
pixelRatiois not equal to density.
Known issues ⚠️:
Other changes:
v3.19.0 - 27 February, 2026
Changelog
Features:
- [HD Lite] Enhanced
CutoutWidth.Autowithpaddingargument (0.0 by default) to apply additional padding for the cutout in meters. - [HD Lite] Exposed
opacityAPI (settingDoubleorExpression) inCutoutAroundLocationIndicatorActiveGuidanceConfigUpdateBuilderandCutoutAroundLocationIndicatorFreeDriveConfigUpdateBuilder. - Added
PresentersScreenContext#mapPositionReferences. You may use the slots defined there to position your custom layers. - Exposed
PresentersNavigationContext#configuremethod to allow configuration of navigation context settings per MapboxNavigation instance. These settings apply to all presenters that share the same PresentersNavigationContext, including multiple presenters of the same type (e.g., multiple NavigationPresenters for different screens/PresentersScreenContexts). Currently supports configuring route congestion ranges:
navigationContext.configure {
routeLowCongestionRange(0..39)
routeModerateCongestionRange(40..59)
routeHeavyCongestionRange(60..79)
routeSevereCongestionRange(80..100)
}
- Updated
POINTS_OVERVIEWcamera mode to now support custombearingandpitchviaCameraOptions:
presenter.configure {
camera {
pointsOverview {
pitch(padding)
bearing(maxZoom)
}
}
}
Bug fixes and improvements:
- Fixed an issue where it was impossible to zoom in on the map in overview mode using the double-tap gesture.
- Changed default value of
RouteLineConfig#lineDepthOcclusionFactorto be an expression to improve HD Lite routeline rendering in tunnels. - Exposed additional setter for
RouteLineConfigto setlineDepthOcclusionFactorasExpression. Setter takingDoubleargument remained untouched. - [HD Lite] Changed default values of some cutout properties (like
widthFadeFractionandopacity) to improve HD Lite cutout experience. - [HD Lite] Exposed additional setter for
CutoutAroundLocationIndicatorFreeDriveConfigUpdateBuilderandCutoutAroundLocationIndicatorActiveGuidanceConfigUpdateBuilderto setwidthFadeFractionasExpression. Setter takingDoubleargument remained untouched. - Fixed an issue where transition-to-following animation might not have been cancelled properly.
- Fix incorrect navigation arrow head size when
pixelRatiois not equal to density. - Fixed an issue where the
MapIdleevents might not have been emitted in some cases even when the map was idle. - Fixed an issue where disabling
RouteLineConfig#switchRoutesOnClickdid not disable clicks on route callouts. - Fixed an issue where in some cases the initial camera animation might have not been instant.
- Fixed an issue where an alternative route line might have been forever stuck on the map after routes promotion.
- Fixed a memory leak of
AnimationTimerobservers. - Optimized
RoutesPreviewPresenter#setRoutesto skip updates for a list of routes if the same list is already set.
⚠️ Breaking changes ⚠️:
- Changed
RouteLineConfig#lineDepthOcclusionFactortype fromDoubletoExpression. - [HD Lite] Changed
CutoutWidth.Autofromobjectto regular class as it now accepts an argument. - [HD Lite] Changed
CutoutAroundLocationIndicatorFreeDriveConfig#widthFadeFractionandCutoutAroundLocationIndicatorActiveGuidanceConfig#widthFadeFractionfromDoubletoValue. - Removed congestion range configuration from
RouteLineConfigin favour ofNavigationContextConfig. If you used to configure congestion ranges per presenter like this:
presenter.configure {
routeLine {
lowCongestionRange(0..39)
moderateCongestionRange(40..59)
heavyCongestionRange(60..79)
severeCongestionRange(80..100)
}
}
, you should now configure them once per MapboxNavigation instance via PresentersNavigationContext:
navigationContext.configure {
routeLowCongestionRange(0..39)
routeModerateCongestionRange(40..59)
routeHeavyCongestionRange(60..79)
routeSevereCongestionRange(80..100)
}
This configuration will apply to all presenters sharing the same PresentersNavigationContext, including multiple presenters of the same type for different screens.
Known issues ⚠️:
Other changes:
v3.19.1 - 13 March, 2026
v3.19.2 - 27 March, 2026
v3.19.3 - 01 April, 2026
v3.19.5 - 03 April, 2026
v3.19.6 - 13 April, 2026
v3.19.7 - 16 April, 2026
v3.20.0-rc.1 - 06 March, 2026
Changelog
Features:
- [HD Lite] Exposed
enableAlternativeRoutes(false by default) when configuring cutout in active guidance. When enabled, the cutout will also be applied to alternative routes.
Bug fixes and improvements:
Known issues ⚠️:
Other changes:
v3.20.0 - 17 March, 2026
Changelog
Features:
- [HD Lite] Exposed
enableAlternativeRoutes(false by default) when configuring cutout in active guidance. When enabled, the cutout will also be applied to alternative routes.
Bug fixes and improvements:
- [HD Lite] Fixed an issue when traffic was not refreshed.
- [HD Lite] Fixed an issue when route line might not be rendered if there was a route loop nearby.
- [HD Lite] Improved precision of maneuver arrows. Now they match the HD route line.
Known issues ⚠️:
Other changes:
v3.20.1 - 27 March, 2026
v3.21.0-rc.1 - 25 March, 2026
Changelog
Features:
- Exposed
NavigationContextConfig#calculateRestrictedRoadSections(default value is true) to allow calculating restricted road sections on the routes. Displaying this can be controlled withRouteLineConfig#displayRestrictedRoadSecrions(default value is true) for every individualNavigationPresenterorRoutePreviewPresenter. - [HD Lite] Exposed
tunnelDimmingOpacityAPI (settingDoubleorExpression) andtunnelDimmingPositionAPI inCutoutAroundLocationIndicatorActiveGuidanceConfigUpdateBuilderandCutoutAroundLocationIndicatorFreeDriveConfigUpdateBuilder. The dimming effect helps improve depth perception and visual comfort in tunnel environments.
Bug fixes and improvements:
- Switched to Android
Choreogrpaheras a baseline for running animations.
Known issues ⚠️:
Other changes:
v3.21.0 - 02 April, 2026
Changelog
Features:
- [HD Lite] Exposed
shadowOpacityAPI (settingDoubleorExpression) inCutoutAroundLocationIndicatorActiveGuidanceConfigUpdateBuilderandCutoutAroundLocationIndicatorFreeDriveConfigUpdateBuilder. - Exposed
NavigationContextConfig#calculateRestrictedRoadSections(default value is true) to allow calculating restricted road sections on the routes. Displaying this can be controlled withRouteLineConfig#displayRestrictedRoadSecrions(default value is true) for every individualNavigationPresenterorRoutePreviewPresenter. - [HD Lite] Exposed
tunnelDimmingOpacityAPI (settingDoubleorExpression) andtunnelDimmingPositionAPI inCutoutAroundLocationIndicatorActiveGuidanceConfigUpdateBuilderandCutoutAroundLocationIndicatorFreeDriveConfigUpdateBuilder. The dimming effect helps improve depth perception and visual comfort in tunnel environments.
Bug fixes and improvements:
- [HD Lite] Fixed an issue with
RouteLineConfig#lineDepthOcclusionFactorbeing 0.0 by default instead of a zoom-based expression. - Switched to Android
Choreogrpaheras a baseline for running animations.
Known issues ⚠️:
Other changes:
v3.21.1 - 13 April, 2026
v3.21.2 - 17 April, 2026
Changelog
Features:
- [HD Lite] Exposed
behindDistanceAPI (default 15 meters) inCutoutAroundLocationIndicatorActiveGuidanceConfigUpdateBuilderandCutoutAroundLocationIndicatorFreeDriveConfigUpdateBuilder.
Bug fixes and improvements:
Known issues ⚠️:
Other changes:
v3.21.3 - 24 April, 2026
Changelog
Features:
Bug fixes and improvements:
- [HD Lite] Apply
NavigationContextConfig#fallbackHdLiteToSdTimeoutonly on reroutes to prevent missing routeline after navigation start.
Known issues ⚠️:
Other changes:
v3.21.4 - 06 May, 2026
v3.21.5 - 18 May, 2026
Changelog
Features:
- [HD Lite] Introduced an HD ↔ SD animated visual transition of the HD style fragment in case of an SD fallback (the car is located in an HD area but HD guidance could not be built for whatever reason). The transition happens only when the SD routeline appears in the viewport.
- [HD Lite] In SD fallback, the camera now follows SD zoom thresholds instead of HD_LITE ones.
Bug fixes and improvements:
Known issues ⚠️:
Other changes:
v3.21.6 - 29 May, 2026
v3.21.7 - 02 June, 2026
v3.22.0-rc.1 - 13 April, 2026
v3.22.0 - 17 April, 2026
v3.22.1 - 27 April, 2026
Changelog
Features:
Bug fixes and improvements:
- [HD Lite] Apply
NavigationContextConfig#fallbackHdLiteToSdTimeoutonly on reroutes to prevent missing routeline after navigation start.
Known issues ⚠️:
Other changes:
v3.22.3 - 07 May, 2026
v3.23.0-rc.1 - 21 April, 2026
v3.23.0 - 30 April, 2026
Changelog
Features:
- [HD Lite] Exposed
MapboxNavigation#requestHDGraphDataUpdateandMapboxNavigation#getHDGraphVersionInfoAPIs to check for HD graph updates on the server and retrieve the current HD graph version.
Bug fixes and improvements:
- [HD Lite] Apply
NavigationContextConfig#fallbackHdLiteToSdTimeoutonly on reroutes to prevent missing routeline after navigation start.
Known issues ⚠️:
Other changes:
v3.23.1 - 12 May, 2026
v3.24.0-alpha.2
v3.24.0-alpha.3
v3.24.0-alpha.6 - 04 May, 2026
v3.24.0-alpha.7 - 05 May, 2026
v3.24.0-alpha.8 - 05 May, 2026
v3.24.0-rc.1 - 05 May, 2026
Changelog
Features:
- [HD Lite] Exposed
minTunnelLengthForDimmingAPI (default100.0meters) inCutoutAroundLocationIndicatorActiveGuidanceConfigUpdateBuilderandCutoutAroundLocationIndicatorFreeDriveConfigUpdateBuilder. - [HD Lite] Added the feature to fade cutout tunnel dimming effect when the camera is moved away from the location indicator. Background dimming layer now fades out proportionally to the camera-to-ego distance, reaching zero at 200 meters.
Bug fixes and improvements:
- [HD Lite] Fixed an issue with
CutoutAroundLocationIndicatorActiveGuidanceConfigUpdateBuilder#enableAlternativeRoutesnot working properly when enabled.
Known issues ⚠️:
Other changes: