Release Notes

Version 2.4.1 - 08/07/2026

Discover the improvements and new features included in the following version.

Share your thoughts on this release by using the feedback button located at the bottom of the page.

Fixes
  • Fix an issue where the vehicle horizon service could enter a malfunctioning state, requiring a restart, when navigating through complex multi-lane intersections.

Version 2.4.0 - 06/07/2026

General

Breaking changes
  • Starting 6 months after the next NavSDK release, initializing Telemetry will become mandatory.
  • Rename com.tomtom.sdk.common.configuration.OfflineMapConfiguration to com.tomtom.sdk.common.configuration.RegionStoreConfiguration.
Updates
  • Migrate the Map Display Error Dialog and Marker details dialog components to Compose Bottom Sheets, providing a more consistent look and feel across dialogs.
  • com.tomtom.sdk.common.configuration.CoreConfiguration.Builder2 is now available in General Availability.
  • com.tomtom.sdk.common.configuration.SdkConfigurationFactories.kt.buildSdkConfiguration(Context,String,suspend()->UserConsent,String=,CoreConfiguration.BuilderV2.()->Unit=,CacheStorageConfiguration.Builder.()->Unit=):SdkConfiguration is now available in General Availability.
  • com.tomtom.sdk.common.configuration.SdkConfigurationFactories.kt.buildSdkConfiguration(Context,String,suspend()->UserConsent,String=,CoreConfiguration.BuilderV2.()->Unit=,CacheStorageConfiguration.Builder.()->Unit=,RegionStoreConfiguration.Builder.() -> Unit):SdkConfiguration is now available in General Availability.
  • com.tomtom.sdk.common.configuration.RegionStoreConfiguration is now available in General Availability.
Fixes
  • Fix a dex2oat verifier failure that occurred.

    when integrating NavSDK into an Android Automotive (AAOS) system image. No action is required.

  • Logs no longer cut off if their size exceeds 4KB and are instead split into multiple lines.

  • OSE Automotive: Fix button issue when planning route.

Deprecations
  • Deprecate com.tomtom.sdk.common.configuration.CoreConfiguration.Builder.
  • Deprecate the com.tomtom.sdk.common.configuration.SdkConfigurationFactories.kt.buildSdkConfiguration(Context,String,String=,CoreConfiguration.Builder.()->Unit=,CacheStorageConfiguration.Builder.()->Unit=):SdkConfiguration method.

Data Management

Updates
  • The following APIs are now available in General Availability:

    • method com.tomtom.sdk.datamanagement.nds.NdsStore.setUpdatesEnabled
    • property com.tomtom.sdk.datamanagement.nds.NdsStore.updater
    • method com.tomtom.sdk.datamanagement.nds.NdsStoreConfiguration.buildUpdateConfiguration
    • method com.tomtom.sdk.datamanagement.nds.update.NdsStoreUpdateConfigurationFactories.kt.buildNdsStoreUpdateConfiguration
    • property com.tomtom.sdk.datamanagement.nds.NdsStoreConfiguration.updateConfiguration
    • class com.tomtom.sdk.datamanagement.nds.update.NdsStoreUpdateConfiguration
    • secondary constructor com.tomtom.sdk.datamanagement.nds.update.compositeregion.CompositeRegionsUpdater
  • The factory function com.tomtom.sdk.datamanagement.nds.NdsStoreFunctions.kt.NdsStore is now available in General Availability.

  • Update the offline map developer guides with the latest configuration and initialization steps.

Fixes
  • com.tomtom.sdk.datamanagement.navigationtile.NavigationTileStore now only accepts URLs with an http or https scheme, preventing configuration errors from unsupported URL schemes.

  • com.tomtom.sdk.datamanagement.nds.region.RegionUpdater no longer blocks the UI thread, which could previously cause the app to become unresponsive. This includes:

    • findRegionsAroundPosition() and findRegionsAlongPolyline() no longer block the UI thread
    • calculateUninstallSize() no longer blocks the caller's thread
    • calculateUninstallSize() and calculateDownloadSize() now return more possible MapUpdateError values
  • Fix a rare crash (ConcurrentModificationException) in com.tomtom.sdk.datamanagement.nds.update.compositeregion.CompositeRegionsUpdater that could occur when region-update callbacks were processed concurrently.

  • Fix an issue where the SDK could not recover from a missing map keystore folder.

  • Fix several rare crashes that could occur during initialization of the NDS.Live tile store, for example due to unexpected encryption or persistent-cache errors.

  • Fix an issue where automatic map updates skipped updating regions around the vehicle's current location if a route was already active when updates were enabled.

  • Fix an issue where the SDK could saturate a CPU core and degrade overall device performance while a map was downloading and no onboard map was yet available.

