{"id":15031741,"url":"https://github.com/googlemaps/android-maps-compose","last_synced_at":"2026-02-24T21:03:28.794Z","repository":{"id":37519934,"uuid":"455343699","full_name":"googlemaps/android-maps-compose","owner":"googlemaps","description":"Jetpack Compose composables for the Maps SDK for Android","archived":false,"fork":false,"pushed_at":"2025-04-29T15:11:43.000Z","size":2861,"stargazers_count":1224,"open_issues_count":125,"forks_count":153,"subscribers_count":35,"default_branch":"main","last_synced_at":"2025-04-29T15:49:24.130Z","etag":null,"topics":["android","google-maps","jetpack-compose","kotlin","language-extension","maps"],"latest_commit_sha":null,"homepage":"https://developers.google.com/maps/documentation/android-sdk/maps-compose","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/googlemaps.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-02-03T22:04:23.000Z","updated_at":"2025-04-29T14:35:24.000Z","dependencies_parsed_at":"2023-10-28T01:27:56.635Z","dependency_job_id":"78a124e4-05af-4f31-bfd3-b86dae5eca58","html_url":"https://github.com/googlemaps/android-maps-compose","commit_stats":null,"previous_names":[],"tags_count":77,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googlemaps%2Fandroid-maps-compose","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googlemaps%2Fandroid-maps-compose/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googlemaps%2Fandroid-maps-compose/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googlemaps%2Fandroid-maps-compose/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/googlemaps","download_url":"https://codeload.github.com/googlemaps/android-maps-compose/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254059518,"owners_count":22007771,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","google-maps","jetpack-compose","kotlin","language-extension","maps"],"created_at":"2024-09-24T20:16:27.432Z","updated_at":"2026-02-24T21:03:28.789Z","avatar_url":"https://github.com/googlemaps.png","language":"Kotlin","readme":"[![Maven Central](https://img.shields.io/maven-central/v/com.google.maps.android/maps-compose)](https://maven-badges.herokuapp.com/maven-central/com.google.maps.android/maps-compose)\n![Release](https://github.com/googlemaps/android-maps-compose/workflows/Release/badge.svg)\n![Stable](https://img.shields.io/badge/stability-stable-green)\n[![Tests/Build](https://github.com/googlemaps/android-maps-compose/actions/workflows/test.yml/badge.svg)](https://github.com/googlemaps/android-maps-compose/actions/workflows/test.yml)\n\n![Contributors](https://img.shields.io/github/contributors/googlemaps/android-maps-compose?color=green)\n[![License](https://img.shields.io/github/license/googlemaps/android-maps-compose?color=blue)][license]\n[![StackOverflow](https://img.shields.io/stackexchange/stackoverflow/t/google-maps?color=orange\u0026label=google-maps\u0026logo=stackoverflow)](https://stackoverflow.com/questions/tagged/google-maps)\n[![Discord](https://img.shields.io/discord/676948200904589322?color=6A7EC2\u0026logo=discord\u0026logoColor=ffffff)][Discord server]\n\n# Maps Compose 🗺\n\n## Description\n\nThis repository contains [Jetpack Compose][jetpack-compose] components for the [Maps SDK for Android][maps-sdk].\n\n## Requirements\n\n* Android API level 21+\n* Kotlin-enabled project\n* Jetpack Compose-enabled project (see [releases](https://github.com/googlemaps/android-maps-compose/releases) for the required version of Jetpack Compose)\n* [Sign up with Google Maps Platform]\n* A Google Maps Platform [project] with the **Maps SDK for Android** enabled\n- An [API key] associated with the project above ... follow the [API key instructions] if you're new to the process\n\n## Installation\n\nYou no longer need to specify the Maps SDK for Android or its Utility Library as separate dependencies, since `maps-compose` and `maps-compose-utils` pull in the appropriate versions of these respectively.\n\n```groovy\ndependencies {\n    implementation 'com.google.maps.android:maps-compose:8.2.0' // {x-release-please-version}\n    // Optionally, you can include the Compose utils library for Clustering,\n    // Street View metadata checks, etc.\n    implementation 'com.google.maps.android:maps-compose-utils:8.2.0' // {x-release-please-version}\n    // Optionally, you can include the widgets library for ScaleBar, etc.\n    implementation 'com.google.maps.android:maps-compose-widgets:8.2.0' // {x-release-please-version}\n}\n```\n\n## Sample App\n\nThis repository includes a [sample app](maps-app).\n\nTo run the demo app, ensure you've met the requirements above then:\n\n1. Open the `secrets.properties` file in your top-level directory, and then add the following code. Replace YOUR_API_KEY with your API key. Store your key in this file because secrets.properties is excluded from being checked into a version control system.\n   If the `secrets.properties` file does not exist, create it in the same folder as the `local.default.properties` file.\n   ```\n   MAPS_API_KEY=YOUR_API_KEY\n   ```\n1. Build and run\n\n## Documentation\n\nSee the [documentation] for a full list of classes and their methods.\n\n## Usage\n\nAdding a map to your app looks like the following:\n\n```kotlin\nval singapore = LatLng(1.35, 103.87)\nval cameraPositionState = rememberCameraPositionState {\n    position = CameraPosition.fromLatLngZoom(singapore, 10f)\n}\nGoogleMap(\n    modifier = Modifier.fillMaxSize(),\n    cameraPositionState = cameraPositionState\n)\n```\n\n\u003cdetails\u003e\n  \u003csummary\u003eCreating and configuring a map\u003c/summary\u003e\n\n## Creating and configuring a map\n\nConfiguring the map can be done by passing a `MapProperties` object into the\n`GoogleMap` composable, or for UI-related configurations, use `MapUiSettings`.\n`MapProperties` and `MapUiSettings` should be your first go-to for configuring\nthe map. For any other configuration not present in those two classes, use\n`googleMapOptionsFactory` to provide a `GoogleMapOptions` instance instead.\nTypically, anything that can only be provided once (i.e. when the map is\ncreated)—like map ID—should be provided via `googleMapOptionsFactory`.\n\n```kotlin\n// Set properties using MapProperties which you can use to recompose the map\nvar mapProperties by remember {\n    mutableStateOf(\n        MapProperties(maxZoomPreference = 10f, minZoomPreference = 5f)\n    )\n}\nvar mapUiSettings by remember {\n    mutableStateOf(\n        MapUiSettings(mapToolbarEnabled = false)\n    )\n}\nBox(Modifier.fillMaxSize()) {\n    GoogleMap(properties = mapProperties, uiSettings = mapUiSettings)\n    Column {\n        Button(onClick = {\n            mapProperties = mapProperties.copy(\n                isBuildingEnabled = !mapProperties.isBuildingEnabled\n            )\n        }) {\n            Text(text = \"Toggle isBuildingEnabled\")\n        }\n        Button(onClick = {\n            mapUiSettings = mapUiSettings.copy(\n                mapToolbarEnabled = !mapUiSettings.mapToolbarEnabled\n            )\n        }) {\n            Text(text = \"Toggle mapToolbarEnabled\")\n        }\n    }\n}\n\n// ...or initialize the map by providing a googleMapOptionsFactory\n// This should only be used for values that do not recompose the map such as\n// map ID.\nGoogleMap(\n    googleMapOptionsFactory = {\n        GoogleMapOptions().mapId(\"MyMapId\")\n    }\n)\n\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eControlling a map's camera\u003c/summary\u003e\n\n### Controlling a map's camera\n\nCamera changes and updates can be observed and controlled via `CameraPositionState`.\n\n**Note**: `CameraPositionState` is the source of truth for anything camera\nrelated. So, providing a camera position in `GoogleMapOptions` will be\noverridden by `CameraPosition`.\n\n```kotlin\nval singapore = LatLng(1.35, 103.87)\nval cameraPositionState: CameraPositionState = rememberCameraPositionState {\n    position = CameraPosition.fromLatLngZoom(singapore, 11f)\n}\nBox(Modifier.fillMaxSize()) {\n  GoogleMap(cameraPositionState = cameraPositionState)\n  Button(onClick = {\n    // Move the camera to a new zoom level\n    cameraPositionState.move(CameraUpdateFactory.zoomIn())\n  }) {\n      Text(text = \"Zoom In\")\n  }\n}\n```\n\nRemember that the map must load before any camera state can be set. If you are using a LaunchedEffect, you must wait until the map has been loaded:\n\n```kotlin\n@Composable\nfun MapScreen() {\nvar mapLoaded by remember { mutableStateOf(false) }\n\n    GoogleMap(\n        modifier = Modifier.fillMaxSize(),\n        onMapLoaded = { mapLoaded = true }\n    )\n\n    if (mapLoaded) {\n        LaunchedEffect(Unit) {\n            // here the camera operations\n        }\n    }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eDrawing on a map\u003c/summary\u003e\n\n### Drawing on a map\n\nDrawing on the map, such as adding markers, can be accomplished by adding child\ncomposable elements to the content of the `GoogleMap`.\n\n```kotlin\nGoogleMap(\n    googleMapOptionsFactory = {\n        GoogleMapOptions().mapId(\"DEMO_MAP_ID\")\n    },\n    //...\n) {\n    AdvancedMarker(\n        state = MarkerState(position = LatLng(-34, 151)),\n        title = \"Marker in Sydney\"\n    )\n    AdvancedMarker(\n        state = MarkerState(position = LatLng(35.66, 139.6)),\n        title = \"Marker in Tokyo\"\n    )\n}\n```\n\nYou can customize a marker by using `PinConfig` with an `AdvancedMarker`.\n\n```kotlin\nval state = MyState()\n\nGoogleMap(\n    googleMapOptionsFactory = {\n        GoogleMapOptions().mapId(\"DEMO_MAP_ID\")\n    },\n    //...\n) {\n    val pinConfig = PinConfig.builder()\n        .setBackgroundColor(Color.MAGENTA)\n        .build()\n\n    AdvancedMarker(\n        state = MarkerState(position = LatLng(-34, 151)),\n        title = \"Magenta marker in Sydney\",\n        pinConfig = pinConfig\n    )\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eShapes\u003c/summary\u003e\n\n### Shapes\n\nA shape is an object on the map, tied to a latitude/longitude coordinate. Currently, android-maps-compose offers `Polyline`, `Polygon` and `Circle`. For all shapes, you can customize their appearance by altering a number of properties.\n\n\n#### Polyline\nA `Polyline` is a series of connected line segments that can form any shape you want and can be used to mark paths and routes on the map:\n\n```kotlin\nval polylinePoints = remember { listOf(singapore, singapore5) }\n\n// ... \nPolyline(\n    points = polylinePoints\n)\n```\n\nYou can use spans to individually color segments of a polyline, by creating StyleSpan objects:\n\n```kotlin\nval styleSpan = StyleSpan(\n    StrokeStyle.gradientBuilder(\n        Color.Red.toArgb(),\n        Color.Green.toArgb(),\n    ).build(),\n)\n\n// ...\n\nval polylinePoints = remember { listOf(singapore, singapore5) }\nval styleSpanList = remember { listOf(styleSpan) }\n\n// ... \n\nPolyline(\n    points = polylinePoints,\n    spans = styleSpanList,\n)\n```\n\n#### Polygon\n\nA `Polygon` is an enclosed shape that can be used to mark areas on the map:\n\n```kotlin\nval polygonPoints = remember { listOf(singapore1, singapore2, singapore3) }\n\n\n// ... \n\nPolygon(\n    points = polygonPoints,\n    fillColor = Color.Black.copy(alpha = 0.5f)\n)\n```\n\n#### Circle\n\nA Circle is a geographically accurate projection of a circle on the Earth's surface drawn on the map:\n\n```kotlin\nvar circleCenter by remember { mutableStateOf(singapore) }\n\n// ... \n\nCircle(\n    center = circleCenter,\n    fillColor = MaterialTheme.colors.secondary,\n    strokeColor = MaterialTheme.colors.secondaryVariant,\n    radius = 1000.0,\n)\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eRecomposing elements\u003c/summary\u003e\n\n### Recomposing elements\n\nMarkers and other elements need to be recomposed in the screen. To achieve recomposition, you can set mutable properties of state objects:\n\n```kotlin\nval markerState = rememberUpdatedMarkerState(position = singapore)\n\n//...\n\nLaunchedEffect(Unit) {\n    repeat(10) {\n        delay(5.seconds)\n        val old = markerState.position\n        markerState.position = LatLng(old.latitude + 1.0, old.longitude + 2.0)\n    }\n}\n```\n\nIn the example above, recomposition occurs as `MarkerState.position` is updated with different values over time, shifting the Marker around the screen.\n\n\n\u003c/details\u003e\n\u003cdetails\u003e\n  \u003csummary\u003eCustomizing a marker's info window\u003c/summary\u003e\n\n### Customizing a marker's info window\n\nYou can customize a marker's info window contents by using the\n`MarkerInfoWindowContent` element, or if you want to customize the entire info\nwindow, use the `MarkerInfoWindow` element instead. Both of these elements\naccept a `content` parameter to provide your customization in a composable\nlambda expression.\n\n```kotlin\nMarkerInfoWindowContent(\n    //...\n) { marker -\u003e\n    Text(marker.title ?: \"Default Marker Title\", color = Color.Red)\n}\n\nMarkerInfoWindow(\n    //...\n) { marker -\u003e\n    // Implement the custom info window here\n    Column {\n        Text(marker.title ?: \"Default Marker Title\", color = Color.Red)\n        Text(marker.snippet ?: \"Default Marker Snippet\", color = Color.Red)\n    }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eStreet View\u003c/summary\u003e\n\n### Street View\n\nYou can add a Street View given a location using the `StreetView` composable.\n\n1. Test whether a Street View location is valid with the the\n`fetchStreetViewData` utility from the [`maps-compose-utils` library](#maps-compose-utility-library).\n\n```kotlin\n streetViewResult =\n    fetchStreetViewData(singapore, BuildConfig.MAPS_API_KEY)\n```\n\n2. Once the location is confirmed valid, add a Street View composable by providing a `StreetViewPanoramaOptions` object.\n\n```kotlin\nval singapore = LatLng(1.3588227, 103.8742114)\nStreetView(\n    streetViewPanoramaOptionsFactory = {\n        StreetViewPanoramaOptions().position(singapore)\n    }\n)\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eControlling the map directly (experimental)\u003c/summary\u003e\n\n## Controlling the map directly (experimental)\n\nCertain use cases may require extending the `GoogleMap` object to decorate / augment\nthe map. It can be obtained with the `MapEffect` Composable.\nDoing so can be dangerous, as the `GoogleMap` object is managed by this library.\n\n```kotlin\nGoogleMap(\n    // ...\n) {\n    MapEffect { map -\u003e\n        // map is the GoogleMap\n    }\n}\n```\n\n\u003c/details\u003e\n\n## Maps Compose Utility Library\n\nThis library provides optional utilities in the `maps-compose-utils` library from the [Maps SDK for Android Utility Library](https://github.com/googlemaps/android-maps-utils).\n\n### Clustering\n\nThe marker clustering utility helps you manage multiple markers at different zoom levels.\nWhen a user views the map at a high zoom level, the individual markers show on the map. When the user zooms out, the markers gather together into clusters, to make viewing the map easier.\n\nThe [MarkerClusteringActivity](maps-app/src/main/java/com/google/maps/android/compose/markerexamples/MarkerClusteringActivity.kt) demonstrates usage.\n\n```kotlin\nClustering(\n    items = items,\n    // Optional: Handle clicks on clusters, cluster items, and cluster item info windows\n    onClusterClick = null,\n    onClusterItemClick = null,\n    onClusterItemInfoWindowClick = null,\n    // Optional: Custom rendering for clusters\n    clusterContent = null,\n    // Optional: Custom rendering for non-clustered items\n    clusterItemContent = null,\n)\n```\n\n### Street View metadata utility\n\nThe `fetchStreetViewData` method provides functionality to check whether a location is supported in StreetView. You can avoid errors when adding a Street View panorama to an Android app by calling this metadata utility and only adding a Street View panorama if the response is OK.\n\n\u003e [!IMPORTANT]\n\u003e Be sure to [enable Street View Static API](https://goo.gle/enable-sv-static-api) on the project associated with your API key.\n\nYou can see example usage\nin the [`StreetViewActivity`](https://github.com/googlemaps/android-maps-compose/blob/main/maps-app/src/main/java/com/google/maps/android/compose/StreetViewActivity.kt) of the demo app:\n\n```kotlin\n streetViewResult =\n    fetchStreetViewData(singapore, BuildConfig.MAPS_API_KEY)\n```\n\n## Maps Compose Widgets\n\nThis library also provides optional composable widgets in the `maps-compose-widgets` library that you can use alongside the `GoogleMap` composable.\n\n### ScaleBar\n\nThis widget shows the current scale of the map in feet and meters when zoomed into the map, changing to miles and kilometers, respectively, when zooming out. A `DisappearingScaleBar` is also included, which appears when the zoom level of the map changes, and then disappears after a configurable timeout period.\n\nThe [ScaleBarActivity](maps-app/src/main/java/com/google/maps/android/compose/ScaleBarActivity.kt) demonstrates both of these, with the `DisappearingScaleBar` in the upper left corner and the normal base `ScaleBar` in the upper right:\n\n![maps-compose-scale-bar-cropped](https://user-images.githubusercontent.com/928045/175665891-a0635004-2201-4392-83b3-0c6553b96926.gif)\n\nBoth versions of this widget leverage the `CameraPositionState` in `maps-compose` and therefore are very simple to configure with their defaults:\n\n```kotlin\nBox(Modifier.fillMaxSize()) {\n\n    GoogleMap(\n        modifier = Modifier.fillMaxSize(),\n        cameraPositionState = cameraPositionState\n    ) {\n        // ... your map composables ...\n    }\n\n    ScaleBar(\n        modifier = Modifier\n            .padding(top = 5.dp, end = 15.dp)\n            .align(Alignment.TopEnd),\n        cameraPositionState = cameraPositionState\n    )\n\n    // OR\n\n    DisappearingScaleBar(\n        modifier = Modifier\n            .padding(top = 5.dp, end = 15.dp)\n            .align(Alignment.TopStart),\n        cameraPositionState = cameraPositionState\n    )\n}\n```\n\nThe colors of the text, line, and shadow are also all configurable (e.g., based on `isSystemInDarkTheme()` on a dark map). Similarly, the `DisappearingScaleBar` animations can be configured.\n\n## Internal usage attribution ID\n\nThis library calls the `addInternalUsageAttributionId` method, which helps Google understand which libraries and samples are helpful to developers and is optional. Instructions for opting out of the identifier are provided below.\n\nIf you wish to disable this, you can do so by removing the initializer in your `AndroidManifest.xml` using the `tools:node=\"remove\"` attribute:\n\n```xml\n\u003cprovider\n    android:name=\"androidx.startup.InitializationProvider\"\n    android:authorities=\"${applicationId}.androidx-startup\"\n    android:exported=\"false\"\n    tools:node=\"merge\"\u003e\n    \u003cmeta-data\n        android:name=\"com.google.maps.android.compose.utils.attribution.AttributionIdInitializer\"\n        tools:node=\"remove\" /\u003e\n\u003c/provider\u003e\n```\n\n## Contributing\n\nContributions are welcome and encouraged! If you'd like to contribute, send us a [pull request] and refer to our [code of conduct] and [contributing guide].\n\n## Terms of Service\n\nThis library uses Google Maps Platform services. Use of Google Maps Platform services through this library is subject to the Google Maps Platform [Terms of Service].\n\nIf your billing address is in the European Economic Area, effective on 8 July 2025, the [Google Maps Platform EEA Terms of Service](https://cloud.google.com/terms/maps-platform/eea) will apply to your use of the Services. Functionality varies by region. [Learn more](https://developers.google.com/maps/comms/eea/faq).\n\nThis library is not a Google Maps Platform Core Service. Therefore, the Google Maps Platform Terms of Service (e.g. Technical Support Services, Service Level Agreements, and Deprecation Policy) do not apply to the code in this library.\n\n## Support\n\nThis library is offered via an open source [license]. It is not governed by the Google Maps Platform Support [Technical Support Services Guidelines], the [SLA], or the [Deprecation Policy]. However, any Google Maps Platform services used by the library remain subject to the Google Maps Platform Terms of Service.\n\nThis library adheres to [semantic versioning] to indicate when backwards-incompatible changes are introduced. Accordingly, while the library is in version 0.x, backwards-incompatible changes may be introduced at any time.\n\nIf you find a bug, or have a feature request, please [file an issue] on GitHub. If you would like to get answers to technical questions from other Google Maps Platform developers, ask through one of our [developer community channels]. If you'd like to contribute, please check the [contributing guide].\n\nYou can also discuss this library on our [Discord server].\n\n[API key]: https://developers.google.com/maps/documentation/android-sdk/get-api-key\n[API key instructions]: https://developers.google.com/maps/documentation/android-sdk/config#step_3_add_your_api_key_to_the_project\n[maps-sdk]: https://developers.google.com/maps/documentation/android-sdk\n[documentation]: https://googlemaps.github.io/android-maps-compose\n[jetpack-compose]: https://developer.android.com/jetpack/compose\n\n[code of conduct]: ?tab=coc-ov-file#readme\n[contributing guide]: CONTRIBUTING.md\n[Deprecation Policy]: https://cloud.google.com/maps-platform/terms\n[developer community channels]: https://developers.google.com/maps/developer-community\n[Discord server]: https://discord.gg/hYsWbmk\n[file an issue]: https://github.com/googlemaps/android-maps-compose/issues/new/choose\n[license]: LICENSE\n[project]: https://developers.google.com/maps/documentation/android-sdk/cloud-setup\n[pull request]: https://github.com/googlemaps/android-maps-compose/compare\n[semantic versioning]: https://semver.org\n[Sign up with Google Maps Platform]: https://console.cloud.google.com/google/maps-apis/start\n[similar inquiry]: https://github.com/googlemaps/android-maps-compose/issues\n[SLA]: https://cloud.google.com/maps-platform/terms/sla\n[Technical Support Services Guidelines]: https://cloud.google.com/maps-platform/terms/tssg\n[Terms of Service]: https://cloud.google.com/maps-platform/terms\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgooglemaps%2Fandroid-maps-compose","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgooglemaps%2Fandroid-maps-compose","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgooglemaps%2Fandroid-maps-compose/lists"}