> ## Documentation Index
> Fetch the complete documentation index at: https://docs.userpilot.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Userpilot Flutter SDK Release Notes

> Release history for the Userpilot Flutter mobile SDK.

## 1.3.0  – Sep 29, 2026

🚀 Overview
This release adds persistent offline analytics, preserves startup screen tracking, and improves Android build compatibility.

🐛 Bug Fixes

* Preserved the latest startup screen until initialization completed, for both manual tracking and screen Auto Capture, without sending duplicate screen events.
* Fixed Android build configuration failures with Android Gradle Plugin 9 and aligned Kotlin compatibility with the native SDK.

✨ Features

* Added persistent offline storage for identify calls, screen views, custom events, and Auto Capture events.
* Added automatic batch sending of stored events when the connection returns, including events saved before an app restart.

Offline analytics requires no additional configuration.

📦 Dependency Updates

* Upgraded the Userpilot native SDK dependencies to iOS 1.4.0 and Android 1.4.0.

See [Offline Mode](/docs/developer/installation/mobile/flutter/features#offline-mode) for supported behavior and storage limits.

***

## 1.2.0  – Sep 9, 2026

🚀 Overview
This release adds deep link / URL scheme handling, brings preview experiences and test push notifications to Flutter, and makes interaction autocapture substantially cheaper.

✨ New

* Deep links / URL scheme handling via `Userpilot.didHandleURL(uri)`. Pass the whole URL, scheme and host included, and route the link yourself when it returns `false`. See [Custom URL Scheme](/docs/developer/installation/mobile/flutter/custom_scheme).
* `didHandleURL` now waits for `initialize` instead of dropping the link, so you no longer have to order the two calls. Up to 10 URLs wait at once, each for at most 10 seconds, after which it returns `false` and your own routing runs.
* Preview experiences and test push notifications.
* `UserpilotRedactText` and `UserpilotIgnoreInteractions` can now be nested. They take an optional `redact` / `ignore` flag and the marker closest to the interaction wins, so `UserpilotRedactText(redact: false, child: …)` re-enables capture inside a subtree an ancestor masked. The flag defaults to `true`, so existing code that passes no flag keeps working unchanged.

🐛 Bug Fixes

* Prevented queued deep links from being routed twice when native URL handling was slow, and safely returned failed links to the app for routing.
* Fixed Android navigation subscription cleanup so cancelling navigation events no longer disabled experience callbacks.

⚡️ Performance

* Interaction autocapture no longer walks your whole widget tree on every touch, and no longer repeats the same work for each candidate it considers. Resolving a tap used to cost more the bigger the screen, which showed up as jank while scrolling anywhere in an app.
* **Resolving a tap no longer scales with the size of the screen.** On a 400-row screen it measured 71.8ms down to 23.2ms per tap, and is now flat rather than growing with the row count. Building the captured hierarchy used to search each ancestor's whole subtree for an accessibility label, so the cost multiplied by both the depth of the hierarchy and the size of the screen.
* Collecting accessibility metadata no longer walks a widget's whole subtree when its nearest ancestor already declares the value, and no longer repeats that walk for each hit-test element that resolves to the same widget.
* `maxHierarchyDepth` still defaults to 25. Now that the cost it bounds is a small fixed amount, lowering it is not a meaningful performance lever — choose it for the elements you need to target on. It also bounds how far up accessibility fields are read, so a shallower window can drop a `Semantics` label a rule depends on. See [Tuning maxHierarchyDepth](/docs/developer/installation/mobile/flutter/auto-capture#tuning-maxhierarchydepth).

🛠 Improvements

* Android now rejects SDK calls made before `initialize` with a `notInitialized` error instead of silently ignoring them, matching iOS.
* Updated Userpilot native SDK dependencies — iOS 1.3.0, Android 1.3.0.

⚠️ Breaking Changes

Autocapture was rewritten to derive these values from what each widget declares rather than from traversing the surrounding tree, which is both what made them vary between interactions and what made the work grow with the size of the screen. The values are now consistent and cheaper to produce, and they are different values — so rules matching them need rebuilding. [Autocapture hierarchy changes in 1.2.0](/docs/developer/installation/mobile/flutter/autocapture-hierarchy-changes) shows each value before and after, and the steps to follow.

* **Captured hierarchies report a lazy list row's own item index in `attr__index`.** It previously counted the row's position among the children the list had *built*, a set that changes as the viewport moves — the same row reported `attr__index="3"` at one scroll offset and `"2"` at another. Rules that match a hierarchy containing a `ListView` or `SliverList` segment need updating to the row's item index.
* **Accessibility fields resolve to the nearest declared source, with both search directions limited.** `accessibility_label`, `accessibility_identifier`, `accessibility_hint`, `accessibility_value` and `view_tag` are now read from the interacted element's closest `Semantics` ancestor, bounded by `maxHierarchyDepth`, and fall back to the element's own subtree only for fields no ancestor declared. The previous calculation collected every `Semantics` up to the root and throughout the subtree before choosing, so the value could come from far away in the tree. Rules matching a value that came from outside `maxHierarchyDepth`, or a `view_tag` taken from a descendant, need updating to the value on the nearest `Semantics`.
* **Captured hierarchies report `attr__desc` only on the element that carries the accessibility label.** It previously searched each node's whole subtree, so an unrelated child's label was copied onto every ancestor segment — a `Checkbox`'s label appearing on `Viewport` — and the value changed depending on which rows a lazy list happened to have built, meaning the same element could report different hierarchies at different scroll positions. Targeting rules that match one of those copied `attr__desc` values need updating to match the element that owns the label instead.
* **The recommended iOS deep link setup now uses the `UIScene` lifecycle**, which requires Flutter 3.38.0 or later in your app. The previous app-delegate setup still works below that version and stays documented.

***

## 1.1.0  – Aug 16, 2026

🚀 Overview
This release introduces Auto Capture, which records screen views and interactions from your widget tree without you instrumenting each one.

✨ New

* Auto Capture support. Wrap your app in `UserpilotAutocaptureWidget` and add `UserpilotAutocaptureNavigatorObserver` to your navigator observers, then enable what you want in `UserpilotOptions` — `enableScreenAutoCapture` for screen views and `enableInteractionAutoCapture` for taps, selections and text changes. See [Auto Capture](/docs/developer/installation/mobile/flutter/auto-capture) for the captured fields and the privacy controls.
* `UserpilotRedactText` and `UserpilotIgnoreInteractions` to mask captured text or suppress capture for a subtree.
* The sample app gained screens for exercising Auto Capture.

🛠 Improvements

* Expanded the README and developer documentation.
* Added unit test coverage.
* Updated Userpilot native SDK dependencies — iOS 1.2.2, Android 1.2.2.

***

## 1.0.14  – May 21, 2026

**🚀 Description**\
This release includes improvements to cached event handling and event processing stability in the mobile SDK.

🛠 Improvements

* Added automatic cleanup of cached track events by invoking clearCachedEvent() after processing to prevent duplicate event handling and tracking.

***

## 1.0.13  – Mar 15, 2026

🚀 Overview
This release focuses on upgrading Userpilot iOS SDK dependency.

🐛 Bug Fixes

* iOS: Fixed a crash related to socket by moved Socket, Channel, and timer callbacks to the main thread, removed internal locks, and centralized delegate callbacks. Added robust push timeout handling, limited automatic socket reconnects to 3, and simplified connect/disconnect logic.

***

## 1.0.12  – Feb 10, 2026

🚀 Overview
This release focuses on upgrading Userpilot SDK dependencies and improving overall stability across Android and iOS platforms.

🐛 Bug Fixes

* Android: Fixed WindowLeaked and BadTokenException crashes by ensuring dialogs are only shown when the hosting Activity is in a valid lifecycle state.
* iOS: Fixed a rare crash related to socket connection error handling by adding additional safety checks and improving thread handling during asynchronous network operations.

***

## 1.0.11  – Jan 6, 2026

🚀 Overview
Resolved build failure issues.

🐛 Bug Fixes

* Fixed Android build configuration issues.

***

## 1.0.10  – Dec 15, 2025

🚀 Overview
Improve reporting for surveys.

🛠 Improvements

* Added submissionId parameter to all Survey events.

📦 Dependency Updates

* Upgraded Userpilot native SDK dependencies - iOS 1.0.15, Android 1.0.14.

***

## 1.0.9  – Nov 12, 2025

🚀 Overview
Improve reporting for surveys.

🛠 Improvements

* Added submissionId parameter to Survey List View and Step View to improve exported answers reports.

📦 Dependency Updates

* Upgraded Userpilot native SDK dependencies - iOS 1.0.14, Android 1.0.13.

***

## 1.0.8  – Nov 3, 2025

🚀 Overview
This release introduces support for the latest Android platform requirements, improves media handling, and enhances stability across the SDK.

🐛 Bug Fixes

* Fix Gif image in mobile content.
* Resolved issue where lazy initializer dependencies not intialized.

📦 Dependency Updates

* Upgraded Userpilot Android SDK to v1.0.12.

***

## 1.0.7  – Oct 28, 2025

🚀 Overview
This release includes enhancements, improved user experience.

🛠 Improvements

* Enhanced keyboard visibility detection

***

## 1.0.6  – Oct 23, 2025

🚀 Overview
This release includes minor bug fixes and improvements.

🐛 Bug Fixes

* Fixed an issue where the disableRequestPushNotificationsPermission configuration option was not properly recognized.

***

## 1.0.5  – Sep 29, 2025

**🚀 Description**\
Updated native SDK dependencies, introduced new configuration options, refined core logic, and resolved multiple issues to improve stability, consistency, and scalability of the Userpilot SDK.

📄 Motivation and Context

* Update plugin to support SPM.
* Upgrade native SDK dependencies, iOS 1.0.12, Android 1.0.10
* Added a configuration option to disable automatic push notification permission requests.
* Enhanced user property update handling with smoother fake reload support.
* Fixed processing of pending content to ensure consistent delivery.
* Ensured screen events are requested after returning from background when active content is visible.
* Refined logout flush queue logic for more reliable event cleanup.
* Improved state management during late SDK initialization.
* Enhanced fetching of active experiences and logout handling for pending content.
* Updated handling of application state transitions.
* Minor enhancements on Experiences UI.
* Refactored ExperiencesPublisher and AnalyticsPublisher to improve maintainability and scalability.

***

## 1.0.4  – Aug 14, 2025

**🚀 Description**\
Update native SDK dependencies - version 1.0.7

📄 Motivation and Context

* Refined anonymous user tracking logic to consistently track the same anonymous user per device.
* Updated the README file.

***

## 1.0.3  – Jul 16, 2025

**🚀 Description**\
This update upgrades to the latest native SDK versions and focuses on improving session handling and code quality. It enhances logout behavior, fixes session issues in edge cases, and ensures a more stable and reliable SDK experience overall.

📄 Motivation and Context

* Upgraded to the latest native SDKs for improved stability and compatibility.
* Improved logout flow to ensure proper session cleanup.
* Fixed a bug affecting session start status in specific H-case scenarios.

***

## 1.0.2  – Jul 14, 2025

**🚀 Description**\
This update refines experience tracking and enhances integration with the underlying native SDKs for better debugging and developer insight.

📄 Motivation and Context

* Updated Userpilot iOS and Android SDK dependencies for consistency and stability across platforms.
* Enhanced experience logging to provide clearer visibility into step and state transitions.

***

## 1.0.1  – Jul 2, 2025

**🚀 Description**\
Stable release 1.0.1 of the Userpilot Flutter Plugin.
This update includes essential enhancements, improved native SDK integration, and infrastructure updates to support future development and maintainability.

📄 Motivation and Context

* Updated dependencies to Userpilot iOS and Android SDK v1.0.2 for improved stability and feature support.
* Added a pull request template to streamline future contributions.
* Improved README documentation for easier setup and integration guidance.

***

## 1.0.0  – Jun 17, 2025

**🚀 Description**\
⬆️ Update native SDK dependencies - version 1.0.1
