The week in one paragraph

The week itself was quiet. The loudest thing on the calendar — Google Play's API 36 deadline on 31 August — turns out not to touch us: the Android SDK already compiles and targets API 37 and deliberately declares aarMetadata { minCompileSdk 34 }, so no integrator is forced onto a toolchain bump and no bridge can hold a customer below 36.

The genuinely useful findings came from re-verifying two carried watchlist items and finding both were false alarms. What is new and worth attention: OpenTelemetry semconv v1.44.0 shipped a breaking rework of browser.web_vital, landing squarely on our OTel initiative's floating ^1.43.0 range — and Mixpanel open-sourced its iOS/Android session-replay SDKs and reached React Native parity. Session replay is now present in every primary competitor and absent from all thirteen of ours.

Action needed 2 findings · 0 PRs opened

P1

Both bridges still declare Android's legacy Gradle DSL

lintOptions, compileSdkVersion and minSdkVersion, plus pinned AGP classpaths — 3.2.1 in the Flutter bridge and 7.0.1 in React Native. AGP 9 keeps these working but warns; AGP 10.0 removes the android.newDsl=false escape hatch. Latest AGP is 9.3.0 (July 2026), so the clock is real but has not expired.

countly-sdk-flutter-bridge · countly-sdk-react-native-bridge

Smallest fix Rename to lint / compileSdk / minSdk; drop the pinned buildscript classpath and inherit the host's AGP, per current Flutter and RN plugin convention. Not PR'd — needs a real host-app build to verify, and the Flutter bridge's build file currently carries in-flight OTel work.
P1

OTel semconv v1.44.0 breaks browser.web_vital

v1.44.0 (4 August) moved name / value / delta / id out of the event body into browser.web_vital.* attributes. countly-sdk-js pins @opentelemetry/semantic-conventions as ^1.43.0, so the caret range auto-resolves straight into it.

countly-sdk-js (otel-telemetry-phase1)

Smallest fix Nothing breaks today — we emit no web-vitals. Pin the range to an exact version and design Phase 1 against the v1.44 attribute shape rather than the pre-1.44 event-body layout. Not PR'd: it is a design decision, not a mechanical bump.

Cleared 3 carried alarms closed

The most valuable output of the run. Each of these was on the watchlist as a live threat and is now verified as not one.

Cleared

Play API 36 deadline, 31 August

countly-sdk-android/sdk/build.gradle is compileSdk 37 / targetSdk 37 with an explicit aarMetadata { minCompileSdk 34 }. A library's own targetSdk does not participate in the app-module manifest merge, so the bridges' targetSdkVersion 35 fallbacks cannot hold a customer below 36. Nothing to do — though it is worth a support-side reminder to customers.

Cleared

Flutter built-in-Kotlin migration breaking host builds

Neither bridge applies org.jetbrains.kotlin.android — both are plain Java. AGP 9's built-in Kotlin conflict cannot reach a host app through us.

Cleared

Android 17 lock-free MessageQueue

Android 17 gives apps targeting SDK 37+ a lock-free MessageQueue that breaks clients reflecting on its private members. A grep across the Android SDK finds reflection only in messaging/UtilsMessaging.java, probing Firebase classes. No MessageQueue reflection anywhere.

Platform

Android P1 bridges P3 core

  • Play target-API deadline is 31 August, five days out: new apps and updates must target API 36+, existing apps need API 35+ to stay visible to new users on newer devices. Extension available to 1 November. Our exposure: none. P0 for customers, though.
  • Android 17 (API 37) has been stable since 16 June. Behaviour changes worth knowing even though none bite us: mandatory ACCESS_LOCAL_NETWORK runtime permission, large-screen orientation opt-out removed, generational GC in ART, 3-hour OTP SMS delay. Our manifest requests no permissions of its own.
  • AGP 9.3.0 (July) is current — minimum Gradle 9.5.0, JDK 17, build-tools 36.0.0, max supported API 37. The Android SDK is on Gradle 9.7.1 / AGP 9, comfortably ahead. The bridges are the laggards.

Apple P2

  • Submission floor is unchanged: Xcode 26 / iOS 26 SDK since 28 April. No iOS 27 SDK requirement has been announced. The first concrete signal that the next floor is coming is Flutter 3.47's release notes saying its pipelines are being prepped for Xcode 27. The UIScene item stays on the watchlist, undated.
  • 24 August — Sign in with Apple moves to private.icloud.com for newly issued relay addresses. Existing addresses keep forwarding. No SDK surface for us.
  • Not this week but still unactioned: Safari 26's Advanced Fingerprinting Protection is on by default, as is storage partitioning. Relevant to how the web SDK derives and persists device IDs.

