Skip to content

Beekon

Background location for Android, iOS, Flutter, and React Native. Two native cores, one identical API — track on the device, keep a local history, and (optionally) upload to a backend you control.

Three beats — that’s the whole model:

  1. Configure and start(). Beekon tracks in the foreground, in the background, and after the app is swiped away, writing every fix to a local SQLite history on the device.
  2. Point it at your backend. Set a sync URL and the SDK batches and uploads fixes for you — with retries and token refresh. Leave it unset and nothing ever leaves the device.
  3. Receive the data. Your endpoint accepts a small, fixed JSON envelope. Build your ingest endpoint is a complete, working example.

That’s self-managed mode: you own the backend, or run fully on-device. Beekon Cloud — managed ingest, a console, and remote config — is in private beta; these docs cover the self-managed SDK you can ship today.

Nothing exotic to learn: 12 methods, two config arms, one stream per feature. The API shape is identical on every platform — only the language differs.

Android

Kotlin SDK with FusedLocationProviderClient, a foreground service, Room persistence, and a Flow API. minSdk 26.

io.github.beekonlabs:beekon

Source on GitHub

iOS

Swift package on CLLocationUpdate.liveUpdates + CLBackgroundActivitySession (and CLServiceSession on iOS 18+). GRDB persistence, AsyncStream API. iOS 17+.

BeekonKit via SwiftPM

Source on GitHub

Flutter

beekon_flutter — a 1:1 Dart wrapper over both native cores, with a Stream API and resumeIfNeeded() for cold-launch resume. Dart ^3.9, Flutter >=3.32.

beekon_flutter

Source on GitHub

React Native

@wayq/beekon-rn — a New Architecture TurboModule with on* subscriptions and resumeIfNeeded(). RN 0.76+, iOS 17, Android 8.

@wayq/beekon-rn

Source on GitHub

Android and iOS are real native libraries, written in Kotlin and Swift — not a shared engine squeezed into both. Flutter and React Native are thin wrappers over those same two cores, so background behaviour, gating, and persistence are identical everywhere.

Beekon admits a fix only when both a minimum time interval and a minimum distance have passed — two scalars, no Kalman filter, no outlier rejection, no speed clamp. The OS provider (FusedLocationProviderClient / Core Location) is the source of truth; Beekon forwards it faithfully. See Configuration for how to pick values.