Android
Kotlin SDK with FusedLocationProviderClient, foreground service, Room persistence, and a Kotlin Flow API. Min SDK 26.
io.github.wayqteam:beekon
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.
| Field | Default | Disable |
|---|---|---|
intervalSeconds | 30 | 0 |
distanceMeters | 100 | 0 |
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.