Flutter & Dart P1 owned

  • Swift Package Manager became the default for iOS in Flutter 3.44, phasing out CocoaPods. The bridge ships only ios/countly_flutter.podspec — no plugin Package.swift. Already in flight: the repo has a swiftpm-support-ios branch, so this is owned, not a gap.
  • Flutter 3.47 shipped 12 August — Impeller default on desktop, Widget Previews stable, material_ui / cupertino_ui 1.0 as standalone packages. The in-SDK Material and Cupertino libraries are formally deprecated in November 2026. Our bridge ships no widgets, so exposure is limited to the example/ app.
  • The podspec still declares s.ios.deployment_target = '10.0'. Stale by any measure — but raising a minimum platform version is a breaking change and a human call. Flagged, not PR'd.

React Native P2

  • 0.86.3 on 24 August, in window: fixes a use-after-free data race in EventEmitter.cpp, a Modal parentNode bug that severed capture/bubble propagation to ancestors, a getInitialURL re-entrancy crash during onHostResume, and deterministic CocoaPods SPEC CHECKSUMS.
  • 0.87.0 is current stable (11 August). Bridgeless has been default since 0.86 and the Bridge was deleted in 0.85 (20 April). Our bridge already has codegenConfig and android/src/newarch, so the New Architecture path exists.
  • Version drift worth noting: staging is at 26.1.0 while npm latest is 25.4.1, and the bridge wraps ly.count.android:sdk:25.4.4 against an Android SDK now at 26.1.5. Release hygiene, not a platform finding.

Web & browsers P3

  • Chrome 143 is stable — ICU 77, XSLT removals, Intl.Locale info API changes. Chrome does not block third-party cookies by default in 2026; it shows a user "Privacy Choice" prompt instead. Nothing in the window changes sendBeacon, storage partitioning or the Storage Access API for us.

Node.js P2

  • Schedule confirmed: v24 Active LTS (EOL April 2028), v22 Maintenance (EOL April 2027), v26 Current, going LTS in October 2026. v20 EOL'd 30 April, v25 on 1 June.
  • countly-sdk-nodejs still declares no engines field and sits at 24.10.3 while every other SDK is on a 25.x or 26.x line. Unchanged from last week.

.NET & Windows P2

  • .NET 8 and .NET 9 both reach end of support on 10 November. .NET 10 is the LTS through November 2028. countly-sdk-windows targets net35-full / net45 / netstandard2.0 — none affected, and netstandard2.0 remains consumable from .NET 10. The slow risk is ecosystem drift off netstandard2.0.

Unity P2

  • Unity 6.3 LTS moves Android build tooling to Gradle 9.1.0 (from 8.13) and AGP 9.0.0 (from 8.10.0). CoreCLR is not default in 6.3 — the scripting-runtime replacement is planned for Unity 6.8.
  • countly-sdk-unity is still pinned to editor 2020.3.20f1 at version 24.8.2. Unity's AGP bump lands on Unity's own template rather than our files, but the editor pin means we cannot verify against 6.3 at all.

Java, C++, HarmonyOS P3

  • Nothing this week. countly-sdk-java remains the oldest version in the fleet (24.1.6, Java 8 source/target) and countly-sdk-cpp still declares cmake_minimum_required(VERSION 3.0), which modern CMake refuses outright. Standing debt, not new findings.

Competitors do we have it? · is it worth it?

Mixpanel — session replay open-sourced, RN parity Table stakes

  • The iOS and Android session-replay SDKs are now fully public on GitHub, replay reached React Native, replays can start on a trigger without disturbing an active recording, and a new network plugin captures network telemetry during a recording.
  • Do we have it? No — a grep for session.?replay across all thirteen repos returns zero hits. It is present in PostHog, Amplitude, Mixpanel, Sentry and Datadog RUM. It has crossed from differentiator to table stakes.
  • Worth it: yes, but scope it. Effort is large — a cross-SDK contract covering capture, redaction, upload, storage and consent. The cheap first move is not the recorder: it is the trigger-based start and network-telemetry-during-recording semantics, which are the parts that make replay usable rather than merely present.

PostHog — MCP tool surface expanded hard Cheap

  • 19 new MCP tools on 20 August and 9 on 13 August. Server-side agent APIs rather than SDK instrumentation, so no direct SDK work — but it is the second data point this month that agent-readable analytics is where vendors are spending.
  • Do we have it? No. Worth it: yes, and it is cheap relative to replay — server-side, no thirteen-SDK fan-out.
  • Also shipped: feature-flag property prefix/suffix matching (24 August) with local evaluation across seven server SDKs. Our remote config has no prefix/suffix operators. Small, server-side-led; the SDK only matters where local evaluation exists.
  • Vercel AI SDK v7 support via OTel (13 August), with request-scoped flushing for serverless. Notable as evidence that competitors consume OTel as an ingestion path — the same bet as our OTel initiative.

