jetc.dev Newsletter Issue #298
Published: 2026-01-20
This week, we got a stable Compose Multiplatform 1.10 release, so we peek at it and other
new updates!
We also look at the Compose Hot Reload stable version that came with the Compose Multiplatform
release, ideas for accessible bottom nav bars and responsive tab rows, and a Compose Multiplatform
WebView that avoids the Chromium overhead for desktop platforms.
Ooooo… What Did We Get?
Reviewing the release notes for the latest Jetpack Compose update!
The highlight was the stable release of Compose Multiplatform 1.10.0 by JetBrains. It
requires Kotlin 2.2.10 or higher and adds quite the lineup of changes,
in addition to incorporating Google’s changes introduced in Compose 1.10.0. See also
the GitHub release page
for an even more in-depth roster of what changed.
Also, Google released two artifacts in a new androidx.glance.wear artifact group, presumably
for extending Glance’s support for Wear OS.
The Compose BOMs are up to 2026.01.00. The production BOM will generally point to 1.10.1,
which contains some bug fixes.
The alpha BOM will generally point to 1.11.0-alpha03, which:
-
Adds
SnapshotFlowManager, plus an option onsnapshotFlow()to associate it with a manager -
Adds
v2generations of therun*ComposeUiTest()andcreate*ComposeRule()functions, that use aStandardTestDispatcher -
Adds some visual debugging options for shared elements and the
animatedBounds()modifier
Compose Material3 is out with 1.5.0-alpha12, with fixes for TopAppBarDefaults() and chip
padding options.
Compose Material3 Adaptive is up to 1.3.0-alpha06, with bug fixes.
Wear Compose has a new 1.6.0-alpha08 release, with improved snapping support, plus a new
LocalAmbientModeManager to make it easier to have different UX for interactive and ambient
modes.
Finally, the following Compose-related artifacts were released:
androidx.activity:activity-compose:1.13.0-alpha01androidx.paging:paging-compose:3.4.0-rc01(and multiplatform targets)
One Off the Stack, One Off the Slack
You’ve got questions. That’s understandable!
The Slack archive for Kotlinlang is still broken. 😢
Why Does My Swipe Jump?
Using AnchoredDraggableState gives you a lot of control, but it is easy to get tripped up
when applying it. See why updating your anchors mid-swipe can be an issue in this week’s
highlighted Stack Overflow question.
Composable Commentary
Posts, videos, and other new information related to Jetpack Compose!
Compose Multiplatform 1.10.0: Unified @Preview, Navigation 3, and Stable Compose Hot Reload
JetBrains’ Elvira Mustafina points out the key highlights of the Compose Multiplatform 1.10.0
stable release: the common @Preview annotation, support for Nav3, and a stable and bundled
edition of Compose Hot Reload.
The Journey to Compose Hot Reload 1.0.0
Speaking of Compose Hot Reload… JetBrains’ Azat Abdullin and Sebastian Sellmair (Mastodon, Bluesky) describe what Compose Hot Reload is and how it was built, the role of DCEVM, how the Gradle plugin works, and more!
Beyond Font Scaling: Large Content Viewer with Compose
Eevis Panula (Mastodon, Bluesky) explores iOS’ Large Content Viewer accessibility tool and demonstrates how a similar effect can be added to bottom navigation bar items in a Compose UI app. The objective is to give users a more-readable representation of the navigation item, especially for cases where font scaling is inadequate due to insufficient space.
Building a Responsive Tab Row in Jetpack Compose
Tab rows can have similar challenges, especially if the number of tabs is not known at
compile time. Joe Birch
(Mastodon)
illustrates a ResponsiveTabRow() composable, powered by SubcomposeLayout(),
that helps cover cases that break TabRow() and ScrollableTabRow().
Medium: Why Your Compose Animations Are Silently Resetting Your State
Jeffery Orazulike explores the impact that AnimatedContent() can have on your composables,
if you are not careful in how you deploy it. AnimatedContent() might recompose too frequently
or cause your state to be reset, depending on how you set up your state.
Medium: Goodbye AndroidView: A Real CameraX QR Scanner in Compose
James Cullimore takes a deep dive into using CameraXViewfinder() to power a QR scanner
screen, in this case one to scan WiFi QR codes for connecting to a network.
Medium: Swipe-to-Dismiss with Compose Material 3
Domen Lanišnik
(Bluesky)
notes that the documentation for SwipeToDismissBox() is out of date, depicting
the use of a deprecated overload of the function. Domen walks us through using the current
overload, the one that takes onDismissed as a parameter.
Medium: The Evolution of Lifecycle Handling in Jetpack Compose
Thangadurai Selvaraj illustrates the use of newer lifecycle-aware effects (e.g., LifecycleResumeEffect())
and support functions (e.g., the amusingly-named currentStateAsState()) for tying our
composables to Android’s activity lifecycle.
Medium: Prevent ScreenShots/Recordings in KMP App For Android & IOS
Preventing screenshots and other types of screen recordings is fairly easy on Android:
use FLAG_SECURE. Mohab erabi explains how to support the same basic concept on iOS and wrap
it up in a composable for Compose Multiplatform.
Other Interesting Links
- Compose Performance Bottlenecks: Anti-Patterns That Ship Bugs
- Exploring Custom Text Rendering with Jetpack Compose
- Inside MVI: Managing State Like a Pro in Jetpack Compose
- Medium: Android Jetpack Compose State: What I Wish Someone Had Explained Earlier
- Medium: Beyond Flat Lists: Build Expressive Material 3 Lists in Compose
- Medium: Building a Pixel Perfect Light/Dark Theme Switch in Jetpack Compose
- Medium: Building a Scalable UI System in Jetpack Compose
- Medium: From RecyclerView to LazyColumn: A Performance Optimization Playbook for Jetpack Compose
- Medium: How Jetpack Compose Knows Exactly What to Recompose
- Medium: Material You: Dynamic Theming and Color in Modern Android Apps
- Medium: Polishing Compose Multiplatform: Navigation 3 Transitions
- Medium: Shared Element Transitions in Jetpack Compose
- Medium: Swipe to Pay, or How we rewrote the Payment Slider on Compose
- Medium: This One change Made My App Feel Premium : Shared Transitions
- Reducing Unnecessary Recompositions in Jetpack Compose
Resource Roundup
100% pure code!
GitHub: kdroidFilter / ComposeNativeWebiew
Elie Gambache has made a quasi-fork of compose-webview-multiplatform,
adding desktop support via native OS Web rendering, in lieu of bundling Chromium.
GitHub: Jaypatelbond / CountryPicker
Jay Patel released a CountryPickerBottomSheet() composable containing a fairly customizable
country picker implementation.
Notable Releases
Circuit is up to 0.32.0 with
platform updates, updated code generation, and a new produceAndCollectAsRetainedState() option.
Compose Unstyled is out with 1.49.6,
with scrolling improvements.
Or, you can subscribe to the Atom feed or follow Mark Murphy in the Fediverse.
Recent Issues:
- 2026-01-06: Media3 stable release! Frame rates! Testing recomposition counts! Compose for Desktop! And... how will 2026 compare to 2025?!?
- 2025-12-23: Compose and Compose Multiplatform alphas! RemoteCompose alpha! Apple TV! Multiplatform WebViews and PDFs! And I'll see you next in 2026!
- 2025-12-16: Compose Multiplatform RC! XR! Nav3! Shared element transitions! Malware in Compose GitHub repos! 😞 And... React Native in Compose?!?