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.
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 APINavigation & path finding
Turn-by-turn guidance, obstacle avoidance, and offline routes for reliability.
Navigation Path findingMap loading flexibility
Load JSON map builds from assets or CDN; push venue updates without app releases.
Map loadingTheming & UI components
Composable widgets for search, floor picker, overlays, and brand-aligned themes.
Themes UI componentsLive 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.
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