Location

Updates
  • com.tomtom.sdk.location.LocationProvider no longer throws an IllegalStateException when removeOnLocationUpdateListener or removePredictionsUpdateListener is called after the provider has been closed.

Map Visualization

Breaking changes
  • Traffic sign and traffic light visualization in com.tomtom.sdk.map.display.visualization.navigation.NavigationVisualization is now disabled by default.
Fixes
  • Fix an issue where certain navigation visualization elements did not update automatically in Jetpack Compose apps, because com.tomtom.sdk.map.display.visualization.navigation.NavigationVisualizationAdapter was not connected to the underlying data flows.
  • Fix an issue where the alternative-route time-difference marker remained visible on the map after requesting a distinct alternative route while driving.
  • The map no longer pans unexpectedly when performing a QuickScale (double-tap-and-drag) gesture.
  • Fix a style-loading failure that could occur when loading the Satellite map style.
  • Fix a crash that could occur during initialization of com.tomtom.sdk.map.display.visualization.safetylocation.SafetyLocationVisualization.
  • Fix an issue in Jetpack Compose-based map visualization that could cause incorrect traffic-state tracking across recompositions.
  • You can now use multiple com.tomtom.sdk.map.display.compose.TomTomMap composables within a single Compose layout, each with its own independent map visualization state.
  • Map images are now rendered at the correct resolution, using the display context DPI instead of the application context DPI.
  • Fix an issue where com.tomtom.sdk.map.display.compose.TomTomMap could keep holding map resources in memory after the composable was removed from the UI.
  • Fix a crash (IllegalStateException) that could occur when a message was processed after messaging had been shut down.
  • Fix a crash that could occur when tapping a traffic incident (such as a jam or roadworks) on the map while using TomTom Orbis Maps V2.
  • Prevent unsupported configurations that mix com.tomtom.sdk.maps:map-display-standard and com.tomtom.sdk.maps:map-display-premium unless you use the duo flavor. This means you now need to include only one renderer module in your app, or use the duo flavor when you intentionally bundle both.
  • You can now use GeoJSON-based Visualization modules with the Satellite map style.
  • Fix a crash that could occur when removing certain map visualization elements (such as range visualizations) from the map.
  • Stop IllegalStateException: Instance has been closed from being thrown when a route progress update arrives after navigation visualization has been stopped.
  • Fix a crash in com.tomtom.sdk.map.display.compose.TomTomMap when the composable left composition before the map finished initializing and was re-added within the same ViewModelStoreOwner.
  • Improve map tile conversion performance, reducing the time it takes for map tiles to become available for rendering.
  • Retry initialization with backoff when the renderer rejects the initial map style, so the map no longer stays blank after a transient style-load failure.
Deprecations
  • The contents of the com.tomtom.sdk.maps.visualization:navigation module have been relocated to com.tomtom.sdk.maps.visualization:visualization. Remove the dependency on com.tomtom.sdk.maps.visualization:navigation.
  • com.tomtom.sdk.map.display.marker.MarkerProperties.balloonText is now deprecated without replacement. You can now anchor any custom Compose UI element to a geographic coordinate on the map using com.tomtom.sdk.map.display.compose.MapViewState.getScreenOffsetForGeoPoint() and Modifier.offset. See the Markers guide for a complete example.
Breaking changes
  • com.tomtom.sdk.navigation.resumesnapshotrenewer.NavigationResumeSnapshotRenewer no longer saves a navigation resume snapshot in response to com.tomtom.sdk.navigation.RouteUpdatedListener2 events when com.tomtom.sdk.navigation.resumesnapshotrenewer.NavigationResumeSnapshotRenewerOptions.saveInterval is set to Duration.INFINITE.

    Setting saveInterval to Duration.INFINITE now disables snapshot saves triggered by route updates, reducing flash storage I/O by avoiding writes for dynamic route data (such as traffic, ETA, or section refreshes) that become outdated once the route is paused. Snapshots are still saved on active route change, waypoint arrival or departure, and navigation start. Unless you were relying on saveInterval being Duration.INFINITE, there is nothing to worry about.

