jetc.dev Newsletter Issue #285

Published: 2025-10-14

This week, we peek at the latest Compose BOMs and Compose Multiplatform update. We explore Nav2 -> Nav3 migrations, keying our lazy containers, and intentional(!) UI glitches. Plus, we see a multiplatform coachmark implementation and explode our composable layers.

Ooooo… What Did We Get?

Reviewing the release notes for the latest Jetpack Compose update!

The Compose BOMs are up to 2025.10.00. The production BOM should point to 1.9.3, with some bug fixes, including one that did not kick in until a node hierarchy depth of 170. 😮

The alpha BOM should point to the 1.10.0-alpha05 releases, adding:

  • Addition and subtraction support for PaddingValues
  • isPausableCompositionInPrefetchEnabled being enabled by default
  • Shared transition APIs being considered to be stable

Also note that Material3 Adaptive has a 1.2.0-rc01 release as well as a 1.3.0-alpha01 release. The latter introduces margin and edge-to-edge support for various scaffolds, including ThreePaneScaffold(), ListDetailPaneScaffold(), and SupportingPaneScaffold().

Wear Compose also has paired releases, with 1.5.3 (adding support for verticalAlignment in TransformingLazyColumn()) and 1.6.0-alpha03 (adding configurable initial focus support for TimePicker).

We also got updates to some Compose-related libraries:

  • androidx.camera:camera-compose:1.5.1
  • androidx.camera.viewfinder:viewfinder-compose:1.5.1
  • androidx.ink:ink-authoring-compose:1.0.0-alpha07
  • androidx.ink:ink-authoring-compose-android:1.0.0-alpha07
  • androidx.ink:ink-brush-compose:1.0.0-alpha07
  • androidx.ink:ink-brush-compose-android:1.0.0-alpha07
  • androidx.ink:ink-geometry-compose:1.0.0-alpha07
  • androidx.ink:ink-geometry-compose-android:1.0.0-alpha07
  • androidx.lifecycle:lifecycle-runtime-compose:2.10.0-alpha05 (and multiplatform targets)
  • androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0-alpha05 (and multiplatform targets)
  • androidx.navigationevent:navigationevent-compose:1.0.0-beta01 (and multiplatform targets)
  • androidx.savedstate:savedstate-compose:1.4.0-beta01 (and multiplatform targets)

Finally, JetBrains released 1.10-0-alpha02 of Compose Multiplatform, with @Preview now available in commonMain, LocalLifecycleOwner in runComposeUiTest, and other features and fixes.

One Off the Stack, One Off the Slack

You’ve got questions. That’s understandable!

Should a Composable Return a Value?

“Long answer ‘yes, with an if’; short answer ‘no, with a but’.”. Learn more, and why we are not asking you to Remember(), in this week’s highlighted Stack Overflow question.

Should Long-Presses Affect Focus?

While Compose Multiplatform aims to provide a common UI across platforms, the actual UX may differ due to platform differences in input behaviors. Learn more about how Compose for Android and Compose for Desktop handle focus with long-press events in this week’s highlighted Kotlinlang #compose Slack thread.

Composable Commentary

Posts, videos, and other new information related to Jetpack Compose!

Google is developing some documentation to help Compose developers who were using Navigation 2 for Compose (Nav2) to Navigation 3 for Compose (Nav3). It offers step-wise instructions with an aim of keeping the project in building and working condition through the migration process.

Compose Compiler Stability Inference System

Jaewoong Eum (Mastodon, Bluesky) has been spending a lot of time exploring how the Compose Compiler handles stability inference and how it is implemented. This massive document compiles the findings, along with links to overviews and more.

Medium: What’s New in Compose Text: A Guide to the Latest APIs

Oğuzhan Aslan writes about the TextFieldState-based version of TextField() and all that it enables, from autofill and auto-sizing to improved secure text entry.

A Simple key to a Better LazyList in Jetpack Compose

Shreyas Patil (Mastodon, Bluesky) explains the role of key in a LazyColumn() or other lazy containers, particularly exploring what can go wrong when you neglect to provide a key. The post also covers how key does what it does.

Glitch Effect in Jetpack Compose

sinasamaki (Mastodon, Bluesky) shows how to “glitch” a composable: causing some pixels in a row to be offset from their intended positions, as if something went wrong in the rendering. This is accomplished by recording the composable content to an offscreen buffer, then using the Canvas() API to manipulate that buffer before rendering the altered result.

Medium: Jetpack Compose’s AnimatedVisibility with null values

Steven de Tilly demonstrates an AnimatedVisibilityWithNullable() wrapper around AnimatedVisibility() that supports animating composables between null and non-null values of some model object.

Medium: Mapbox in Compose Multiplatform

Mapbox is a popular library for rendering maps, offering support for many platforms. Akmal Muhamad Firdaus shows how to use expect/actual to wrap Mapbox maps for Android and iOS, so common code can reference a single @Composable regardless of platform.

Resource Roundup

100% pure code!

GitHub: ankitk77 / coachmark

Ankit Kumar adapted reveal to Compose Multiplatform, to provide onboarding-style tutorial UIs for most Multiplatform platforms.

GitHub: pingpongboss / compose-exploded-layers

Mark Wei created a framework for rendering composables in layers, where those layers can be “exploded” into a 3D-style view demonstrating their Z-order stacking. This is available for Compose for Android.

GitHub: sudarshanmhasrup / localina

Sudarshan Mhasrup published a library to make it easier for you to change Kotlin Multiplatform localization on the fly, instead of being limited to whatever locale is specified on the device.

GitHub: OmyDaGreat / iced-kt

Om Gupta is building an Elm Architecture layer atop of Compose Multiplatform. Elm Architecture is Model-View-Update (MVU), reminiscent of MVI.

Notable Releases

Maps for Compose 6.12.1 fixes a bug in ScaleBar().