Getting Started with Wemap SDKs
Location tracking, routing, and navigation for Android.
The Wemap SDKs provide comprehensive location, routing, and navigation capabilities for Android apps. They are distributed as several libraries that share a single session:
-
WemapCoreSDK — common types and the foundation for all other SDKs (API access, routing, POIs).
-
WemapMapSDK — customizable, interactive maps built on MapLibre.
-
WemapMapComposeSDK — Jetpack Compose support for the Map SDK (
WemapMap). Optional and separate, so View-based apps never depend on the Compose runtime. -
WemapGeoARSDK — augmented-reality navigation and points of interest.
-
WemapGeoARComposeSDK — Jetpack Compose support for the GeoAR SDK (
WemapGeoAR). -
WemapPositioningSDK — indoor/outdoor positioning:
-
VPS ARCore — visual positioning system, camera-based (best for indoor).
-
GPS — global positioning system (best for outdoor).
-
Android Fused Adaptive — adaptive fused location (Google Play Services or system, best for outdoor).
Each library has its own reference — see the module list below.
Upgrading from 0.x
v1 is a breaking release. Migrating to v1 walks through it in twelve steps, each of which leaves your project compiling, and ends with an index from compiler error to step number.
Requirements
| Wemap SDK | compileSdk | minSdk | Kotlin | Java/JVM |
|---|---|---|---|---|
| 1.x | 37 | 23 (Android 6.0) | 2.2+ | 11 |
Four modules require minSdk 24, each because a hardware-gated dependency demands it: the GeoAR SDK and its Compose companion (ARCore/SceneView, which also need Java 17), and the two VPS positioning sources — wemap-vps-arcore (ARCore) and wemap-vps-local (LiteRT). All other modules target minSdk 23 and Java 11.
The two Compose modules additionally need a Compose BOM of 2026.06.01 or newer. They require no newer AGP or compileSdk than the rest of the SDK.
Installation
Add the SDK as a dependency via Gradle.
-
Declare the Wemap Maven repository in
settings.gradle.kts:dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
// Wemap Maven repository
maven("https://s3.eu-west-1.amazonaws.com/mobile.getwemap.com/releases/android")
}
}Content copied to clipboard -
Add the modules you need to your module-level
build.gradle.kts:dependencies {
// interactive maps
implementation("com.getwemap.sdk:map:<version>")
// ...plus this one if you use Jetpack Compose
implementation("com.getwemap.sdk:map-compose:<version>")
// AR navigation
implementation("com.getwemap.sdk:geo-ar:<version>")
// ...plus this one if you use Jetpack Compose
implementation("com.getwemap.sdk:geo-ar-compose:<version>")
// positioning — VPS (indoor)
implementation("com.getwemap.sdk.positioning:wemap-vps-arcore:<version>")
// positioning — adaptive fused (outdoor)
implementation("com.getwemap.sdk.positioning:android-fused-adaptive:<version>")
// positioning — offline VPS (indoor, no network). Alpha, and on a version line of its own:
// use its own `<alpha-version>`, NOT the one above. See the note below before adding it.
implementation("com.getwemap.sdk.positioning:wemap-vps-local:<alpha-version>")
}Content copied to clipboardwemap-vps-localis alpha and needs data from us. Its whole public API requires an explicit > opt-in, it does not follow semantic versioning — any declaration may change or disappear in any > release, including a patch — and it carries its own-alpha.Nversion rather than the one every other > module shares. It also positions against a pre-built map database for your venue, which we build > and provide; without one the location source has nothing to match camera frames against. Talk to us > before building on it. -
Ensure your app's
minSdkis at least 23 (24 if you use the GeoAR SDK or either VPS positioning source):android {
defaultConfig {
minSdk = 23
}
}Content copied to clipboard
Creating a session
Every Wemap SDK is driven by a session, which loads a map's data once and owns the shared state the SDKs build on (routing, POIs, positioning). Create one session and pass it to each component you use. You need a mapId and a token — contact the Wemap team.
import com.getwemap.sdk.core.CoreSession
import com.getwemap.sdk.core.configs.SessionConfig
// CoreSDK alone (API access, no rendering):
val session = CoreSession.create(
context, mapId = 19158, token = "YOUR_TOKEN", config = SessionConfig(environment = Environment.PROD)
)
import com.getwemap.sdk.map.MapSession
import com.getwemap.sdk.map.configs.MapViewConfig
// Map rendering — create a MapSession and pass it to a WemapMapView:
val session = MapSession.create(context, mapId = 19158, token = "YOUR_TOKEN")
mapView.configure(session, MapViewConfig())
The same session can be passed to positioning sources and the AR view, keeping routing, POIs, and user location consistent across every SDK.
Examples
For sample implementations, see the official sample-apps repository.
All modules:
Common types, routing, points of interest, and analytics — the foundation every other Wemap SDK builds on.
Jetpack Compose support for the Wemap GeoAR SDK.
Augmented-reality navigation and points of interest overlaid on the device camera.
Jetpack Compose support for the Wemap Map SDK.
Customizable, interactive indoor/outdoor maps built on MapLibre.
Adaptive outdoor positioning that picks the best available provider at runtime.
Outdoor positioning backed by the Google Play Services fused location provider.
GPS-based outdoor positioning as a Wemap LocationSource.
Highly accurate indoor positioning using ARCore and Wemap's Visual Positioning System.
This module is a pre-release, alpha offline VPS location source. Its entire public API is marked com.getwemap.sdk.positioning.wemapvpslocal.AlphaVpsLocalApi and requires an explicit opt-in to use.