What's new in the
April '26 release.
Compose 1.11 lands with a revamped test runtime, shared-element debug tooling, first-class trackpad support, and a fresh batch of experimental layout and styling APIs — Styles, MediaQuery, Grid, and FlexBox.
Coroutine execution
in tests, v2 by default
STABLE
v2 testing APIs are now the default; v1 is deprecated.
The dispatcher swaps from UnconfinedTestDispatcher
to StandardTestDispatcher —
coroutines queue until the virtual clock advances.
- Better mimics production conditions
- Flushes out race conditions and flakes
- Migration guide & API mappings provided
Shared element
visual debugging
STABLE
Wrap your SharedTransitionLayout
with LookaheadAnimationVisualDebugging
to see target bounds, trajectories, and match counts at a glance.
Trackpad events, finally treated like a mouse
STABLE
Basic trackpad input now reports as PointerType.Mouse
instead of fake touches — clicking & dragging no longer scrolls. Two-finger swipes and pinches (API 34+)
are recognized by Modifier.scrollable and
Modifier.transformable out of the box.
Composition host defaults
STABLE
HostDefaultProvider,
LocalHostDefaultProvider,
HostDefaultKey, and
ViewTreeHostDefaultKey
supply host-level services directly through compose-runtime.
- No more compose-ui dependency for lookups
- Better support for Kotlin Multiplatform
- Use
compositionLocalWithHostDefaultOffor tree-linked defaults
@PreviewWrapper
for Android Studio
STABLE
Define exactly how a Compose preview is displayed. Implement
PreviewWrapperProvider
and annotate to inject theming and other wrapper logic — cuts repetitive preview boilerplate.
@PreviewWrapperProvider(ThemeWrapper::class) @Preview @Composable private fun ButtonPreview() { // JetsnackTheme in effect Button(onClick = {}) { Text(text = "Demo") } }
Styles API
EXPERIMENTALA new foundation API for customizing visual elements of components — stateful styling and animated transitions with promising performance benefits.
Button( onClick = { /* … */ }, style = { background(Brush.linearGradient( listOf(lightPurple, lightBlue) )) width(75.dp) height(50.dp) externalPadding(16.dp) pressed { background(Brush.linearGradient( listOf(Color.Magenta, Color.Red) )) } } ) { Text("Login") }
mediaQuery
EXPERIMENTALDeclarative, performant adaptation to the environment — window size, posture, keyboard, pointer precision. Recomposes only when needed.
@Composable fun VideoPlayer() { if (mediaQuery { windowPosture == UiMediaScope.Posture.Tabletop }) { TabletopLayout() } else { FlatLayout() } }
Grid
EXPERIMENTAL
Complex two-dimensional layouts built from tracks, gaps, and cells. Supports
Dp, percentages, intrinsic sizes, and flexible Fr units —
without the overhead of a scrollable list.
FlexBox
EXPERIMENTAL
High-performance adaptive layouts with wrapping, multi-axis alignment, and
grow /
shrink
based on available container dimensions.
New SlotTable implementation — runtime guts, rewritten
EXPERIMENTAL · OFFThe internal data structure tracking composition hierarchy, invalidations, recompositions, and remembered values gets a new implementation designed to improve performance, primarily around random edits. Opt in with:
ComposeRuntimeFlags.isLinkBufferComposerEnabled = true