Skip to content

Beekon

Background-first location SDKs for Android, iOS and Flutter. Three native implementations, one normative spec, byte-for-byte parity verified by GPX replay.

Three things, on every platform: location capture, background execution, and a persistent history buffer. Locations come through raw — FusedLocationProviderClient on Android and CLLocationManager on iOS already smooth signals — so Beekon adds no Kalman filter, no outlier rejection, no speed clamp on top.

Persistence lives entirely inside the native library (Room on Android, GRDB on iOS). Writes never cross into Dart or JavaScript, because in background those runtimes are not guaranteed to be alive.

Android

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

io.github.wayqteam:beekon

iOS

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

BeekonKit via SwiftPM

Flutter

Dart plugin — Pigeon-generated MethodChannel + EventChannel over the native libraries. The plugin never participates in the write path.

beekon_flutter on pub.dev

BeekonConfig has exactly two scalars — a minimum time interval between fixes and a minimum distance. A fix is admitted only when both gates are satisfied. Pass 0 to disable a gate; the OS provider’s raw fixes are then forwarded as fast as the platform delivers them.

FieldDefaultDisable
intervalSeconds300
distanceMeters1000

That’s the complete signal-processing surface — there’s no Kalman filter, no outlier rejection, no speed clamp. The OS provider is the source of truth. See Tuning the gate for how to pick values for your use case.