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 JetpackViewModel
(shorter thanrememberSaveable()
, longer than other forms ofremember...
) -
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.
Other Interesting Links
- Medium: Building a Cross-Platform Tile Map with Compose Multiplatform
- Medium: Building a Flexible Alert System in a Multi-Module Android Compose App with Factory Pattern
- Medium: Compose Mesh Gradient, Apple SwiftUI like mesh gradients for Jetpack Compose
- Medium: Cross-Platform Text-to-Speech with Real-time Highlighting (Kotlin Multiplatform + Swift Interoperability)
- Medium: Custom Scrollbar for
LazyColumn
in Jetpack Compose — a step-by-step deep dive - Medium: How to Create Complex Lists without Nested LazyColumns in Jetpack Compose
- Medium: Jetpack Compose 1.9’s Advanced Shadow Modifiers: Elevating UI Depth in Android Apps
- Medium: Jetpack Compose Optimization Guide -Best Practices for Faster Apps
- Medium: Jetpack Navigation 3 — Why a New Navigation System for Compose?
- Medium: Lifecycle-Aware State in Compose: Why
collectAsStateWithLifecycle
OutperformscollectAsState
- Medium: Navigation 3 in Jetpack Compose, Big Leap in Android Navigation
- Medium: Predictive Back Navigation in Android 15+: Making Transitions Smoother with Jetpack Compose
- Medium: So… What Even Is a SlotTable in Jetpack Compose?
- Medium: Unlocking Compose 1.9: Shadows, Visibility, and Smarter Lists
- Video: An interview with Huyen “Pixel Pushing” Tue Dao
- Video: Building Cross-Platform Apps with Kotlin & Compose Multiplatform
- Video: Building immersive VR apps for Meta Quest with Jetpack Compose
- Video: Project Sparkles: How Compose for Desktop is changing Android Studio
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.
Other Interesting Links
- GitHub: donald-okara / koffee (toast system)
- GitHub: stefanoq21 / BottomSheetNavigator3 (simplifies Material3 bottom sheet nav definitions)
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
, deprecatingThemeOverride
; and1.42.0
, addinga a new stateful form ofTextField()
and fixing some bugs
Or, you can subscribe to the Atom feed or follow Mark Murphy in the Fediverse.
Recent Issues:
- 2025-08-05: Compose and Wear Compose RCs! Compose Multiplatform previews! Keyboard shortcuts! Animated text diffs! And... why do we key()?!?
- 2025-07-29: Compose Multiplatform beta! Text gradients! ExoPlayer! Multiplatform camera access! Drawing! And... is it safe to run with snizzors?!?
- 2025-07-22: Compose BOM and beta! Canvas benchmarking! PausableComposition! AnnotatedString wrapper! And... why does my timetable seem lazy?!?