Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
mapbox avatar

Mapbox Android Patterns

  • 962 installs
  • 71 repo stars
  • Updated August 4, 2026
  • mapbox/mapbox-agent-skills

mapbox-android-patterns is an official Mapbox agent skill that provides ready-to-use Kotlin and Jetpack Compose patterns for developers who need Mapbox Maps SDK v11 maps, markers, GeoJSON, styles, and camera control on A

About

mapbox-android-patterns from mapbox/mapbox-agent-skills documents official integration patterns for Mapbox Maps SDK v11 on Android using Kotlin, Jetpack Compose, and the traditional View system. The skill covers SDK installation and configuration, adding markers and annotations, showing user location with camera tracking, loading custom GeoJSON data, applying map styles, controlling camera movement, and handling featureset interactions—all aligned with official Mapbox documentation. Developers reach for mapbox-android-patterns when embedding interactive maps into Android apps instead of writing integration code from scattered docs. Patterns address common Android map tasks such as location permissions, annotation layers, and style switching without guessing API shapes. With 750 catalog installs, the skill suits mobile engineers building logistics, field, or consumer map features on Android—not iOS MapKit projects, web Mapbox GL JS-only work, or backend geospatial ETL pipelines without a mobile client.

  • Official integration patterns for Mapbox Maps SDK v11 on Android
  • Covers installation, markers, user location tracking, GeoJSON custom data, map styles, camera control, and feature tap h
  • Supports both Jetpack Compose and traditional View system implementations
  • Based directly on Mapbox Android Maps Guides and API reference
  • Includes token configuration and minimum SDK requirements

Mapbox Android Patterns by the numbers

  • 962 all-time installs (skills.sh)
  • +33 installs in the week ending Aug 5, 2026 (Skillselion tracking)
  • Ranked #244 of 1,039 Mobile Development skills by installs in the Skillselion catalog
  • Security screen: MEDIUM risk (skills.sh audit)
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/mapbox/mapbox-agent-skills --skill mapbox-android-patterns

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs962
repo stars71
Security audit3 / 3 scanners passed
Last updatedAugust 4, 2026
Repositorymapbox/mapbox-agent-skills

How do you add Mapbox maps to Android?

Get official, ready-to-use Kotlin and Jetpack Compose patterns for adding Mapbox maps, markers, user location, styles, and feature interactions into an Android ap

Who is it for?

Android developers integrating Mapbox Maps SDK v11 with Kotlin or Jetpack Compose who want official annotation, GeoJSON, location, and camera patterns.

Skip if: iOS MapKit or Mapbox iOS SDK projects, web-only Mapbox GL JS integrations, or backend-only geospatial pipelines with no Android map UI.

When should I use this skill?

User asks to add Mapbox maps, markers, user location, GeoJSON layers, map styles, or camera control to an Android Kotlin or Jetpack Compose app.

What you get

Kotlin and Jetpack Compose Mapbox integration snippets for markers, GeoJSON layers, user location, map styles, camera control, and featureset interactions.

  • Kotlin map integration snippets
  • Compose map components
  • GeoJSON and marker setup code

By the numbers

  • Targets Mapbox Maps SDK v11 on Android
  • 750 catalog installs in mapbox/mapbox-agent-skills
  • Covers 6 integration areas: install, markers, location, GeoJSON, styles, camera

Files

SKILL.mdMarkdownGitHub ↗

Mapbox Android Integration Patterns

Official patterns for integrating Mapbox Maps SDK v11 on Android with Kotlin, Jetpack Compose, and View system.

Use this skill when:

  • Installing and configuring Mapbox Maps SDK for Android
  • Adding markers and annotations to maps
  • Showing user location and tracking with camera
  • Adding custom data (GeoJSON) to maps
  • Working with map styles, camera, or user interaction
  • Handling feature interactions and taps

Official Resources:

---

Installation & Setup

Requirements

  • Android SDK 21+
  • Kotlin or Java
  • Android Studio
  • Free Mapbox account

Step 1: Configure Access Token

