What this package is like to depend on
Last release 1 months ago
15 Jul 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 8 of 8 stable releases
Nothing withdrawn
no release was ever pulled
3 months old
8 releases · first in 2026
8 releases in the last 12 months
see the full history below
Release timeline
8 releases · May 2026 to Jul 2026Releases
latest 8-
0.6.015 Jul 2026Release notes
Open source →Added
- Swift Package Manager support:
Package.swiftmanifests for the iOS and macOS plugins. Flutter 3.44 makes SwiftPM the default; the podspecs are kept as the CocoaPods fallback for older Flutter versions.
Changed
- Re-wrapped as a thin binding over the shared Attriax Kotlin Multiplatform core; the Apple-specific engine implementation was retired. No Apple-only public API changes are required.
Fixed
recordAdEventwas not resolved from theeventNamewire key and did not reach the engine.
- Swift Package Manager support:
-
0.5.021 Jun 2026Release notes
Open source →Added
- New canonical entrypoint
package:attriax_flutter/attriax.dartthat re-exports everything fromattriax_flutter.dart(the old import remains a supported alias). - Bot / automated-traffic detection on web: the SDK flags
isBotandbotDetectedViain the device context (WebDriver, headless/zero-size screen, and known bot user agents). - GDPR region detection now covers EU outermost territories whose timezones are outside
Europe/(French Guiana, Guadeloupe, Saint-Martin, Martinique, Saint-Barthélemy, Mayotte, Réunion). - Startup config validation:
init()now rejects an emptyprojectToken, a non-positivemaxQueueSize, and negative flush/ATT-timeout durations with anArgumentError.
Changed
- Breaking:
validateReceipt(...)now takes a singlerequired String receiptplustest,provider,environment,productId, andtransactionId; the previous per-store fields (originalTransactionId,store,packageName,purchaseToken,receiptData,signedPayload,receiptSignature) were removed, andreceiptmust be non-empty. - Breaking:
deepLinks.recordDeepLink(...)now requiresuri; the optionallinkPathparameter was removed. - Breaking:
AttriaxConfignow requiresprojectToken; the deprecatedappTokenconstructor alias and getter were removed. - Breaking:
Attriax.init({bool? enabled})no longer accepts anenabledargument; usetracking.enabledbefore or afterinit()to control event delivery. - Breaking: tracking helpers (
recordEvent,recordPurchase,recordRefund,recordAdRevenue,recordAdEvent,recordPageView,recordError,setUser,setUserProperty,setUserProperties,clearUserProperties) now returnvoid(fire-and-forget) instead ofFuture<void>. - Failed network requests now retry with a capped, jittered exponential backoff (2s base, 5min cap) when the server sends no usable
Retry-After, instead of being re-flushed with no spacing; aRetry-Afterof0or negative also falls back to backoff rather than an immediate retry. - Retryable HTTP statuses now include
408(Request Timeout) and425(Too Early) in addition to429and all5xx. - App-open (attribution) delivery is now best-effort and no longer gates other queued requests; events, sessions, and deep-link resolutions are dispatched without waiting for a successful app-open.
- Awaited manual deep-link resolution (
recordDeepLink) is now time-bounded (30s) and throwsTimeoutExceptionif it does not complete, instead of hanging indefinitely while offline; the underlying request still follows the normal queue/retry policy. referrer.getLatestDeepLinkReferrer()now returnsnullimmediately when no deep link has been handled yet, instead of waiting for the next deep-link event.- Session continuation window is now clamped to a minimum of 60s and a maximum of 30min (previously twice the heartbeat interval, unbounded), so tiny first-launch heartbeats and oversized intervals no longer over- or under-continue sessions.
- Uninstall (push) token registration is now withheld while GDPR consent is still pending/unknown instead of being captured eagerly.
- In release builds the logger now emits only the level/message line and suppresses error objects, HTTP response bodies, and stack traces to avoid leaking sensitive payloads.
Fixed
- A recovered session's inferred end time is now clamped to "now" so a continued session's end event can no longer postdate the replacing session's start, eliminating out-of-order session lifecycle events.
- A deep link tied to a known origin session no longer leaks into a different (or already-ended) current session; cold-start links with no origin session still attach to the current session.
- A no-op consent server sync that only refreshes region metadata or the checked-at timestamp no longer triggers a full queue rewrite and runtime reconfiguration; only an actual consent decision change does.
- Failures while observing startup referrers now resolve to "no referrer" (returning
null) instead of surfacing a delivery error from the referrer getters. - A failed app-open observation is now reported to observers as "no result" rather than escaping as an unhandled async exception.
Release notes
Open source →Changed
- Package version alignment for the federated 0.5.0 release (best-effort app-open, retry backoff, session/consent refinements, and the slimmed receipt-validation and required-
projectToken/uriAPI changes). No Apple-only public API changes are required.
- New canonical entrypoint
-
0.4.131 May 2026Release notes
Open source →Changed
- Breaking: removed the deprecated GDPR auto-detection toggle from the shared Flutter
AttriaxConfig. - Breaking: SDK runtimes no longer run timezone auto-detection automatically during init.
- Updated package docs/examples and federated package alignment notes for the 0.4.1 removal.
Release notes
Open source →Changed
- Package version alignment for the federated 0.4.1 GDPR config simplification release (the deprecated GDPR auto-detection toggle removed from shared config).
- Breaking: removed the deprecated GDPR auto-detection toggle from the shared Flutter
-
0.4.028 May 2026Release notes
Open source →Added
attriax.trackingas the focused Flutter facade for custom events, page views, revenue, ads, uninstall-token registration, user identity, and manual error reporting.anonymousTrackingonAttriaxConfig, runtimeattriax.tracking.anonymousTrackingEnabled, andattriax.consent.gdpr.requestDataErasure()for GDPR-erasure flows.- A richer public demo app under
example-rich/so the publishable package example can stay integration-focused. - A dedicated
example-gdpr/app for manual GDPR consent, anonymous-tracking, and data-erasure QA.
Changed
- Breaking: removed the legacy top-level tracking, ad, revenue, uninstall-token, and identity methods from
Attriax; useattriax.tracking.*instead. - Breaking: moved the event-delivery toggle from
attriax.eventsEnabledtoattriax.tracking.enabled. - Breaking: moved dynamic-link creation and manual deep-link forwarding from the root API to
attriax.deepLinks.createDynamicLink(...)andattriax.deepLinks.recordDeepLink(...). - Breaking: removed the remaining root ATT aliases in favor of
attriax.consent.att.getTrackingAuthorizationStatus()andattriax.consent.att.requestTrackingAuthorization(). - GDPR-enabled runtimes now send anonymous-capable analytics, crash, session, and deep-link activity immediately by default while consent is unresolved, without materializing device identity. Set
anonymousTracking: falseto keep that work in memory until consent allows identified delivery. validateReceipt(...)stays on the rootAttriaxentrypoint and remains available even when tracking is disabled or GDPR consent is still pending.- The package example now stays minimal and package-focused, while the broader demo surface lives in
example-rich/.
Fixed
- First-launch state now persists independently of device identity, so repeated unresolved-consent launches are no longer misclassified as a fresh install when consent-only persistence is active.
- Frontend setup snippets and Flutter-facing docs now reference the new facade-based API surface instead of the removed top-level methods.
Release notes
Open source →Changed
- Package version alignment for the federated 0.4.0 grouped-tracking, anonymous-GDPR, and data-erasure release. No Apple-only public API changes are required.
-
0.3.021 May 2026Release notes
Open source →Added
- Regulation-scoped GDPR consent APIs under
attriax.consent.gdpr, including local and remoteneedsConsent()checks, explicit category decisions,setNotRequired(), andreset(). - Consent-id-only GDPR check/write transport models in the generated
attriax_api_clientpackage. - Anonymous analytics-capable dispatch for denied analytics paths without attaching Attriax device identity or app-user identity.
- Package-local GDPR and anonymous analytics documentation plus a simple custom consent prompt in the public Flutter example app.
Changed
- GDPR-enabled runtimes now defer network dispatch while consent is pending and resume only after consent resolves to granted or not required.
- Requests buffered while GDPR is pending now regain device identity before dispatch when the final GDPR state is not required.
- Attribution, user identity, uninstall-token, and app-open attribution paths are withheld until attribution consent is granted or GDPR is not required.
- Analytics, crash, session, and deep-link diagnostics can use the anonymous/no-device path when the corresponding identified category is denied.
Release notes
Open source →Added
- Native context collection now includes the precise Apple hardware model identifier where available for richer device diagnostics.
Changed
- Package version alignment for the federated 0.3.0 GDPR consent release.
- Regulation-scoped GDPR consent APIs under
-
0.2.018 May 2026Release notes
Open source →Added
attriax.skanruntime support for Apple platforms, including conversion-value updates, server-driven SKAdNetwork schema/state handling, and shared analytics key exports for aligning app events with dashboard and SKAN rules.- Browser-action aware deep-link resolution with automatic in-app or external URL opening on Android and iOS when Attriax resolves a browser destination.
- A rebuilt public example app with Firebase/share integration, push-token flows, deep-link inspection, and broader startup/runtime integration coverage.
Changed
- Breaking:
AttriaxDeepLinks.recordDeepLink()now resolves toAttriaxDeepLinkEvent?after browser and deferred handling instead of the lower-levelAttriaxDeepLinkResolution?wrapper. - Breaking: deeplinks are now reworked, the stream returns already resolved events, while you can use rawStream for the install raw AppLink events.
- Events are now enhanced, look for the new
AttriaxAnalyticsEventKeysandAttriaxAnalyticsParamKeysexports for the shared event vocabulary. Useful for SKAN conversion-value rules and consistent event naming across your app and the dashboard. - Startup app-open monitoring now waits for the app-open lifecycle before resolving deferred deep links and session referrers.
- Apple ATT handling now waits for the platform authorization result before continuing advertising-ID dependent startup work.
- The generated
attriax_api_clientpackage now uses cleanerjson_serializabletransport models instead of the olderbuilt_value-based output.
Fixed
- macOS SDK startup now uses the data-protection keychain path to avoid login-keychain permission popups while restoring the SDK device identity.
Release notes
Open source →Added
- Native browser-action handling via
SFSafariViewControlleror the system browser when Attriax resolves a deep link to a browser destination. - SKAdNetwork conversion-value updates, coarse values, and lock-window support through the federated iOS/macOS implementation.
Changed
requestTrackingAuthorization()now waits for the real ATT callback before returning to Dart, keeping startup advertising-ID collection aligned with the user's choice.- Updated iOS and macOS privacy manifests for the new SKAdNetwork and SDK-owned device-id collection behavior.
Fixed
- macOS keychain reads now use the data-protection keychain path to avoid login-keychain permission prompts during SDK startup.
-
0.1.013 May 2026Release notes
Open source →Added
- Reinstall attribution and app-data-clear classification in the Flutter SDK app-open flow.
- A dedicated
referrerfacade with original-install, reinstall, session, and latest deep-link lookups. - Richer deep-link and startup-referrer payloads with canonical URIs, UTM data, and Android install-referrer timestamps.
Changed
- Breaking: removed the public
Attriax.installReferrergetter in favor ofAttriax.referrer.*async methods. - Startup deep-link handling now exposes the initial event first and lets callers resolve it explicitly, matching the foreground stream flow.
- Deferred deep-link startup handling now suppresses app-data-clear launches while still surfacing reinstall attribution.
- Federated Flutter packages and the generated Dart API client now release as
0.1.0together.
Release notes
Open source →Changed
- Package version alignment for the reinstall-attribution Flutter SDK release.
- iOS and macOS builds now ship with the updated platform-interface contract used by
attriax_flutter0.1.0. - README now documents the wrapper/native handler split and the iOS-specific release validation focus.
Added
- Method-channel regression coverage for iOS native context and install-referrer fallbacks.
Fixed
- Package-level lint configuration now ships with the publishable package.
-
0.0.108 May 2026Release notes
Open source →Added
- First public-ready Attriax Flutter SDK release
- Federated plugin architecture with Android and iOS platform packages
- Dart-side support for web and desktop collection paths
- Versioned SDK request payloads with app and package version reporting
- Public example app and internal tester app
Release notes
Open source →- First public iOS implementation release for the Attriax Flutter SDK.
- Added native iOS device, locale, screen, and power-state context collection.