NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev
Attriax SDK for Flutter - A powerful and easy-to-use solution for mobile attribution, deep-linking, and analytics.
Last release 2 months ago
15 Jul 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 9 of 9 stable releases
Nothing withdrawn
no release was ever pulled
5 months old
9 releases · first in 2026
One column per month.
attriax_api_client is no longer a dependency of this package and is now deprecated; the native engine performs its own transport.
attriax.consent.ccpa (AttriaxCcpaConsent): doNotSell / usPrivacy getters plus setDoNotSell, setUsPrivacy, and set, seeded from AttriaxConfig.doNotSell / usPrivacy and overridable at runtime — mirroring the existing GDPR consent facade.Attriax.flush() to force delivery of everything currently queued.attriax_flutter_linux implementation.@attriax/js engine. The public Dart API is unchanged — no migration is required.attriax_api_client is no longer a dependency of this package and is now deprecated; the native engine performs its own transport.deepLinks.rawInitialDeepLink always returned null; it now caches the first raw deep-link event and seeds from the initial raw deep link.validateReceipt(...) and createDynamicLink(...) threw on Android; both are now handled by the Android implementation.Breaking: AttriaxConfig now requires projectToken; the deprecated appToken constructor alias and getter were removed.
package:attriax_flutter/attriax.dart that re-exports everything from attriax_flutter.dart (the old import remains a supported alias).isBot and botDetectedVia in the device context (WebDriver, headless/zero-size screen, and known bot user agents).Europe/ (French Guiana, Guadeloupe, Saint-Martin, Martinique, Saint-Barthélemy, Mayotte, Réunion).init() now rejects an empty projectToken, a non-positive maxQueueSize, and negative flush/ATT-timeout durations with an ArgumentError.validateReceipt(...) now takes a single required String receipt plus test, provider, environment, productId, and transactionId; the previous per-store fields (originalTransactionId, store, packageName, purchaseToken, receiptData, signedPayload, receiptSignature) were removed, and receipt must be non-empty.deepLinks.recordDeepLink(...) now requires uri; the optional linkPath parameter was removed.AttriaxConfig now requires projectToken; the deprecated appToken constructor alias and getter were removed.Attriax.init({bool? enabled}) no longer accepts an enabled argument; use tracking.enabled before or after init() to control event delivery.recordEvent, recordPurchase, recordRefund, recordAdRevenue, recordAdEvent, recordPageView, recordError, setUser, setUserProperty, setUserProperties, clearUserProperties) now return void (fire-and-forget) instead of Future<void>.Retry-After, instead of being re-flushed with no spacing; a Retry-After of 0 or negative also falls back to backoff rather than an immediate retry.408 (Request Timeout) and 425 (Too Early) in addition to 429 and all 5xx.recordDeepLink) is now time-bounded (30s) and throws TimeoutException if it does not complete, instead of hanging indefinitely while offline; the underlying request still follows the normal queue/retry policy.referrer.getLatestDeepLinkReferrer() now returns null immediately when no deep link has been handled yet, instead of waiting for the next deep-link event.null) instead of surfacing a delivery error from the referrer getters.Breaking: removed the deprecated GDPR auto-detection toggle from the shared Flutter AttriaxConfig.
AttriaxConfig.AttriaxConfigattriax.tracking as the focused Flutter facade for custom events, page views, revenue, ads, uninstall-token registration, user identity, and manual er
attriax.tracking as the focused Flutter facade for custom events, page views, revenue, ads, uninstall-token registration, user identity, and manual error reporting.anonymousTracking on AttriaxConfig, runtime attriax.tracking.anonymousTrackingEnabled, and attriax.consent.gdpr.requestDataErasure() for GDPR-erasure flows.example-rich/ so the publishable package example can stay integration-focused.example-gdpr/ app for manual GDPR consent, anonymous-tracking, and data-erasure QA.Attriax; use attriax.tracking.* instead.attriax.eventsEnabled to attriax.tracking.enabled.attriax.deepLinks.createDynamicLink(...) and attriax.deepLinks.recordDeepLink(...).attriax.consent.att.getTrackingAuthorizationStatus() and attriax.consent.att.requestTrackingAuthorization().anonymousTracking: false to keep that work in memory until consent allows identified delivery.validateReceipt(...) stays on the root Attriax entrypoint and remains available even when tracking is disabled or GDPR consent is still pending.example-rich/.Attriax.tracking as the focused facade for custom events, page views, revenue, ads, uninstall-token registration, user identity, and manual error reporting.anonymousTracking on AttriaxConfig, AttriaxTracking.anonymousTrackingEnabled for runtime control, and AttriaxConsentGdpr.requestDataErasure() for GDPR-erasure flows.Attriax; use tracking.* instead.eventsEnabled to tracking.enabled.deepLinks.createDynamicLink(...) and deepLinks.recordDeepLink(...).consent.att.*.anonymousTracking to false to keep that work in memory until consent allows identified delivery.Regulation-scoped GDPR consent APIs under attriax.consent.gdpr, including local and remote needsConsent() checks, explicit category decisions, setNotR
attriax.consent.gdpr, including local and remote needsConsent() checks, explicit category decisions, setNotRequired(), and reset().attriax_api_client package.Attriax.consent.gdpr for regulation-scoped GDPR consent state, needsConsent() checks, setConsent(), setNotRequired(), and reset().gdprEnabled: true so clients can see the recommended consent flow in a real Flutter app.attriax.skan runtime support for Apple platforms, including conversion-value updates, server-driven SKAdNetwork schema/state handling, and shared anal
attriax.skan runtime 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.AttriaxDeepLinks.recordDeepLink() now resolves to AttriaxDeepLinkEvent? after browser and deferred handling instead of the lower-level AttriaxDeepLinkResolution? wrapper.AttriaxAnalyticsEventKeys and AttriaxAnalyticsParamKeys exports for the shared event vocabulary. Useful for SKAN conversion-value rules and consistent event naming across your app and the dashboard.attriax_api_client package now uses cleaner json_serializable transport models instead of the older built_value-based output.Attriax.skan state and conversion-value update helpers, plus persisted server-driven SKAdNetwork schema/state handling for Apple-platform attribution flows.AttriaxAnalyticsEventKeys and AttriaxAnalyticsParamKeys exports so apps, dashboard funnels, and SKAN rules can share the same event vocabulary.recordDeepLink() now returns the completed AttriaxDeepLinkEvent? instead of the lower-level AttriaxDeepLinkResolution? wrapper.AttriaxAnalyticsEventKeys and AttriaxAnalyticsParamKeys exports for the shared event vocabulary. Useful for SKAN conversion-value rules and consistent event naming across your app and the dashboard.Reinstall attribution and app-data-clear classification in the Flutter SDK app-open flow.
referrer facade with original-install, reinstall, session, and latest deep-link lookups.Attriax.installReferrer getter in favor of Attriax.referrer.* async methods.0.1.0 together.Attriax.referrer with original-install, reinstall, session, and latest deep-link lookup methods.Attriax.installReferrer getter in favor of Attriax.referrer.* async methods.AttriaxDeepLinkEvent.resolve().Windows support through the new federated attriax_flutter_windows package.
attriax_flutter_windows package.attriax_flutter_windows package.First public-ready Attriax Flutter SDK release
Your coding agent can read these notes before it upgrades. Set up the MCP server →