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!
Navigation 2 to 3 migration guide
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.
Other Interesting Links
- Medium: A Clean, Reactive ViewModel for Jetpack Compose: Built for Clean Architecture
- Medium: A Full Guide to Paging 3 (lazy-list), Navigation 3 with MVI: Load States, Shimmer Placeholders, and Error Handling Explained
- Medium: Creating a Before–After Image Reveal in Jetpack Compose
- Medium: Fixing Android Jetpack Compose Navigation Jank: A System Trace Profiling Case Study
- Medium: Fixing Laggy Search in Jetpack Compose — How I Made My App Search Instantly
- Medium: How
remember
andrememberSaveable
Store State Internally in Jetpack Compose - Medium: How I Accidentally Built a Compose BottomSheetNavigator that also works on Compose Multiplatform
- Medium: Kamel: The Answer to Image Loading in KMP+CMP Projects
- Medium: KMP: Unified UI with Compose Multiplatform
- Medium: Mastering Event Naming and Intent in Jetpack Compose: Beyond onClick
- Medium: Mastering Jetpack Compose Performance
- Medium: Reducing Unnecessary Recompositions: 3 Practical Optimization Techniques for Jetpack Compose
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.
Other Interesting Links
- GitHub: andannn / NavResult (Nav2-based results delivery for Compose Multiplatform)
- GitHub: bodenberg / appdimens (
ssp
/sdp
for Compose for Android) - GitHub: calixtod / EasyAndroidPermissions (coroutine-based permission management for Compose for Android)
- GitHub: CapnSpellcheck / cmp-animatedcounter (animated counter widget for Compose Multiplatform)
- GitHub: WannaverseOfficial / kmp-country-selector (country picker for Compose Multiplatform)
Notable Releases
Maps for Compose 6.12.1
fixes a bug in ScaleBar()
.
Or, you can subscribe to the Atom feed or follow Mark Murphy in the Fediverse.
Recent Issues:
- 2025-09-30: New patch releases and alphas of Compose and Wear Compose! Material Symbols! MapLibre! Floating action menus! And... what if I want 2 or 4, but not 3?!?
- 2025-09-23: Compose Multiplatform 1.9.0! Shadows! Clipping and masking! Desktop window sizes! And... can we improve our stability?!?
- 2025-09-16: Compose patch and alpha! Wear Compose patch and alpha! Compose Multiplatform RC! Visibility! Compose without an Activity! And... what is 'remote Compose'?!?