jetc.dev Newsletter Issue #278

Published: 2025-08-26

Hello again! I’m back for a while! 👋🏻

While I was gone, Google released 1.9.0 of Compose, and JetBrains is already up to beta03 of the corresponding Compose Multiplatform release!

This week, we also peek at the new Compose alpha, explore Kobweb and modifier order, and examine wrappers for strings and icons to make our composables more source-independent.

Ooooo… What Did We Get?

Reviewing the release notes for the latest Jetpack Compose update!

Compose 1.9.0 shipped! 🎉 It can be found in the 2025.08.00 release of the production BOM.

Hot on the heels of 1.9.0 is 1.10.0-alpha01, suggesting that 2.0.0 will not be until 2026 at the earliest. 1.10.0-alpha01 adds:

  • The new retain... API, giving us a data lifetime that is akin to a Jetpack ViewModel (shorter than rememberSaveable(), longer than other forms of remember...)

  • Various improvements related to the use of mice or trackpads as pointing devices, including clearing focus on pointer-down events (when they are outside the bounds of the focus area)

  • Support for enabling and disabling shared elements

Wear Compose is up to 1.5.0-rc02, fixing a TimePicker() bug.

In addition, androidx.navigationevent:navigationevent-compose got a big multiplatform update, and we got new artifact releases for a bunch of Compose-related libraries, including:

  • androidx.activity:activity-compose:1.12.0-alpha06
  • androidx.camera:camera-compose:1.5.0-rc01
  • androidx.camera.viewfinder:viewfinder-compose:1.5.0-rc01
  • androidx.fragment:fragment-compose:1.8.9
  • androidx.hilt:hilt-lifecycle-viewmodel-compose:1.3.0-beta01
  • androidx.hilt:hilt-navigation-compose:1.3.0-beta01
  • androidx.ink:ink-authoring-compose:1.0.0-alpha06
  • androidx.ink:ink-authoring-compose-android:1.0.0-alpha06
  • androidx.ink:ink-brush-compose:1.0.0-alpha06
  • androidx.ink:ink-brush-compose-android:1.0.0-alpha06
  • androidx.ink:ink-geometry-compose:1.0.0-alpha06
  • androidx.ink:ink-geometry-compose-android:1.0.0-alpha06
  • androidx.navigationevent:navigationevent-compose:1.0.0-alpha06 (and all platforms)
  • androidx.savedstate:savedstate-compose:1.4.0-alpha02 (and all platforms)

Also, JetBrains has released 1.9.0-beta03 of Compose Multiplatform. Note that all @ExperimentalMaterial3ExpressiveApi and @ExperimentalMaterial3ComponentOverrideApi APIs were removed, presumably to go into the next alpha.

One Off the Stack, One Off the Slack

You’ve got questions. That’s understandable!

How Can I Blue-Shift the Colors Rendered in an AndroidView()?

For a project that I am working on, some outside-of-Android conditions means that I need to blue-shift all the colors in my Compose UI, including those from third-party libraries wrapped in AndroidView(). See my resulting drawWithCache()-based solution in this week’s highlighted Stack Overflow question.

Do I Need a Key For My remember() in itemsIndexed()?

Remembering when and how to remember() is a challenge, even for experienced Compose developers. In this case, we explore whether we need to key our remember() calls inside of an itemsIndexed() loop in a container, in this week’s highlighted Kotlinlang #compose Slack thread.

Composable Commentary

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

What’s new in the Jetpack Compose August ’25 release

Google’s Meghan Mehta reviews what is in Compose for Android 1.9.0, including shadows, improved formatting in OutputTransformation, a stable LazyLayout(), 2D scrolling APIs, and more!

Video: Autofill in Compose

The Android Developers Backstage podcast crew hosted Melba Nuzen and Ralston Da Silva to discuss the recent advances in autofill support for Compose for Android and how it ties into the overall semantics framework.

Video: Build Websites in Kotlin & Compose HTML with Kobweb

David Herman delivered a KotlinConf 2025 presentation on Kobweb, a framework building atop Compose for HTML for creating full-stack Web apps based around HTML, rather than the canvas as Compose for Web does.

The Untapped Power of Jetpack Compose Modifiers

Sergey Drymchenko shows us how important the order of modifiers is, where changing the order can introduce performance and functional problems. Sergey recommends ordering modifiers to be layout first, then appearance, then interaction, and explains what that means in detail.

Send RecyclerView’s scroll events to a compose parent

When migrating from classic Views to Compose for Android, interoperability between those two UI frameworks is crucial. As a result, it is possible that you will have a RecyclerView inside of a composable, with a collapsing app bar implemented in that composable. Leonidas Partsas explains how to connect the two, so scroll events in the RecyclerView can expand and collapse that app bar.

Medium: A Practical Guide to MaterialTheme.colorScheme in Jetpack Compose (Material 3)

Material Design 3 has a dizzying array of color roles. Md Alamin explains what they are and how to organize your code to help track what roles get used where within your design system.

Medium: Design System [an Atomic weapon]

Diego Cornello walks us through what it means to create a custom design system in Compose and what problems it solves.

Resource Roundup

100% pure code!

GitHub: ismoy / ImagePickerKMP

Ismoy Belizaire is creating a Compose Multiplatform library for picking gallery images and taking camera pictures, supporting Android and iOS. It includes permission handling and some amount of UI customization.

GitHub: dkmarkell / textresource

GitHub user dkmarkell brings us another wrapper around text from various sources (resources, hard-coded values, data from servers, etc.), so that the UI layer can treat all of them the same.

GitHub: devdiestrolopez / icon

Carlos Diestro Lopez offers us an IconResource wrapper around Android drawable resources and Compose ImageVector definitions, so your code can handle both formats with minimal effort.

GitHub: RevenueCat / slide-to-unlock

The RevenueCat team has released a SlideToUnlock() composable for Compose Multiplatform. Despite the name, it is not limited to “unlock” operations, but rather is good for any “slide as form of confirmation” UI patterns.

Notable Releases

Maps for Compose is up to 6.7.2, to initialize a one-time Maps API attribution ID.

Horologist is out with 0.8.1-alpha, adding FastScrollingTransformingLazyColumn().

Compose Unstyled released:

  • 1.40.0, adding an XML theme -> Compose bridge among other changes (see this blog post for more),
  • 1.41.0, deprecating ThemeOverride; and
  • 1.42.0, addinga a new stateful form of TextField() and fixing some bugs