Create app/res/values/mapbox_access_token.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
    <string name="mapbox_access_token" translatable="false"
        tools:ignore="UnusedResources">YOUR_MAPBOX_ACCESS_TOKEN</string>
</resources>

Get your token: Sign in at mapbox.com

Step 2: Add Maven Repository

In settings.gradle.kts:

dependencyResolutionManagement {
    repositories {
        google()
        mavenCentral()
        maven {
            url = uri("https://api.mapbox.com/downloads/v2/releases/maven")
        }
    }
}

Step 3: Add Dependency

In module build.gradle.kts:

android {
    defaultConfig {
        minSdk = 21
    }
}

dependencies {
    implementation("com.mapbox.maps:android:11.18.1")
}

For Jetpack Compose:

dependencies {
    implementation("com.mapbox.maps:android:11.18.1")
    implementation("com.mapbox.extension:maps-compose:11.18.1")
}

---

Map Initialization

Jetpack Compose Pattern

Basic map:

import androidx.compose.runtime.*
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.ui.Modifier
import com.mapbox.maps.extension.compose.*
import com.mapbox.maps.Style
import com.mapbox.geojson.Point

@Composable
fun MapScreen() {
    MapboxMap(
        modifier = Modifier.fillMaxSize()
    ) {
        // Initialize camera via MapEffect (Style.STANDARD loads by default)
        MapEffect(Unit) { mapView ->
            // Set initial camera position
            mapView.mapboxMap.setCamera(
                CameraOptions.Builder()
                    .center(Point.fromLngLat(-122.4194, 37.7749))
                    .zoom(12.0)
                    .build()
            )
        }
    }
}

With ornaments:

MapboxMap(
    modifier = Modifier.fillMaxSize(),
    scaleBar = {
        ScaleBar(
            enabled = true,
            position = Alignment.BottomStart
        )
    },
    compass = {
        Compass(enabled = true)
    }
) {
    // Style.STANDARD loads by default
}

View System Pattern

Layout XML (activity_map.xml):

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.mapbox.maps.MapView
        android:id="@+id/mapView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Activity:

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.mapbox.maps.MapView
import com.mapbox.maps.Style
import com.mapbox.geojson.Point

class MapActivity : AppCompatActivity() {
    private lateinit var mapView: MapView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_map)

        mapView = findViewById(R.id.mapView)

        mapView.mapboxMap.setCamera(
            CameraOptions.Builder()
                .center(Point.fromLngLat(-122.4194, 37.7749))
                .zoom(12.0)
                .build()
        )

        mapView.mapboxMap.loadStyle(Style.STANDARD)
    }

    override fun onStart() {
        super.onStart()
        mapView.onStart()
    }

    override fun onStop() {
        super.onStop()
        mapView.onStop()
    }

    override fun onDestroy() {
        super.onDestroy()
        mapView.onDestroy()
    }
}

---

Add Markers (Point Annotations)

Point annotations are the most common way to mark locations on the map.

Jetpack Compose:

MapboxMap(modifier = Modifier.fillMaxSize()) {
    MapEffect(Unit) { mapView ->
        // Load style first
        mapView.mapboxMap.loadStyle(Style.STANDARD)

        // Create annotation manager and add markers
        val annotationManager = mapView.annotations.createPointAnnotationManager()
        val pointAnnotation = PointAnnotationOptions()
            .withPoint(Point.fromLngLat(-122.4194, 37.7749))
            .withIconImage("custom-marker")
        annotationManager.create(pointAnnotation)
    }
}

// Note: Compose doesn't have declarative PointAnnotation component
// Markers must be added imperatively via MapEffect

View System:

// Create annotation manager (once, reuse for updates)
val pointAnnotationManager = mapView.annotations.createPointAnnotationManager()

// Create marker
val pointAnnotation = PointAnnotationOptions()
    .withPoint(Point.fromLngLat(-122.4194, 37.7749))
    .withIconImage("custom-marker")

pointAnnotationManager.create(pointAnnotation)

