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 on snapshotFlow() to associate it with a manager

  • Adds v2 generations of the run*ComposeUiTest() and create*ComposeRule() functions, that use a StandardTestDispatcher

  • 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-alpha01
  • androidx.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.

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.