Datadog RUM — steal the idea, not the feature Free

  • Deterministic (Knuth) sampling seeded from the session UUID, so a sampled session keeps its traces and its replay together. Plus continuous profiling correlated with app hangs, long tasks and app-start vitals.
  • Worth it: seeded-from-session-ID sampling is a free design change that makes correlated data actually correlate. Cheap, high leverage, no new feature surface.

Quiet this week P3

  • Amplitude — changelog runs through July (attribution parameters as event properties, Web Experiment work). Nothing in the window.
  • Sentry, Firebase/GA4, Segment, Heap, Pendo, Statsig — nothing verifiable in the window. Sentry Android/Java v7.0.0 surfaced in secondary coverage only; not asserting it.

Sector

OpenTelemetry client-side conventions are churning, and it is breaking

  • semconv v1.44.0 (4 August) reworked browser.web_vital. Spec v1.60.0 landed 7 August. opentelemetry-swift 2.5.2 shipped 21 August, in window; opentelemetry-android is at 1.6.0 (28 July).
  • Concrete read for us: browser and mobile conventions are still moving underneath, so otel-telemetry-phase1 should pin semconv rather than float, and Phase 1's public shape should not bake in pre-1.44 event-body layouts.

Agent-readable analytics is a shipping product line, not a demo

  • Twenty-eight new PostHog MCP tools in two weeks is the strongest evidence yet. This is the trend with the best effort-to-impact ratio for us, because it lives server-side and does not multiply by thirteen.

Third-party-cookie deprecation is definitively not happening in Chrome

  • Chrome presents a user privacy choice instead. Browser-side measurement pressure now comes from Safari's default-on fingerprinting protection and storage partitioning, not from a Chrome cookie cliff. Worth correcting any internal roadmap that still assumes it.

Watchlist carried into next week

WhenWhat happensAffected
2026-08-31Play API 36 deadline. We are clear; customers are not — support-side reminder.none
2026-11-01Play extension deadline, if any customer requested one.none
2026-11-10.NET 8 and .NET 9 end of support. Our TFMs unaffected; watch ecosystem drift off netstandard2.0.windows
2026-11Flutter's in-SDK Material/Cupertino libraries formally deprecated.flutter-bridge
2026-10Node 26 becomes Active LTS. Good moment to finally declare engines.nodejs
undatedAGP 10.0 removes the legacy Gradle DSL and the newDsl opt-out. Both bridges must be modernised first.flutter-bridge, react-native-bridge
undatediOS 27 SDK submission floor and UIScene enforcement. Flutter prepping for Xcode 27 is the leading indicator; no Apple announcement yet.ios
undatedUnity 6.8 replaces the scripting runtime with CoreCLR.unity
undatedSession replay is table stakes across every primary competitor and absent from all thirteen of ours.all

Proposals ordered by leverage, not urgency

  1. Adopt session-UUID-seeded deterministic sampling wherever we sample. A design change with near-zero cost that makes correlated signals actually correlate. Highest leverage per unit of work on this list.
  2. Pin @opentelemetry/semantic-conventions in countly-sdk-js to an exact version, and review Phase 1's attribute shapes against semconv v1.44.
  3. Declare engines in countly-sdk-nodejs — >=22 is the defensible floor given v20 EOL'd in April. Trivial to write, but it is a supported-range statement, so a human picks the number.
  4. Modernise both bridges' Gradle DSL and drop the pinned AGP classpaths. One PR per bridge, once the in-flight OTel work in those files settles. Needs a real host-app build to verify, which the radar cannot do.

What could not be verified

  • None of these repos can be built here, so every Gradle, AGP and podspec claim is a read of the declared configuration, not an observed build result.
  • developer.chrome.com/release-notes and developer.android.com/about/versions/latest/behavior-changes-all would not render for automated fetch — an empty shell and an HTTP 404 respectively. Chrome 143 and Android 17 details rest on secondary coverage plus the Chrome 143 beta post. Treat as indicative, not primary.
  • Automated fetches of the Flutter breaking-changes page and the React Native releases page both returned 2024 dates. RN dates were re-derived from gh api and the npm registry; Flutter 3.44/3.47 breaking-change contents still rest on the unreliable fetch plus secondary coverage.
  • Sentry Android/Java v7.0.0 and the Mixpanel replay items come from secondary coverage, not the vendors' own changelogs.
  • No PR was opened, so nothing was pushed, branched or built anywhere.

Sources