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.

  1. 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")
    }
    }
  2. 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>")
    }

    wemap-vps-local is 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.N version 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.

  3. Ensure your app's minSdk is at least 23 (24 if you use the GeoAR SDK or either VPS positioning source):

     android {
    defaultConfig {
    minSdk = 23
    }
    }

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:

Link copied to clipboard

Common types, routing, points of interest, and analytics — the foundation every other Wemap SDK builds on.

Link copied to clipboard

Jetpack Compose support for the Wemap GeoAR SDK.

Link copied to clipboard

Augmented-reality navigation and points of interest overlaid on the device camera.

Link copied to clipboard

Jetpack Compose support for the Wemap Map SDK.

Link copied to clipboard

Customizable, interactive indoor/outdoor maps built on MapLibre.

Adaptive outdoor positioning that picks the best available provider at runtime.

Link copied to clipboard

Outdoor positioning backed by the Google Play Services fused location provider.

Link copied to clipboard

GPS-based outdoor positioning as a Wemap LocationSource.

Link copied to clipboard

Highly accurate indoor positioning using ARCore and Wemap's Visual Positioning System.

Link copied to clipboard

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.