
MapLibre Compose brings MapLibre to Compose Multiplatform, allowing you to add interactive vector maps to your Compose UIs across all platforms. It provides a declarative API that fits naturally into Compose applications.
Quick start
// build.gradle.kts (Kotlin Multiplatform)
commonMain.dependencies {
implementation("org.maplibre.compose:maplibre-compose:0.18.0")
}
androidMain {
dependencies {
runtimeOnly("org.maplibre.compose:maplibre-compose-runtime-vulkan-android:0.18.0")
}
}import androidx.compose.runtime.Composable
import org.maplibre.compose.camera.CameraPosition
import org.maplibre.compose.map.MaplibreMap
import org.maplibre.compose.map.rememberMapState
import org.maplibre.compose.style.BaseStyle
import org.maplibre.spatialk.geojson.Position
@Composable
fun App() {
val mapState = rememberMapState(
baseStyle = BaseStyle.Uri("https://tiles.openfreemap.org/styles/liberty"),
initialCameraPosition = CameraPosition(
target = Position(latitude = 20.0, longitude = 0.0),
zoom = 2.0,
),
)
MaplibreMap(state = mapState)
}›Setup noteschecked with v0.18.0
maplibre-compose 0.18.0 (2026-09-25) on Maven Central. It is pre-1.0, and minor releases can contain breaking changes. Android and iOS are Beta, desktop and web are Alpha. The API changed in 0.16.0: the style and initial camera now go into rememberMapState(baseStyle = BaseStyle.Uri(...), initialCameraPosition = ...), which you pass as MaplibreMap(state = ...). Tutorials that pass baseStyle and cameraState = rememberCameraState(...) directly to MaplibreMap were written for 0.15 and earlier. Android also needs one render runtime at the same version: maplibre-compose-runtime-vulkan-android or maplibre-compose-runtime-opengl-android. iOS needs iOS 15.5+ and these Other Linker Flags: -l"c++" -lz -framework CoreFoundation -framework CoreGraphics -framework CoreText -framework Foundation -framework ImageIO -framework Metal -framework QuartzCore. Desktop (JVM) needs Java 25+, a per-platform runtime artifact and --enable-native-access=ALL-UNNAMED. Web needs useEsModules() and installMapLibreCompose() inside onWasmReady. Position is the GeoJSON type, so use the named latitude and longitude arguments (the positional order is longitude, latitude).
More platforms on Get started.
Used by 2 products

Hiking Map - DiscoverTrail
Trail navigation app with 10,000+ downloads, using maplibre-compose for interactive maps on Android.
Native · Android

Rallista
Rallista lets driving enthusiasts build their own adventures, share routes with friends, and participate in driving rallies, with maps powered by MapLibre Native via maplibre-compose.
Native · Android