New features
  • Offline-only navigation can now be set up using the new initialization API.

    Simple initialization example:

    1tomTomNavigation =
    2 OfflineTomTomNavigationFactory.create(
    3 Configuration(
    4 context = context,
    5 apiKey = TOMTOM_API_KEY,
    6 locationProvider = locationProvider,
    7 ndsStore = ndsStore,
    8 ),
    9 )

    Advanced initialization example:

    1tomTomNavigation = OfflineTomTomNavigationFactory.create(
    2 Configuration(
    3 context = context,
    4 apiKey = TOMTOM_API_KEY,
    5 locationProvider = locationProvider,
    6 ndsStore = ndsStore,
    7 betterProposalAcceptanceMode = BetterProposalAcceptanceMode.Automatic,
    8 safetyLocationsConfiguration = safetyLocationsConfiguration,
    9 hazardsConfiguration = hazardsConfiguration,
    10 )
    11)
Updates
  • The following APIs are now in General Availability:

    • com.tomtom.sdk.datamanagement.nds.update.NdsStoreUpdaterConfiguration.manualUpdateNetworkConfig
Fixes
  • Backport fix for error in protobuf conversion error of CLaneInfo attribute.
  • Disable Continue Interim feature toggle by default.
  • Route updates no longer fail when navigating near waypoints.
  • Fix an issue where a resumed navigation session used the wrong instruction language instead of the user's preferred language.
  • Respect initial arrival charge at first charging station when it is under minChargeAtCharginsStations.
  • When replanning an EV alternative route, the system now correctly respects the initial arrival charge at the first charging station, consistent with active route replanning behaviour.
  • Fix confusing road numbers appearing in traffic jam warnings in Japan, South Korea, and Taiwan.
  • Fix early guidance announcement trigger distance on high-speed urban roads.
  • Fix an issue where the speed limit displayed inside roundabouts could be missing or incorrect when the underlying map data did not provide one.
  • Fix a logic error in complex intersection modeling that could cause the predicted road ahead (horizon) to be inaccurate, requiring an unexpected reset when the vehicle deviated from the incorrect prediction.
  • Fix an issue where a custom cache directory configured via com.tomtom.sdk.common.configuration.SdkConfiguration.cacheStorageConfiguration was ignored, and the SDK used the default cache location instead.
  • Fix an issue where the predicted vehicle path shown on the map had a visible gap immediately after passing a decision point (such as a roundabout entry).
Deprecations
  • com.tomtom.sdk.navigation.RouteReplanner.update(), RouteReplanner.fullReplan(), and RouteReplanner.incrementRouteContents() are deprecated and will be removed 6 months after the next release. RouteReplanner.backToRoute() has been moved from an experimental to an internal API and is no longer part of the public interface.

Routing

Updates
  • You can now receive turn-by-turn instructions incrementally while planning a route with TomTom Orbis Maps online, reducing the time before the first instruction becomes available.
Fixes
  • Fix an issue where route planning could fail with an internal deserialization error when converting a planned route.
  • Fix an issue in EV routing where charging station data found through offline search was incorrectly forwarded to the route-planning engine.
  • Fix a missing reachableOffset property in com.tomtom.sdk.routing.route.Summary for routes planned with Long Distance EV Routing when using TomTom Orbis Maps V2.
  • Fix a deadlock that could occur when the route planner was closed while a route was still being calculated.
  • Traffic sections now display correctly when using v3 online routing. Previously, traffic sections with v3-specific category types were silently dropped during deserialization.
  • Route progress points are no longer missing from EV routing responses. Previously, a server-side interaction between wildcard field expansion and the exclude header could cause progress data to be omitted.
  • Reject map-matched events that reference non-existent map segments, improving the robustness of route data processing.
  • Online instruction maneuver points and route path points are now returned in GeoJSON format.
  • Remove @RestrictToExtendedFlavor(ExternalScope.LIBRARY_GROUP) from com.tomtom.sdk.routing.route.section.traffic.Cause.
Deprecations
  • com.tomtom.sdk.navigation.NavigationOptions.minDeviationDistance is deprecated in favor of com.tomtom.sdk.navigation.NavigationOptions.minDeviationTime. Update your code to use minDeviationTime instead.
