Stop fighting with dirty wrappers and battery drain. Anchor is the native, crash-resistant background location tracking library built for the modern Kotlin Multiplatform stack.
From simple snapshots to complex geofencing, we cover the full spectrum of location intelligence.
Request a one-shot "Last Known Location" instantly, or subscribe to a continuous Kotlin Flow of location updates that keeps emitting even in the background.
Configurable tracking profiles optimize for battery life or high-precision. Our service survives OS kills and utilizes smart duty cycling to save data and power.
Anchor stores location points in a local SQLite database. Your app can query this history anytime, even if it wasn't listening to the real-time flow.
Configure a standard HTTP REST endpoint, and Anchor handles the upload. Even if offline, points are queued and delivered automatically when connectivity returns.
A straightforward, Kotlin-first API that maps directly to the native OS geofencing engine for maximum performance and minimum battery impact.
Go beyond simple circles. Anchor supports both standard circular geofences and complex Polygon Zones for precise area monitoring.
Detects if a user is using a "Fake GPS" app to spoof their location. Essential for gig-economy and delivery applications.
Emits periodic "I am alive" events even when the device is stationary, so your backend knows the tracking service is still healthy.
Configure the engine to only track when specific activities are detected (e.g. only when IN_VEHICLE or ON_BICYCLE).
Whether you are tracking fleets or fitness runs, Anchor provides the distinct capabilities you need.
Don't drain the driver's battery. Anchor uses a Finite State Machine to toggle high-precision GPS only when the vehicle is moving.
Capture every turn. Anchor supports High-Frequency Polling for running/cycling apps without the typical background termination issues.
Trigger events exactly when users enter a venue. Our Geofencing Engine wakes up the app silently to sync data or fire local notifications.
Lone worker safety or compliance tracking? Use our Heartbeat Pulse to verify device status even when stationary.
Stop wrestling with ancient Java callbacks and setter chains. Anchor provides a pure Kotlin DSL configuration and exposes data via reactive Flows and Coroutines. It is designed to feel native to your modern stack.
val config = AnchorProConfig.build { licenseKey = "CAPTAIN_KEY_123" // Universal settings trackActivity = true minUpdateDistanceMeters = 10.0 // Platform Specifics android { priority = AndroidPriority.HIGH_ACCURACY updateInterval = 5.seconds notification { title = "Anchor Tracking" iconName = "ic_gps" } } ios { desiredAccuracy = IosAccuracy.NAVIGATION autoPause = false } // Pro: Auto-Sync Engine sync { enabled = true url = "https://api.myapp.com/v1/locations" interval = 2.minutes batchSize = 50 httpHeaders = mapOf("Authorization" to "Bearer ...") } } AnchorPro.init(config)
// 1. Check current status (Non-blocking) val status = Anchor.checkPermission(PermissionScope.BACKGROUND) if (status == PermissionStatus.GRANTED) { Anchor.startTracking() } else { // 2. Request Permissions (Suspend function) // Handles OS dialogs & rationale automatically val result = Anchor.requestPermission( scope = PermissionScope.BACKGROUND ) if (result == PermissionStatus.GRANTED) { Anchor.startTracking() } }
// 1. Get One-Time Snapshot val snapshot = Anchor.getLocation() println("Current: ${snapshot.latitude}, ${snapshot.longitude}") // 2. Start Continuous Tracking Anchor.startTracking() // 3. Listen to updates (Foreground & Background) Anchor.locationFlow.collect { location -> println("New Fix: ${location.speed} m/s") if (location.isMock) { Alert.show("Fake GPS detected!") } } // 4. Stop Tracking Anchor.stopTracking()
// 1. Add Circular Geofence Anchor.addGeofence( id = "office_hq", center = AnchorPoint(52.52, 13.40), radius = 200.meters ) // 2. Add Polygon Zone (Complex Shape) Anchor.addGeofence( id = "warehouse_sector_a", points = listOf( AnchorPoint(52.5, 13.4), AnchorPoint(52.6, 13.5), AnchorPoint(52.7, 13.3) ) ) // 3. Listen for Events // Note: Anchor automatically persists geofences and // restores them on device reboot. No need to re-add. Anchor.geofenceFlow.collect { event -> when(event.type) { GeofenceType.ENTER -> notify("Welcome to ${event.regionId}") GeofenceType.EXIT -> logExit(event.regionId) } }
Google Play Services & HMS supported | API syntax is currently in draft for v1.0
Start with the free core. Upgrade when you need the heavy lifting.
For indie apps & raw tracking.
Batteries included for production.
Pay once, keep forever.
Subscription covers updates & support. Keep using your last version indefinitely if you cancel.
Total control and compliance.
Lifetime Source Updates.
Includes 1st year premium support.
Optional support renewal: €249/yr.
For Dev Shops & Resellers.
The Anchor Core (Free) version is available now. The Pro/Enterprise features are targeting a stable v1.0 release in March 2026. We are currently in active development and internal testing to ensure rock-solid stability before public launch.
Absolutely. While Anchor is built for Kotlin Multiplatform, it compiles down to a standard Android library (AAR). You can use it in any native Android project to replace legacy location services.
No limits. You can use Anchor in unlimited applications across unlimited devices. We do not charge per-device or per-seat fees.
Fair Usage Policy applies: The license is valid for apps owned or developed by the license holder. It cannot be shared or sub-licensed to unrelated entities.
We believe in sustainable open source. Livotov Labs is bootstrapped, not VC-funded. The Pro fees allow us to dedicate full-time engineering hours to maintenance and support, ensuring the library stays robust.
This is why we strictly avoid per-seat usage fees—our goal is to earn a fair living while keeping the project healthy for the community.
Still have a question? Email us or create an issue on GitHub.
Anchor is currently in active development. v1.0 release is planned March 2026. Join the waitlist to be notified when the beta drops and lock in a 50% Early Bird Discount on Pro licenses.