NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev
Appsflyer provider for analytics_hub. Forwards LogEvent events to Appsflyer via the official SDK.
Last release 28 days ago
10 Sep 2026
Ships fairly regularly
a new release about every 3 months
Nearly every release is documented
notes for 3 of 3 stable releases
Nothing withdrawn
no release was ever pulled
7 months old
3 releases · first in 2026
One column per month.
Publishing 0.6.0 failed at flutter pub get , before the publish step ever ran. Same commit, same command, passes in ci.yml.
Publishing 0.6.0 failed at flutter pub get, before the publish step ever
ran. Same commit, same command, passes in ci.yml.
dart-lang/setup-dart runs:
dart pub token add https://pub.dev --env-var PUB_TOKEN
after which pub attaches that OIDC token to every pub.dev request, including
the anonymous package-listing reads a resolve performs. pub.dev rejects the
token on those reads, so pub sees empty version lists and fails with
"Because flutter_tools depends on test 1.31.1 which doesn't match any
versions" — while still bootstrapping its own tool, before reaching our
packages.
Verified on a throwaway branch with a matrix that publishes nothing:
flutter-action only ................................ pass
setup-dart -> flutter-action (today's order) ....... fail
flutter-action -> setup-dart (reordered) ........... fail
setup-dart -> flutter-action, Flutter pinned 3.44.8 fail
setup-dart -> flutter-action, token removed ........ pass
flutter pub get -> setup-dart -> publish --dry-run . pass
So it is neither step order per se nor toolchain drift: it is whether the
credential exists while resolving. The fix is to resolve first and mint the
credential last, so it exists only for the publish call. dart pub publish
still works with the plain Dart SDK because the workspace is already
resolved, which the dry-run variant confirms.
This is why 0.5.0 published fine in August and today's release did not: the
workflow broke on its own and waited for the next tag.
Co-authored-by: Claude Opus 5 noreply@anthropic.com
appsflyer_sdk 7.x: dependency constraint is now
>=7.0.0 <8.0.0.appsflyer_sdk 7.x — 6.x is no longer supported. The two majors
cannot be supported from one version: SDK 7 renamed the plugin type and
changed logEvent from positional to named arguments. Stay on 0.5.x if you
need appsflyer_sdk 6.x.AppsflyerAnalyticsHubProvider's appsFlyerSdk parameter now takes an
AppsFlyerSdk (SDK 7 renamed AppsflyerSdk -> AppsFlyerSdk). Pass the
shared AppsFlyerSdk.instance; AppsflyerSdk(AppsFlyerOptions(...)) is gone.>=3.9.0 (Flutter >=3.35.0), as required by
appsflyer_sdk 7.x.Release 0.5.0: port zeely-mobile fixes, drop session support, add CI
Port behavior fixes made in the zeely-mobile copies of these packages:
Remove session support (breaking): Session, HubSessionDelegate,
AnalyticsHub.sessionDelegate and AnalytycsProvider.setSession are gone;
apps manage user identity directly on the underlying SDKs. The
getAnonymousId parameters of the Mixpanel/Appsflyer providers are
removed with it.
Add GitHub Actions CI modeled on basalt_dart: analyze/format/test plus
publish dry-run on every push/PR, and tag-driven pub.dev publishing via
OIDC (-v tags).
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
dart testtest from the provider packageslints from mixpanel (inherited fromtest from the root package (no tests there).Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Fix the long-standing typo in the provider base class name across all
packages, docs, examples, and tests. No compatibility alias is kept —
the packages have no external consumers yet.
Also move resolution: workspace from pubspec_overrides.yaml into each
package's pubspec.yaml (the layout basalt_dart and zeely-mobile use, and
what dart test's workspace validation expects) and delete the
overrides files.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Ran pana (the tool pub.dev uses to compute package score) against all
four packages. analytics_hub itself scores a clean 160/160.
Found a real bug via the "compatible with dependency constraint lower
bounds" check: mixpanel_flutter's declared minimum (2.0.0) allows
versions up to 2.2.0 where Mixpanel.track() returns void instead of
Future. MixpanelEventResolver.resolve declares a Future
return type and returns the track() call directly, so pinning an old
2.x mixpanel_flutter breaks analysis (and would break at runtime for
anyone actually on that range). Raised the lower bound to >=2.3.0,
where track() became async. Verified dart analyze is clean and tests
pass with dependencies downgraded to their lower bounds.
The three provider packages can't get a full pana score yet since they
depend on analytics_hub, which isn't published to pub.dev — pana (like
pub.dev itself) resolves dependency_overrides are ignored for scoring,
so this is a publish-order concern rather than a code issue: publish
analytics_hub first, then the providers.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Covers badges + workspace banners on all READMEs, a "what's inside"
reference table in the core README, a packages/analytics_hub/doc/
folder with four deep-dive guides, and a root CONTRIBUTING.md —
scoped down from basalt_dart's equivalent docs to this repo's size.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Badges + "part of workspace" banners on every README (EN/UA), a
"what's inside" reference table in the core README, a
packages/analytics_hub/doc/ folder with four deep-dive guides
(getting started, providers, interceptors & context, testing), and a
root CONTRIBUTING.md — implements the design spec, which is removed
now that it's realized in the actual docs.
Skipped the MIT license badge from the original spec: the repo has no
LICENSE file, so that badge would have been false.
Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
SDK lifecycle belongs in the app — keep only flush for buffered backends.
Co-authored-by: Cursor cursoragent@cursor.com
Co-authored-by: Cursor cursoragent@cursor.com
Co-authored-by: Claude Fable 5 noreply@anthropic.com
Co-authored-by: Cursor cursoragent@cursor.com
interceptors constructor parameter for provider-level interceptors.logging dependency; flush() no longer logs a "not supported"
message and simply inherits the base no-op.setSession and the required getAnonymousId parameter along with core
session support. Manage the customer user ID directly via
AppsflyerSdk.setCustomerUserId.analytics_hub: ">=0.5.0 <0.6.0".Initial Appsflyer provider integration for analytics_hub:
analytics_hub:
AppsflyerAnalyticsHubProvider forwards LogEvent to AppsflyerSdk.logEvent.AppsflyerAnalyticsHubIdentifier for routing events to Appsflyer.getAnonymousId callback used when the hub session becomes null
to set an anonymous customer user ID via AppsflyerSdk.setCustomerUserId.Your coding agent can read these notes before it upgrades. Set up the MCP server →