Fixes
  • Fix an issue where custom POIs did not work with offline search when no map data was available.
  • Fix an issue where tapping a POI on the map to view its details could fail because the SDK could not parse the response from the search service.
  • Fix EV search failing when the backend returns an unrecognized value in the tariff restriction reservation policy field.

Telemetry

Deprecations
  • com.tomtom.sdk.telemetry.Consent and the com.tomtom.sdk.telemetry.Telemetry.initialize(context, configProvider) overload are deprecated.

    Before:

    Telemetry.initialize(context, configProvider)
    Telemetry.userConsent = Consent.Personalized

    After:

    1Telemetry.initialize(
    2 context,
    3 configProvider,
    4 locationProvider,
    5 initialConsent = UserConsent.TelemetryOn,
    6)
    7
    8// Later, when the end-user changes their preference:
    9Telemetry.setConsent(UserConsent.LocationOnly)

    Important:

    • When using the consent-aware APIs (Telemetry.initializeoverloads that accept initialConsent / getInitialConsent, Telemetry.consent and Telemetry.setConsent), Telemetry must be initialized (or explicitly opted out by setting the consent to UserConsent.TelemetryOff) before using SDK components that may post telemetry events. Otherwise, the application may crash when telemetry events are posted.
    • Telemetry initialization can only be performed once. Any subsequent attempt to reinitialize Telemetry will result in an exception.
    • Start the LocationProvider updates before initializing Telemetry to avoid warnings.
  • com.tomtom.sdk.telemetry.RestrictedTelemetryConfigProvider is deprecated and will be removed 6 months after the next release.

  • com.tomtom.sdk.telemetry.RestrictedTelemetryConfigProvider migration instructions:

    Prerequisite:

    First, migrate to the consent-aware Telemetry.initialize API, which has its own migration steps. See the Telemetry.initialize deprecation documentation for details.

    Before:

    Telemetry.initialize(context, RestrictedTelemetryConfigProvider(context, apiKey))

    After:

    • Use DefaultTelemetryConfigProvider instead and specify UserConsent.LocationOnly:
    1Telemetry.initialize(
    2 context,
    3 DefaultTelemetryConfigProvider(context, apiKey),
    4 locationProvider,
    5 initialConsent = UserConsent.LocationOnly,
    6)

    Behavioral difference:

    • Setting the consent to UserConsent.LocationOnly ensures that only location events are allowed, maintaining the same behavior as RestrictedTelemetryConfigProvider.

    • It is the integrator's responsibility to limit the end-user consent options to UserConsent.TelemetryOff and UserConsent.LocationOnly. Allowing the end-user to choose UserConsent.TelemetryOn will send all events, which contradicts the use-case of this construct.

Traffic

Fixes
  • Fix a crash during SDK initialization that could occur when an invalid java.util.Locale was provided in the configuration. The SDK now validates the locale and falls back to a default if it is invalid.

Vehicle

Updates
  • Improve the error message shown when consumption options are set via com.tomtom.sdk.vehicle.VehicleProvider without also providing speedConsumption, making the misconfiguration easier to diagnose.
Fixes
  • You can now set electric-vehicle speed-consumption curve values up to 3000 Wh/km for speeds of 100 km/h and above. Previously all values were capped at 750 Wh/km, which caused route planning to fail for high-consumption vehicles such as those towing heavy trailers. Values below 100 km/h are still capped at 750 Wh/km.
Removals
  • Remove deprecated com.tomtom.sdk.vehicle.ChargingConnector.copy() method.
  • Remove deprecated com.tomtom.sdk.vehicle.ChargingConnector destructuring declarations.
  • Remove deprecated com.tomtom.sdk.vehicle.ChargingParameters.copy() method.
  • Remove deprecated com.tomtom.sdk.vehicle.ChargingParameters destructuring declarations.

Virtual Horizon

Fixes
  • Fix an issue where safety camera icons (and other horizon-based map elements) could flicker or blink on the map due to map data updates reassigning internal element identifiers.
  • Fix an issue where the speed limit (and other road information) could stop being displayed after exiting a tunnel, until a route deviation was made.
  • Report a speed limit inside roundabouts that previously had none, derived from the lower of the entry and exit limits (capped at 40 km/h urban / 60 km/h non-urban).
Deprecations
  • Deprecate com.tomtom.sdk.navigation.horizon.elements.HorizonElement.id in the interface and all GA horizon elements.