Based on android-maps-compose 8.3.0.
SDK Versions:
- Google Maps iOS SDK: 10.8.0
- Google Play Services Maps: 20.0.0
- iOS: Fix
newLatLngBoundspadding interpretation -CameraUpdateFactory.newLatLngBoundstakes padding in physical pixels (Android SDK convention), but on iOS the value was passed unscaled tocameraForBounds:insets:, which expects points. On 2-3x displays the effective padding was inflated by the screen scale, and when the insets exceeded the viewport the SDK silently fell back to minimum zoom, showing the whole world. The padding is now converted via the view's display scale, so the same value produces the same visual result on both platforms. If you previously worked around this by pre-dividing the padding on iOS, remove the workaround (#12)
Based on android-maps-compose 8.3.0.
SDK Versions:
- Google Maps iOS SDK: 10.8.0
- Google Play Services Maps: 20.0.0
WmsTileOverlaycomposable - Cross-platform Web Map Service (WMS) tile overlay support inkmp-maps-compose-utils. Converts tile coordinates to EPSG:3857 bounding boxes and fetches WMS tiles via platform-specific HTTP (ports googlemaps/android-maps-compose#884)
- iOS: Fix dynamic MapProperties and MapUiSettings not updating - Properties like
mapType,isTrafficEnabled, and UI settings were captured once during subcomposition setup and never updated on iOS. IntroducedMapUpdaterStatefollowing the android-maps-compose pattern to ensure dynamic changes are reflected (regression since 0.3.0)
- Applied Compose stability configuration to
kmp-maps-compose-utilsmodule, matching upstream (ports googlemaps/android-maps-compose#874) - Updated maps-compose to 8.3.0, Kotlin to 2.3.20, Compose Multiplatform to 1.10.3, Gradle to 9.4.1, BuildKonfig to 0.18.0, spmForKmp to 1.7.0
Based on android-maps-compose 8.2.0.
SDK Versions:
- Google Maps iOS SDK: 10.8.0
- Google Play Services Maps: 20.0.0
TileOverlaycomposable - Cross-platform tile overlay support wrappingTileProvider/TileOverlayon Android andGMSSyncTileLayeron iOS. IncludesTileOverlayStatefor cache management, with fadeIn, transparency, visibility, and zIndex properties.clusterItemDecoration- New parameter on allClusteringoverloads for rendering additional map content (circles, polylines, etc.) alongside each unclustered item, matching android-maps-compose 8.2.0
clusterItemDecorationsignature - Changed from(T) -> Unitto(T, LatLng) -> Unitso decorations receive the animated position during cluster transitions
- Updated maps-compose to 8.2.0, Compose Multiplatform to 1.10.2, AGP to 9.1.0
Based on android-maps-compose 8.1.0.
SDK Versions:
- Google Maps iOS SDK: 10.8.0
- Google Play Services Maps: 20.0.0
- Marker Clustering - New
kmp-maps-compose-utilsmodule with Compose-first marker clustering. IncludesNonHierarchicalDistanceBasedAlgorithmported from android-maps-utils, animated split/merge transitions, andDefaultClusterContentmatching android-maps-utils visual appearance. (#6) MapStyleOptions- New expect/actual class for custom map styling via JSON from the Google Maps Styling Wizard. UseMapStyleOptions.fromJson()withMapProperties. (#5)MapEffectcomposable - Cross-platform access to the underlying native map object (GoogleMapon Android,GMSMapViewon iOS) viaNativeMaptype alias
- iOS: Improved composable-to-UIImage rendering - Rewritten rendering pipeline for marker and info window image capture
Based on android-maps-compose 8.1.0.
SDK Versions:
- Google Maps iOS SDK: 10.8.0
- Google Play Services Maps: 20.0.0
- CameraUpdate-based API -
animate()andmove()now take aCameraUpdateparameter instead ofCameraPositiondirectly. UseCameraUpdateFactory.newCameraPosition(),CameraUpdateFactory.newLatLngZoom(), orCameraUpdateFactory.newLatLngBounds()to create updates. This aligns the API with android-maps-compose. animateToBounds()removed - Useanimate(CameraUpdateFactory.newLatLngBounds(bounds, padding))instead.visibleBoundsremoved - UsecameraPositionState.projection?.visibleBoundsinstead, querying it whenisMovingbecomes false.- Default animation duration changed -
animate()now defaults toInt.MAX_VALUE(SDK default duration) instead of 300ms. Pass an explicitdurationMsto control duration. rememberCameraPositionStatekeyparameter removed - The function now uses positionalrememberSaveablescoping.
CameraUpdateFactory- New factory object withnewCameraPosition(),newLatLngZoom(), andnewLatLngBounds()methods matching the android-maps-compose APIcurrentCameraPositionState- Composables insideGoogleMapcontent can now access the camera state implicitly viacurrentCameraPositionState, matching the android-maps-compose API- Camera state saved across configuration changes -
rememberCameraPositionState()now usesrememberSaveable, so camera position survives configuration changes and process death on Android - iOS: Coroutine-aware
animate()-animate()now properly suspends until the animation completes and supports cancellation, matching Android behavior. UsesCATransaction.setCompletionBlockfor completion detection; cancellation snaps the camera to stop the animation. - iOS: Custom animation duration - The
durationMsparameter is now forwarded to the native SDK viaCATransaction.setAnimationDuration() - iOS: Deferred camera operations -
animate()andmove()called before the map is available are now deferred and executed when the map becomes available, matching Android behavior
CameraPositionStateis nowexpect/actual- On Android, delegates directly to android-maps-compose'sCameraPositionState(single source of truth, no bidirectional sync). On iOS, managesGMSMapViewdirectly viasetMap().- iOS: Node-based map property management - Introduced
IOSMapPropertiesNodefor managing map properties, UI settings, content padding, and camera state binding via the Compose node tree, replacing the imperativeUIKitViewupdate approach.
- Updated Kotlin to 2.3.10, Compose Multiplatform to 1.10.1, AGP to 9.0.1
- Updated maps-compose to 8.1.0, Gradle to 9.3.1
Based on android-maps-compose 8.0.0.
SDK Versions:
- Google Maps iOS SDK: 10.8.0
- Google Play Services Maps: 20.0.0
- Styled Polylines - Added support for gradient and stamped polylines via new
StyleSpan,StrokeStyle, andStampStyleAPIs - Projection API - Added
CameraPositionState.projectionfor coordinate/screen conversions andvisibleBoundsfor tracking the visible map region - Compose Resources Integration - Added
rememberBitmapDescriptor()for easy loading of marker icons from Compose Resources
- Fixed camera position feedback loop causing map trembling on Android
- Fixed Android camera position not updating on user gestures
- Fixed
@GoogleMapComposableannotation mismatch warnings
- Updated to Gradle 9.3.0 and AGP 9.0.0
- Updated Google Maps SDK versions
- Improved Compose stability configuration