Loading...

Indoor Navigation Engine for Android

Build reliable indoor positioning, routing, and 3D map experiences

Production-ready SDK backed by Filament rendering, offline-first caching, and composable UI for maps, search, and turn-by-turn guidance.

Android SDK 24+ JDK 17 Gradle 8.2+

Deploy faster

<15 min

From SDK install to first rendered map.

Offline ready

100%

Maps and routes cached for spotty venues.

Multi-floor

10+

Floor-aware navigation with camera controls.

Why teams ship with MINE

Product-grade building blocks

Filament 3D rendering

Smooth indoor maps with light/dark/custom themes and floor-aware camera controls.

SceneView API

Navigation & path finding

Turn-by-turn guidance, obstacle avoidance, and offline routes for reliability.

Navigation Path finding

Map loading flexibility

Load JSON map builds from assets or CDN; push venue updates without app releases.

Map loading

Theming & UI components

Composable widgets for search, floor picker, overlays, and brand-aligned themes.

Themes UI components

Live demo

See navigation in action

Simulate a visitor experience with multi-floor routing, IPS/beacon positioning, and branded UI — directly in your app shell.

Screenshots

See the demo app up close

Browse the key demo screens: 3D map, search, floor picker, and turn-by-turn guidance.

  • Smooth 3D rendering with vector tiles and brandable themes.
  • Search and points of interest with contextual highlighting.
  • Floor picker aware of position plus dynamic legend overlays.
  • Turn-by-turn guidance with automatic rerouting.
Demo app screenshot

Quickstart

Install and render your first map

Add the SDK

// build.gradle.kts
dependencies {
    implementation("com.machinestalk:indoornavigationengine:1.0.0")
}

// Ensure Java 17
compileOptions {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
    jvmTarget = "17"
}

Render a map (Compose)

@Composable
fun VenueMap() {
    val context = LocalContext.current
    val mapData = remember { JsonUtil.LoadJsonFromAsset(context, "map.json") }

    IndoorNavigationScene(
        mapBuild = mapData,
        theme = MapTheme.Dark,           // or Light/Custom
        cameraConfig = CameraConfig.Default
    )
}

Load maps remotely

suspend fun fetchMap(): MapBuild {
    val loader = MapLoader()
    return loader.loadMapFromUrl("https://cdn.example.com/maps/venue-map.json")
}

Ready to ship

Launch branded indoor navigation faster

Start with the SDK, tailor the theme, and deliver turn-by-turn guidance your users can trust.

MINE — Machinestalk Indoor Navigation Engine