Multiple markers:

val locations = listOf(
    Point.fromLngLat(-122.4194, 37.7749),
    Point.fromLngLat(-122.4094, 37.7849),
    Point.fromLngLat(-122.4294, 37.7649)
)

val annotations = locations.map { point ->
    PointAnnotationOptions()
        .withPoint(point)
        .withIconImage("marker")
}

pointAnnotationManager.create(annotations)

---

Show User Location (Display)

Step 1: Add permissions to AndroidManifest.xml:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

Step 2: Request permissions and show location:

// Request permissions first (use ActivityResultContracts)

// Show location puck
mapView.location.updateSettings {
    enabled = true
    puckBearingEnabled = true
}

---

Performance Best Practices

Reuse Annotation Managers

// Don't create new managers repeatedly
// val manager = mapView.annotations.createPointAnnotationManager() // each call

// Create once, reuse
val pointAnnotationManager = mapView.annotations.createPointAnnotationManager()

fun updateMarkers() {
    pointAnnotationManager.deleteAll()
    pointAnnotationManager.create(markers)
}

Batch Annotation Updates

// Create all at once
pointAnnotationManager.create(allAnnotations)

// Don't create one by one in a loop

Lifecycle Management

// Always call lifecycle methods
override fun onStart() {
    super.onStart()
    mapView.onStart()
}

override fun onStop() {
    super.onStop()
    mapView.onStop()
}

override fun onDestroy() {
    super.onDestroy()
    mapView.onDestroy()
}

Use Standard Style

// Standard style is optimized and recommended
Style.STANDARD

// Use other styles only when needed for specific use cases
Style.STANDARD_SATELLITE // Satellite imagery

---

Troubleshooting

Map Not Displaying

Check:

1. Token in mapbox_access_token.xml 2. Token is valid (test at mapbox.com) 3. Maven repository configured 4. Dependency added correctly 5. Internet permission in manifest

Style Not Loading

mapView.mapboxMap.subscribeStyleLoaded { _ ->
    Log.d("Map", "Style loaded successfully")
    // Add layers and sources here
}

Performance Issues

  • Use Style.STANDARD (recommended and optimized)
  • Limit visible annotations to viewport
  • Reuse annotation managers
  • Avoid frequent style reloads
  • Call lifecycle methods (onStart, onStop, onDestroy)
  • Batch annotation updates

---

Reference Files

Load these references when you need detailed patterns for specific topics:

  • `references/compose.md` -- Jetpack Compose: dependencies, token setup, MapboxMap, annotations with click, GeoJSON, MapEffect
  • `references/annotations.md` -- Circle, Polyline, and Polygon annotation patterns
  • `references/location-tracking.md` -- Camera follow user location + get current location once
  • `references/custom-data.md` -- GeoJSON sources and layers: lines, polygons, points, update/remove
  • `references/camera-styles.md` -- Camera control (set, animate, fit) + map styles (built-in and custom)
  • `references/interactions.md` -- Featureset interactions, custom layer taps, long press, gestures

---

Additional Resources

Related skills

How it compares

Pick mapbox-android-patterns for official Mapbox Android SDK snippets; use generic mobile UI skills when maps are not part of the integration scope.

FAQ

Which Mapbox SDK version does mapbox-android-patterns target?

mapbox-android-patterns documents official integration patterns for Mapbox Maps SDK v11 on Android, covering Kotlin, Jetpack Compose, and the View system per the mapbox/mapbox-agent-skills README.

What Android map features does the skill cover?

mapbox-android-patterns includes installation, markers and annotations, user location with camera tracking, custom GeoJSON data, map styles, camera control, and featureset interactions from official Mapbox documentation.

Does mapbox-android-patterns support Jetpack Compose?

mapbox-android-patterns provides Jetpack Compose integration patterns alongside Kotlin View-system examples for Mapbox Maps SDK v11, so Compose-first Android apps can embed maps without guessing API usage.

Is Mapbox Android Patterns safe to install?

skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

Mobile Developmentintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.