Jetpack Compose — April 2026 Updates
composeandroidrelease

Jetpack Compose — April 2026 Updates

skydovesJaewoong Eum (skydoves)|
Prefer the visual summary? A one page poster of this release is included below.

Jetpack Compose shipped its April '26 release on April 22, 2026, anchored by the core libraries at version 1.11.0 and BOM 2026.04.01. While most Android developers will see this as another Compose update, the release closes several long standing rough edges. The v2 testing framework is now the default, trackpad input finally registers as mouse, and a set of new layout primitives move Compose closer to declarative environment adaptation. Several other AndroidX libraries also rode the same release train, with notable status promotions across Hilt, Lifecycle, Paging, and Webkit.

In this article, you'll explore what ships in Compose 1.11.0, the v2 testing framework that becomes the default, the new experimental layout APIs (Styles, MediaQuery, Grid, FlexBox), the deprecations to watch, and the broader AndroidX libraries that advanced toward stable on the same release date.

Compose 1.11.0: What ships in the core libraries

The April '26 BOM (2026.04.01) maps every Compose UI, Foundation, Material, Animation, and Runtime module to 1.11.0 stable. Most of the surface area changes are quality of life improvements rather than new components, but a few shifts are worth attention before you upgrade.

Testing v2: From immediate to queued execution

The biggest behavior change is in the testing framework. The v2 testing APIs are now the default, and the v1 APIs are deprecated. Inside runComposeUiTest, the dispatcher moved from UnconfinedTestDispatcher (immediate execution) to StandardTestDispatcher (queued execution).

The practical effect is that test threads now mirror production behavior. Recompositions queue rather than running immediately, and your test code has to advance them explicitly with advanceUntilIdle() or runOnIdle. This removes a class of flakiness where tests would "read ahead" of recompositions, but it also breaks any test that implicitly relied on the old immediate flush. If you maintain a large UI test suite, the upstream testing migration guide walks through the migration path.

Shared element debugging: LookaheadAnimationVisualDebugging

Shared element transitions and Modifier.animatedBounds get a new visual debugging composable, LookaheadAnimationVisualDebugging. Wrap a screen in it during development, and you see the target bounds, animation trajectories, and match counts overlaid on the UI. If you have ever burned an afternoon trying to figure out why a shared element pops or skips, this collapses the debug loop.

Trackpad input: PointerType.Mouse instead of touch

Trackpad interactions now report as PointerType.Mouse rather than touch events. This aligns with what users actually expect on Chromebook and tablet form factors: hover, scroll, and gesture all behave like a mouse rather than synthetic touch. On API 34 and above, Compose recognizes platform gestures such as two finger swipes and pinches. For tests, there is a new performTrackpadInput helper.

Composition host defaults: Cross platform service plumbing

The release introduces HostDefaultProvider, LocalHostDefaultProvider, HostDefaultKey, and ViewTreeHostDefaultKey. These let host services (clipboard, focus manager, soft input, and similar) flow through compose runtime instead of through Android specific composition locals. The headline benefit is for Kotlin Multiplatform: KMP targets can now plug platform services through the same API surface as Android, reducing the conditional code in shared modules.

Preview wrappers: Theme injection without boilerplate

The new @PreviewWrapper annotation, paired with the PreviewWrapperProvider interface, lets you wrap previews with custom logic such as theme injection, fake CompositionLocals, or scaffold backgrounds. You define the wrapper once and apply it across previews instead of copy pasting the same setup into every @Preview function.

Experimental APIs: New layout primitives

Four experimental APIs landed in this release. They are not yet stable, but they hint at where Compose layout is heading.

Styles: State based component styling

Styles is a new foundation API for component styling. Instead of stacking modifier chains and remembered interaction sources, you declare style variations against state in a single block. A pressed state gradient, for example, becomes a property of the style rather than a conditional modifier. The API also simplifies common configuration like padding and sizing.

MediaQuery: Declarative environment queries

MediaQuery replaces boilerplate window layout tracking with conditional UI against descriptive queries. Instead of subscribing to window layout info and tracking posture state by hand, you write something like "if the device is in tabletop posture, show this layout". Less ceremony, fewer bugs around state staleness. See the MediaQuery documentation for the full API surface.

