NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev
Reliable background geolocation for Flutter (BGeo engine) — iOS & Android. Motion-aware tracking, offline HTTP queue, geofences, headless events.
Last release 3 days ago
05 Oct 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 17 of 17 stable releases
Nothing withdrawn
no release was ever pulled
2 months old
17 releases · first in 2026
One column per month.
Release 0.4.0: the SDK is free, no license key needed (engine 0.17.0)
Release 0.4.0: the SDK is free, no license key needed (engine 0.17.0)
ready()/start()
license gate is gone, so LICENSE_* errors are never returned; the
licenseMissing/licenseInvalid/licenseExpired/licenseAppMismatch
constants are deprecated and will be removed in the next major. You can
delete the com.bgeo.license meta-data (Android) and BGeoLicense
Info.plist key (iOS) from your app.Release 0.3.3: engine 0.16.11, refused foreground-service starts no l…
Release 0.3.3: engine 0.16.11, refused foreground-service starts no l…
LocationService now calls startForeground before any
bail-out (stopping a startForegroundService-started service before
startForeground is fatal), the geofence wake receiver tolerates a refused
FGS exemption (seen on Android 16) and falls back to dormancy, and the boot
receiver skips the start without ACCESS_BACKGROUND_LOCATION instead of
hitting a SecurityException.Release 0.3.2: engine 0.16.10, drop non-finite compass samples (Andro…
Release 0.3.2: engine 0.16.10, drop non-finite compass samples (Andro…
watchHeading) crashed
the app with JSONException: Forbidden numeric value: NaN; a later NaN
silently froze the heading stream for the rest of the session. Such
samples are now dropped before they reach the smoother.Release 0.3.1: engine 0.16.9, experimental wakeTrailEnabled/wakeTrail…
Release 0.3.1: engine 0.16.9, experimental wakeTrailEnabled/wakeTrail…
wakeTrailEnabled (default false) and wakeTrailCount (default 8). No
behaviour change unless you turn it on.Release 0.3.0: engine 0.16.8, crash/distraction events, wake ring + d…
Release 0.3.0: engine 0.16.8, crash/distraction events, wake ring + d…
onCrash (on-device collision detection, crashDetection
config) and onDistraction (phone handling while driving,
distractionDetection config; flagged fixes carry dds/ddc/ddd
extras). Both are off by default.wakeRegionRingCount / wakeRegionRingDistance (iOS wake ring
of entry-monitored satellites around the parked anchor — faster departure
wakes for a killed or suspended app; app geofences are now capped at
19 − ringCount, 11 by default) and dormantOnStationary /
dormantWakeInterval / dormantGrace (Android: drop the foreground service
while parked and take periodic Doze-proof fixes instead; off by default).ProviderChangeEvent.insufficientlyInUse (iOS 17+): locationd refused the
background session; the engine falls back to the legacy location manager.com.bgeo.gf.* with a one-time sweep of foreign regions on first launch
(re-register your own CLRegions after that launch — see the geofencing
guide).watchPosition stops on task-removed.Release 0.2.2: engine 0.14.1 (parked pause/resume)
Release 0.2.2: engine 0.14.1 (parked pause/resume)
Release 0.2.1: engine 0.14.0 (iOS killed-wake continuity)
Release 0.2.1: engine 0.14.0 (iOS killed-wake continuity)
Split license: pure-MIT LICENSE for the bridge, LICENSE-BINARY.md for…
Split license: pure-MIT LICENSE for the bridge, LICENSE-BINARY.md for…
LICENSE file is now the plain MIT license covering the
bridge sources; the proprietary engine-binary terms moved unchanged to
LICENSE-BINARY.md. No functional changes.Release 0.1.8: engine 0.13.5 (iOS license banner text fix)
Release 0.1.8: engine 0.13.5 (iOS license banner text fix)
Engine 0.13.4: a release build that fails the license check (LICENSE_MISSING, LICENSE_INVALID, LICENSE_EXPIRED, LICENSE_APP_MISMATCH) now shows a pers
LICENSE_MISSING,
LICENSE_INVALID, LICENSE_EXPIRED, LICENSE_APP_MISMATCH) now shows a
persistent on-screen banner with the error code and app id. Previously
tracking was silently blocked — easy to ship without noticing. Debug builds
and the iOS simulator are unaffected. No Dart API changes.Engine 0.13.3: getState() on Android now reports the health fields iOS has always reported — trackingActive, authorization, and lastRawFixAge / lastAc
getState() on Android now reports the health fields iOS has
always reported — trackingActive, authorization, and lastRawFixAge /
lastAcceptedFixAge (seconds, null until a fix arrives). The raw age is
stamped before the location filter runs, so the pair tells "the OS stopped
delivering fixes" apart from "the filter is rejecting them". Read them off
state.raw; no Dart API changes.Engine 0.13.2: a stationary device uploads again. watchPosition no longer drops its persist option on the way to the per-tick fix, and getCurrentPosit
watchPosition no longer
drops its persist option on the way to the per-tick fix, and
getCurrentPosition(persist: true) waits for a fresh fix instead of
resolving with the provider's replay of the last known location, which the
old same-timestamp dedup then silently discarded — so heartbeat records
never reached the server. Persist dedup is now by record identity
(stamp + channel). No Dart API changes.Location.isMoving is bool? — the probing-window null is no longer collapsed to false.
Location.isMoving is bool? — the probing-window null is no longer collapsed
to false.
Location.isMoving is now bool? instead of bool.
Both engines send is_moving: null while a cold-started session's first
fixes are still in the unconfirmed-MOVING probing window (up to
stopTimeout minutes after start()); the decoder used to collapse that
to false, so an app could not tell "not yet known" from "stationary".
If you don't care about the difference, replace location.isMoving with
location.isMoving ?? false. MotionChangeEvent.isMoving is unchanged
(non-nullable) — the engines always send a real verdict there.Engine 0.13.1: geofenceschange.off keeps geofence geometry, providerState reports accuracyAuthorization.
Engine 0.13.1: geofenceschange.off keeps geofence geometry, providerState
reports accuracyAuthorization.
onGeofencesChange: geofences in the off list now carry their real
radius/latitude/longitude again. Removing an actively monitored
geofence used to emit an identifier-only record, which Geofence.fromMap
decoded as zeroed geometry.providerState / onProviderChange: accuracyAuthorization is now
populated (0 = full, 1 = reduced) instead of always decoding to null.
On Android it reports reduced when only ACCESS_COARSE_LOCATION is granted.Engine 0.13.0: production licence signing key, iOS privacy manifest, Android engine coordinate moved to dev.bgeo:bgeo-android.
Engine 0.13.0: production licence signing key, iOS privacy manifest,
Android engine coordinate moved to dev.bgeo:bgeo-android.
BGeoCore.xcframework now ships an Apple privacy manifest
(PrivacyInfo.xcprivacy) declaring precise/coarse location collection for
app functionality and the NSUserDefaults required-reason API (CA92.1).com.bgeo:bgeo-android:0.12.1 to dev.bgeo:bgeo-android:0.13.0. It's
vendored in this package's local Maven repo per the documented setup, so no
action is needed unless you hand-wrote the old coordinate directly.No functional changes. Release-infrastructure housekeeping: first version published through CI (GitHub Actions → pub.dev automated publishing); engine
Full RN/native react-native-background-geolocation API parity ported to Futures/Streams: ready/start/stop/setConfig/getState, changePace, getCurrentPo
Initial release.
react-native-background-geolocation API parity ported to
Futures/Streams: ready/start/stop/setConfig/getState, changePace,
getCurrentPosition/watchPosition, permission + provider-state queries,
odometer, upload queue (sync/getLocations/destroyLocation(s)/getCount/
insertLocation), auth state, persisted logger (getLog/destroyLog/
uploadLog), and geofences (add/remove/getGeofences/geofenceExists).onLocation, onLocationError, onMotionChange,
onHeartbeat, onGeofence, onGeofencesChange, onProviderChange,
onPowerSaveChange, onHttp, onConnectivityChange, onAuthorization.FlutterEngine.BGeoCore.xcframework, iOS 15.5+) and Android (bgeo-android AAR,
minSdk 24) closed-source engine binaries vendored with the package.Your coding agent can read these notes before it upgrades. Set up the MCP server →