
Flexible mapping library facilitates cross-platform map integration with interactive elements, marker support, clustering, offline capabilities, customizable behavior, and efficient performance handling large datasets.
A flexible and powerful compose multiplatform mapping library
KMaP is a Kotlin Compose Multiplatform mapping library designed for shared map UIs across all KMP targets. It gives you a single composable API to build map experiences once in commonMain, while still supporting platform-specific runtime targets.
| KMaP Demo App (WASM) |
| Documentation Page |
🧠Project Status
🚧 Vector tiles paused: Work is on hold until Compose provides async measurement + async drawing, which are needed for smooth, non-blocking rendering.
✅ Raster tiles done: All raster features are complete and ready to use.
Add KMaP to your commonMain dependencies:
kotlin {
sourceSets {
commonMain.dependencies {
implementation("com.rafambn:KMaP:0.4.1")
}
}
}With KMaP, you implement your map logic once. Provide a MapProperties and a TileSource and use it across targets:
val mapProperties = /* your MapProperties implementation */
val tileSource = /* your TileSource<RasterTile> implementation */
val mapState = rememberMapState(mapProperties = mapProperties)
KMaP(
modifier = Modifier.fillMaxSize(),
mapState = mapState,
) {
rasterCanvas(
parameters = RasterCanvasParameters(
id = 1,
tileSource = tileSource::getTile,
),
gestureWrapper = MapGestureWrapper(
onGesture = { centroid, pan, zoom, rotation ->
mapState.motionController.move {
rotateByCentered(rotation.toDouble(), centroid)
zoomByCentered(zoom, centroid)
positionBy(pan)
}
},
)
)
}A flexible and powerful compose multiplatform mapping library
KMaP is a Kotlin Compose Multiplatform mapping library designed for shared map UIs across all KMP targets. It gives you a single composable API to build map experiences once in commonMain, while still supporting platform-specific runtime targets.
| KMaP Demo App (WASM) |
| Documentation Page |
🧠Project Status
🚧 Vector tiles paused: Work is on hold until Compose provides async measurement + async drawing, which are needed for smooth, non-blocking rendering.
✅ Raster tiles done: All raster features are complete and ready to use.
Add KMaP to your commonMain dependencies:
kotlin {
sourceSets {
commonMain.dependencies {
implementation("com.rafambn:KMaP:0.4.1")
}
}
}With KMaP, you implement your map logic once. Provide a MapProperties and a TileSource and use it across targets:
val mapProperties = /* your MapProperties implementation */
val tileSource = /* your TileSource<RasterTile> implementation */
val mapState = rememberMapState(mapProperties = mapProperties)
KMaP(
modifier = Modifier.fillMaxSize(),
mapState = mapState,
) {
rasterCanvas(
parameters = RasterCanvasParameters(
id = 1,
tileSource = tileSource::getTile,
),
gestureWrapper = MapGestureWrapper(
onGesture = { centroid, pan, zoom, rotation ->
mapState.motionController.move {
rotateByCentered(rotation.toDouble(), centroid)
zoomByCentered(zoom, centroid)
positionBy(pan)
}
},
)
)
}