Grid: A two dimensional layout system

Grid is a new two dimensional layout built on tracks, gaps, and cells. Sizes can be expressed in Dp, percentages, intrinsic constraints, or flexible Fr units. Items can span multiple rows or columns, and the grid reflows dynamically when constraints change. The mental model is closer to CSS Grid than to LazyVerticalGrid, which makes it a better fit for static dashboards and rich content layouts.

FlexBox: Adaptive layout with grow and shrink

FlexBox provides an adaptive layout with wrapping, multi axis alignment, and grow and shrink controls for flexible item sizing. It pairs well with the new Grid for complex responsive layouts where the cell sizing needs to react to content rather than to fixed tracks.

SlotTable implementation: A new internal data structure

Compose runtime has a new internal data structure for tracking composition state, gated behind ComposeRuntimeFlags.isLinkBufferComposerEnabled. It is off by default, but the flag exists so that early adopters can validate behavior in real apps. Worth keeping an eye on for memory and performance characteristics in upcoming releases.

Deprecations and removals

  • Modifier.onFirstVisible() is deprecated. The semantics were misleading inside lazy layouts, where the modifier would fire before the item was actually visible to the user. Migrate to Modifier.onVisibilityChanged(), which reports actual visibility transitions.
  • ComposeFoundationFlags.isTextFieldDpadNavigationEnabled is removed. D-pad navigation in text fields is on by default and the flag is no longer needed.

Beyond Compose: AndroidX libraries on the same train

The April 22, 2026 release window also moved several other AndroidX libraries forward, with notable status promotions. The full per library version list is documented in the AndroidX all channel release notes, but a few are worth highlighting.

Status promotions toward stable

  • Hilt 1.4.0-beta01: Alpha to Beta. Approaching stability for the next dependency injection cycle.
  • Lifecycle 2.11.0-beta01: Alpha to Beta. Worth retesting your SavedStateHandle and collectAsStateWithLifecycle usage as the surface stabilizes.
  • Savedstate 1.5.0-beta01: Alpha to Beta. Pairs with the Lifecycle promotion.
  • Paging 3.5.0-rc01: Beta to RC. Near final, expect minimal API changes before stable.
  • Media 1.8.0-rc01 and Javascriptengine 1.1.0-rc01: Both moved Alpha to RC, skipping the usual Beta gate.
  • Webkit 1.16.0-rc01: Beta to RC.
  • Lint 1.0.0-beta01: Alpha to Beta. The standalone Lint tooling is approaching its first stable release.

New stable releases beyond Compose

  • Navigation3 1.1.1 patch and Navigationevent 1.1.0 stable. The new navigation stack continues to mature alongside the older Navigation 2.x line, which also got a 2.9.8 patch.
  • Wear Compose and Compose Material3 Adaptive are still on alpha tracks but received fresh builds.

Versions and what to upgrade

  • BOM: 2026.04.01
  • Core Compose modules: 1.11.0 stable
  • Heads up: Compose 1.12.0 will require compileSdk 37 and AGP 9. Plan your toolchain bump now if you intend to track latest.

For a one page visual snapshot of the release, see the embedded poster below. For the full official write up, see Meghan Mehta's post on the Android Developers Blog.

Summary

  • Compose BOM 2026.04.01, core modules at 1.11.0 stable.
  • v2 testing APIs are now the default; v1 is deprecated. Plan the migration if you have a large UI test suite.
  • Trackpad events register as PointerType.Mouse, with platform gesture support on API 34+.
  • New experimental APIs: Styles, MediaQuery, Grid, FlexBox.
  • Modifier.onFirstVisible() deprecated. Migrate to Modifier.onVisibilityChanged().
  • AndroidX: Hilt, Lifecycle, Savedstate, Lint moved Alpha to Beta. Paging, Media, Javascriptengine, Webkit moved to RC.
  • Heads up: Compose 1.12.0 will require compileSdk 37 and AGP 9.

As always, happy coding!

Jaewoong (skydoves)

One-page poster

Open in new tab ↗
Jetpack Compose — April 2026 Updates — visual poster

Read the original announcement

This summary is based on the upstream post on the Android Developers Blog. Visit the original for the full announcement, code samples, and links.

Open Android Developers Blog