Skip to content

Lazy list scrolls not captured on Compose foundation 1.10+ #6547

Closed

Description

@sentry-junior

On apps that use Jetpack Compose foundation 1.10.0 or later, sentry-compose records no scroll breadcrumbs for LazyColumn, LazyRow, LazyVerticalGrid, staggered grids, or Pager, even when they are tagged. With debug enabled, the SDK logs Unable to find scroll target. No breadcrumb captured. A customer on foundation 1.12.0 (Compose BOM 2026.08.00) with sentry-android 8.61.0 reported it, and the code is unchanged on main / 8.63.0.

Root cause

ComposeGestureTargetLocator treats a node as scrollable only when it finds one of these:

"androidx.compose.foundation.ScrollingLayoutElement" == type ||
  "androidx.compose.foundation.ScrollingContainerElement" == type

or a ScrollBy key on an old-style SemanticsModifier.

What the foundation-android AARs on Google Maven contain:

  • 1.8.3 – 1.9.5: ScrollingContainerElement is present.
  • 1.10.0, 1.11.x, 1.12.0, 1.12.1: ScrollingContainerElement is gone, replaced by androidx.compose.foundation.ScrollableAreaElement.
  • In 1.12.0, LazyListKt, LazyGridKt, LazyStaggeredGridKt and LazyLayoutPagerKt all apply ScrollableAreaElement. None of them apply ScrollingLayoutElement.
  • Lazy-layout semantics comes from LazyLayoutSemanticsModifier, a ModifierNodeElement, not a SemanticsModifier. So the ScrollBy fallback misses it too.
  • Modifier.verticalScroll / horizontalScroll still apply ScrollingLayoutElement, so non-lazy scrolling containers still work.

sentry-compose/proguard-rules.pro also keeps names only for ScrollingLayoutElement and ScrollingContainerElement. In minified apps R8 can rename any other modifier class, which breaks the class-name check.

The SDK compiles against androidxCompose = "1.9.5". ComposeGestureTargetLocatorTest uses stub classes in place of real Compose classes, so neither the build nor the tests caught the rename.

Scope

  • Affected: scroll breadcrumbs (and the user-interaction transactions that depend on them) for every lazy layout and pager on foundation ≥ 1.10.
  • Not affected: click detection; verticalScroll / horizontalScroll containers.

Reproduction

  1. Build an app with Compose foundation ≥ 1.10.0, sentry-compose, user-interaction breadcrumbs, and debug = true.
  2. Add a LazyColumn with Modifier.sentryTag("list") (or testTag).
  3. Scroll the list.
  4. The logcat shows Unable to find scroll target. No breadcrumb captured., and no ui.scroll breadcrumb is recorded.

via gene.wright.

--

View Session [Sentry]

Activity

  1. linear-code commented on Nov 11, 2026

    @linear-code
  2. github-actions commented on Nov 11, 2026

    @github-actions
    Contributor

    A PR closing this issue has just been released 🚀

    This issue was referenced by PR #6548, which was included in the 8.64.0 release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions