NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #3636 most downloaded on pub.dev
iOS implementation of the Tracelet background geolocation plugin.
Last release 1 months ago
16 Aug 2026
Ships on a steady schedule
a new release about every 8 days
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
7 months old
169 releases · first in 2026
One column per month.
FIX: streamline geofence event payload handling in fromMap method.
FIX(ios): Remove TraceletCore+Dummy.swift / TraceletSyncFFI+Dummy.swift — @_silgen_name declarations from the old static library model caused "Undefin
TraceletCore+Dummy.swift / TraceletSyncFFI+Dummy.swift — @_silgen_name declarations from the old static library model caused "Undefined symbol" linker errors after the static→dynamic xcframework migration.ForegroundServiceStartNotAllowedException in LocationService.start() so calling ready() from the background on Android 12+ no longer crashes the host app; the foreground service start is deferred until the app returns to foreground.FIX: Persist geofence ENTER/EXIT events in offline queue and auto-sync to server — events were previously dispatched to the app but never stored in th
event_type, event_payload) for geofence events round-trips correctly through getLocations() and insertLocation().setSyncBodyBuilder (Issue #125).NOT_READY error before ready() is called to match iOS parity; previously Android silently ignored SDK calls before initialization (Issue #129).flutter_rust_bridge has not been initialized on release builds — TraceletCore is now a dynamic framework, preventing dead-code stripping of FRB symbols (Issues #116, #123, #124).Failed to lookup symbol 'frb_get_rust_content_hash' — Rust symbols are now loaded directly from libtracelet_core.so bypassing RTLD_LOCAL isolation (Issues #116, #123).is_moving state per location record so getLocations() returns accurate values instead of always returning the current live state (Issue #126).FIX(ios): prevent dead code stripping of flutter_rust_bridge symbols in release builds.
showPowerManager to handle aggressive battery restrictions on specific OEM devices.PERF: Optimize database timestamp queries for O(log N) fast filtering and resolve precision bugs (Issue #119).
sslPinningFingerprints natively across iOS and Android with Rust configs.FIX: Resolved iOS accelerometer sensitivity mismatch (stationary lock) by normalizing incoming m/s² thresholds to g-force expected by CMMotionManager.
flutter_rust_bridge dynamic library load failures on release builds for users without use_frameworks! by preserving global symbols during Xcode stripping.FIX(ios): safely resolve dynamic symbols when use_frameworks! :linkage => :dynamic is used.
use_frameworks! :linkage => :dynamic is used.FIX: Force speed motion manager to evaluate initial speed on Android to prevent the state machine from being permanently stuck in MOVING when indoors
MOVING when indoors (#115).flutter_rust_bridge has not been initialized crash by ensuring the Rust core is instantiated and initialized before accessing methods (#116).CHORE: Sync release versions across all federated packages and update Swift Package Manager configuration.
CHORE: Align federated package versions and include additional patch updates.
FEAT: Implement short-lived WakeLocks for transient background tasks (startBackgroundTask / stopBackgroundTask), improving background execution reliab
startBackgroundTask / stopBackgroundTask), improving background execution reliability on Android (matches iOS beginBackgroundTask).tracelet_sync module, which must now be included if you require network synchronization.FIX(ios): prevent dead code stripping of flutter_rust_bridge symbols in SPM apps by referencing them explicitly in TraceletIosPlugin
Nothing published for this version
Nothing published for this version
Nothing published for this version
FIX(ios): prevent dead code stripping of flutter_rust_bridge symbols in iOS release builds by setting DEAD_CODE_STRIPPING=NO in CocoaPods xcconfig.
FIX(android): conditionally apply kotlin-android plugin to support older flutter SDKs while preventing warnings in modern Flutter environments.
release.yml.- Fix iOS SPM publishing
FIX(android): apply kotlin-android plugin to fix gradle build errors on newer AGP versions.
Nothing published for this version
Nothing published for this version
CHORE: Sync release versions across workspace.
Nothing published for this version
Nothing published for this version
Nothing published for this version
FIX(ios): Add missing FlutterFramework dependency to SPM plugin configuration to resolve compilation failures and PlatformExceptions.
FlutterFramework dependency to SPM plugin configuration to resolve compilation failures and PlatformExceptions.FEAT: Massive Architecture Rewrite — Core algorithms are now powered by a high-performance Rust Core using flutter_rust_bridge.
flutter_rust_bridge.MotionDetectionMode.smart powered by the Rust battery budget engine.FEAT: Smart Foreground Notification Visibility (Android) — Added dynamic foreground service notification management. The notification now intelligentl
tl.MotionDetectionMode.speed). In this mode, motion state transitions are driven directly by GPS speed calculations rather than raw accelerometer hardware. This provides enhanced compatibility and reliability on devices with aggressive sensor sleep policies, particularly in vehicular tracking scenarios.stopTimeout countdown. Previously, if the device was still for 5 seconds on a smooth road, it would begin the 60-second stop countdown and ignore any subsequent bumps or shakes. Now, the accelerometer remains active during the countdown and will correctly abort the stationary transition if motion resumes (#85).TraceletHasRequestedAlways is now properly reset upon notDetermined OS state.retryBackoffCap and retryBackoffBase. Time values are now properly cast as milliseconds instead of seconds, resolving a severe bug where HTTP retries fired every 60ms during network failure, causing excessive CPU/network thrashing and a massive 58KB+ log flood.Tracelet.locationStream pipeline. Replaced the faulty asyncMap batch processing with a highly robust .expand() implementation. The Tracelet.locationStream now correctly parses, type-casts, and guarantees delivery of every individual Location object without throwing type '_Map<Object?, Object?>' is not a subtype of type 'Map<String, dynamic>' or silently discarding valid coordinates.LocationEngine.stop from unintentionally overriding the global stateManager.enabled flag during speed-based motion transitions.MotionDetectionMode.accelerometer as the default to ensure immediate indoor responsiveness upon installation.Packages with breaking changes:
2.0.8.Packages with breaking changes:
Packages with other changes:
Packages with dependency updates only:
Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
tracelet - v2.0.7tracelet_doctor - v1.0.2Int64 integer values across all iOS config mappings. This ensures that integer configurations (such as stopTimeout) sent from Dart are correctly applied on iOS.distanceFilter to continuous tracking during stopTimeout when preventSuspend is active, significantly reducing stationary battery drain.TraceletSDK dependency to 2.0.8.FIX(interface): correct intToAuthStatus permission index mappings ([#80](https://github.com/Ikolvi/Tracelet/issues/80)).
CHORE: Update tracelet_platform_interface constraint to ^2.0.6.
tracelet_platform_interface constraint to ^2.0.6.TraceletSDK dependency to 2.0.6.CHORE: Version bump for monorepo consistency and package lockstep alignment.
tracelet_platform_interface constraint to ^2.0.5.2.0.5.CHORE: Version bump for monorepo consistency and native SDK alignment.
tracelet_platform_interface constraint to ^2.0.4.FIX: Removed unreliable timestamp drift heuristic from location spoofing detection.
FIX: Fixed persistent blue location indicator by properly conditionally disabling CLBackgroundActivitySession and startUpdatingLocation() in low-accur
CLBackgroundActivitySession and startUpdatingLocation() in low-accuracy geofence-only mode.TraceletSDK dependency to 2.0.1.BREAKING: Migrated to Pigeon for all platform-to-native communication, providing a type-safe interface for host and flutter API calls.
CoreLocation and CoreMotion requests are dispatched on the main thread.CLAuthorizationStatus mapping in the native bridge to ensure accurate permission status reporting to Flutter.TraceletSDK dependency to 2.0.0.2: 3: - CHORE: Bump native TraceletSDK dependency to 1.1.4. 4: 5: ## 1.9.2
2:
3: - CHORE: Bump native TraceletSDK dependency to 1.1.4.
4:
5: ## 1.9.2
tracelet_platform_interface 1.9.2. No iOS-side changes.Nothing published for this version
CHORE: Constraint bump to tracelet_platform_interface 1.9.1. No iOS-side changes.
tracelet_platform_interface 1.9.1. No iOS-side changes.FIX: Picks up the tracelet_platform_interface 1.9.0 fix that restores extras and vertices propagation for addGeofence (#58). No native-side changes.
tracelet_platform_interface 1.9.0 fix that restores extras and vertices propagation for addGeofence (#58). No native-side changes.PERF: Reduce first-fix latency on stationary → moving transitions. LocationEngine.changePace(true) now fires an additional one-shot requestLocation()
LocationEngine.changePace(true) now fires an additional one-shot requestLocation() so a fresh GPS fix arrives as soon as the hardware is warm, instead of waiting for distanceFilter on the continuous stream (#54).CHORE: Version bump for geofence/location extras round-trip fix in tracelet_android (#51 follow-up). iOS already handled extras correctly; regression
extras round-trip fix in tracelet_android (#51 follow-up). iOS already handled extras correctly; regression tests added to lock in parity.FIX: Guard against secondary FlutterEngine (e.g. Firebase background messaging) overwriting SDK singleton's event sender and callbacks (#51).
FIX: Version bump for killed-state tracking fix in tracelet_android (#50).
tracelet_android (#50).FEAT: Add syncInterval support — timer-based HTTP sync via DispatchSourceTimer (#50).
syncInterval support — timer-based HTTP sync via DispatchSourceTimer (#50).1.0.9.FIX: Fix SubsystemTests static property access for HttpSyncManager callbacks.
SubsystemTests static property access for HttpSyncManager callbacks.1.0.8.CHORE: Align federated package versions and include additional patch updates.
1.0.7.FIX: getCurrentPosition(samples: 1) now uses startUpdatingLocation instead of CLLocationManager.requestLocation() — forces a fresh GPS fix with proper
getCurrentPosition(samples: 1) now uses startUpdatingLocation instead of CLLocationManager.requestLocation() — forces a fresh GPS fix with proper timeout instead of returning stale cached locations (#46).onRequestFreshHeaders invocation — eliminates latency before every sync request. Token refresh handled by onAuthorizationRequired on 401.1.0.6.ready() — guards relaxed from isReady to manager != nil.FIX: getCurrentPosition() falls back to last known location when CLLocationManager returns no fix (e.g. simulator, GPS-off) — fixes LOCATION_UNAVAILAB
getCurrentPosition() falls back to last known location when CLLocationManager returns no fix (e.g. simulator, GPS-off) — fixes LOCATION_UNAVAILABLE errors (#46).1.0.5.FIX: Pin native SDK dependency to exact version 1.0.4 — prevents CocoaPods from auto-resolving to incompatible newer releases.
1.0.4 — prevents CocoaPods from auto-resolving to incompatible newer releases.FIX: Add isReady guards to getState(), setConfig(), reset(), getCurrentPosition(), changePace(), startSchedule(), stopSchedule() in Flutter bridge — r
isReady guards to getState(), setConfig(), reset(), getCurrentPosition(), changePace(), startSchedule(), stopSchedule() in Flutter bridge — returns safe defaults or NOT_READY error instead of crashing (re-fixes #46).FIX: TraceletSdk.stop() now checks isReady before accessing managers — prevents crash when stop() is called before ready().
TraceletSdk.stop() now checks isReady before accessing managers — prevents crash when stop() is called before ready().TraceletHostApiImpl.stop() returns NOT_READY PigeonError when called before initialization.FIX: Periodic mode no longer shows persistent location indicator — removed CLBackgroundActivitySession from periodic tracking (it caused the blue arro
CLBackgroundActivitySession from periodic tracking (it caused the blue arrow to stay on permanently instead of briefly during each fix).BackgroundActivitySessionManager, ServiceSessionManager, and PeriodicModeBackgroundSession unit tests.FIX: ConfigManager null-merge — filter NSNull values during merge so partial setConfig() does not overwrite existing non-null config.
setConfig() does not overwrite existing non-null config.import UIKit in LocationEngine.swift for UIBackgroundTaskIdentifier.altitudeAccuracy, speedAccuracy, headingAccuracy), dead reckoning isCharging → is_charging.insertLocation reads camelCase accuracy keys with snake_case fallback; locationRowToMap outputs camelCase.destroySyncedLocations() — deletes only synced locations from the database.HttpSyncManager.deleteSyncedLocations.FIX: Wire headlessFallback in eventSenderFactory (preventive — ensures future factory consumers can route to HeadlessRunner).
headlessFallback in eventSenderFactory (preventive — ensures future factory consumers can route to HeadlessRunner).EventDispatcher to use Pigeon TraceletEventApi FlutterApi.TraceletHostApiImpl for type-safe Pigeon HostApi dispatch.sdk/ios/ module (CocoaPods: TraceletSDK, SPM package).FEAT: Rewrite EventDispatcher to use Pigeon TraceletEventApi FlutterApi instead of FlutterEventChannels.
EventDispatcher to use Pigeon TraceletEventApi FlutterApi instead of FlutterEventChannels.TraceletHostApiImpl for type-safe Pigeon HostApi dispatch.sdk/ios/ module.^1.6.3-alpha.1.FEAT: Add 401-aware retry — on HTTP 401 Unauthorized, invoke headless headers callback to refresh token, then retry once with updated dynamic headers.
FEAT: Add SSL certificate pinning — URLSessionDelegate-based validation with SHA-256 fingerprint matching via CommonCrypto.
URLSessionDelegate-based validation with SHA-256 fingerprint matching via CommonCrypto.tracelet_platform_interface dependency constraint to ^1.6.0.CHORE: Update tracelet_platform_interface dependency constraint to ^1.5.0.
tracelet_platform_interface dependency constraint to ^1.5.0.FIX: Rename PermissionManager to TraceletPermissionManager to avoid class name collision with permission_handler_apple (#32).
PermissionManager to TraceletPermissionManager to avoid class name collision with permission_handler_apple (#32).tracelet_platform_interface dependency constraint to ^1.4.6.Your coding agent can read these notes before it upgrades. Set up the MCP server →