
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).
Other platforms are on SDKs.
Used by 3 products

DiscoverTrail
Mobile app for outdoor route planning and navigation, with online and offline topographic maps of marked hiking trails and the points of interest hikers need, such as shelters, water sources and lodging.

Rallista
App for driving enthusiasts to build their own adventures, share routes with friends, and participate in driving rallies.

Villages GPS
Navigation app for the golf-cart trails and roundabouts of The Villages, Florida, with voice-guided turn-by-turn directions, trip planning, and listings of neighborhoods, restaurants, shops, golf course conditions and daily activities.