jetc.dev Newsletter Issue #266
Published: 2025-05-27
Google I|O 2025 is in the books, and we run down what they covered related to Compose!
In addition, we got new versions of Compose and Compose Multiplatform to play with, and KotlinConf 2025 came with its own set of announcements from JetBrains. In this week’s newsletter, we also express some motion physics, explore performance-related annotations, and look at a Compose-friendly string model wrapper.
Ooooo… What Did We Get?
Reviewing the release notes for the latest Jetpack Compose update!
The Compose BOMs are up to 2025.05.01
. The production BOM points to the 1.8.2
patch
release of the major artifacts, with a smattering of bug fixes.
Compose also has a 1.9.0-alpha03
release. This includes:
- New
onFirstVisible()
andonVisibilityChanged()
modifiers - A new
scrollable2D()
modifier - An
AnnotatedOutputTransformation
for adding annotations to aBasicTextField()
before rendering
As part of Google I|O 2025, Google released Navigation3 (Nav3 for short), a Compose-centric nav implementation. This resulted in a whole bunch of new artifacts in two new artifact groups:
androidx.navigation3
androidx.navigation3:navigation3-runtime
androidx.navigation3:navigation3-runtime-android
androidx.navigation3:navigation3-runtime-jvmstubs
androidx.navigation3:navigation3-runtime-linuxx64stubs
androidx.navigation3:navigation3-ui
androidx.navigation3:navigation3-ui-android
androidx.navigation3:navigation3-ui-jvmstubs
androidx.navigation3:navigation3-ui-linuxx64stubs
androidx.navigationevent
androidx.navigationevent:navigationevent
androidx.navigationevent:navigationevent-android
androidx.navigationevent:navigationevent-desktop
androidx.navigationevent:navigationevent-iosarm64
androidx.navigationevent:navigationevent-iossimulatorarm64
androidx.navigationevent:navigationevent-iosx64
androidx.navigationevent:navigationevent-js
androidx.navigationevent:navigationevent-linuxarm64
androidx.navigationevent:navigationevent-linuxx64
androidx.navigationevent:navigationevent-macosarm64
androidx.navigationevent:navigationevent-macosx64
androidx.navigationevent:navigationevent-mingwx64
androidx.navigationevent:navigationevent-tvosarm64
androidx.navigationevent:navigationevent-tvossimulatorarm64
androidx.navigationevent:navigationevent-tvosx64
androidx.navigationevent:navigationevent-wasm-js
androidx.navigationevent:navigationevent-watchosarm32
androidx.navigationevent:navigationevent-watchosarm64
androidx.navigationevent:navigationevent-watchosdevicearm64
androidx.navigationevent:navigationevent-watchossimulatorarm64
androidx.navigationevent:navigationevent-watchosx64
Also, androidx.privacysandbox.ui:ui-client-compose
would appear to be a new Compose-related
artifact.
The following Compose-adjacent artifacts got new (or initial) versions:
androidx.activity:activity-compose:1.12.0-alpha01
androidx.fragment:fragment-compose:1.8.7
androidx.media3:media3-ui-compose:1.7.0
androidx.media3:media3-ui-compose:1.7.1
androidx.media3:media3-ui-compose:1.8.0-alpha01
androidx.privacysandbox.ui:ui-client-compose:1.0.0-alpha16
Finally, JetBrains released Compose Multiplatform 1.8.1
.
Compose libraries with resources can be built and used as an XCFramework
, dependencies
were updated, and bugs were squashed.
Google I|O 2025
Google I|O 2025 has come and gone!
During the event, Google posted a lot of new material, including:
- 16 things to know for Android developers at Google I/O 2025
- Androidify: Building delightful UIs with Compose
- Announcing Jetpack Navigation 3
- Build adaptive Android apps that shine across form factors
- Peacock built adaptively on Android to deliver great experiences across screens
- What’s New in Jetpack Compose
- What’s new in Android development tools
Also, the following conference presentation videos have been posted:
- Adaptive Android development makes your app shine across devices
- Build more accessible UIs with Jetpack Compose
- Build next-level UX with Material 3 Expressive
- Mastering text input in Compose
- What’s new in Android development tools
- What’s new in Android
One Off the Stack, One Off the Slack
You’ve got questions. That’s understandable!
Why Does My AndroidView()
Not Update?
To update an AndroidView()
, you need to supply the update
lambda, not just arrange
for the wrapping composable to be recomposed. See this effect in the context of ExoPlayer
in this week’s highlighted Stack Overflow question.
Who Moved My VerticalDragHandle()
?
Compose Multiplatform had VerticalDragHandle()
in some alphas, but the final version
lacks it. See where it went in this week’s highlighted Kotlinlang #compose
Slack thread.
Composable Commentary
Posts, videos, and other new information related to Jetpack Compose!
Adding Motion Physics with Jetpack Compose
Google’s Austin Fisher, Rebecca Franks, and Gus Sonoda give us a tour of the Material3 Expressive motion physics system, for more customizable animations, including “motion themes”.
KotlinConf 2025 Unpacked: Upcoming Language Features, AI-Powered Development, and Kotlin Multiplatform Upgrades
JetBrains’ Daria Voronina walks us through a series of announcements from KotlinConf 2025, including notes about the stable release of Compose for iOS and the introduction of Compose Hot Reload.
Kotlin Multiplatform Tooling: Now in IntelliJ IDEA and Android Studio
JetBrains’ Ekaterina Volodko reviews what’s in the beta release of the Kotlin Multiplatform plugin for Android Studio and IntelliJ IDEA, including Compose Hot Reload and the latest improvements to Compose Multiplatform tooling support.
Medium: Material 3 Expressive Design: A New Era
Stefano Natali looks at some of the new offerings in Compose Material3 related to the Expressive release, including button groups, loading indicators, and split buttons.
Deep dive into annotations in Jetpack Compose
Shreyas Patil takes a deep dive into @NonRestartableComposable
, @NonSkippableComposable
,
and @ReadOnlyComposable
, to see how they work and when we should use them to boost
performance.
UI layer architecture for persistent UI elements
A common concern among Compose UI developers is where durable UI elements, like navigation bars, should reside. Should there be a single implementation at the root level, or should they be defined per-screen? TJ Dahunsi explores the problem space and makes a recommendation!
Medium: Building a Unified View Tree Analyser for Android (Views and Compose)
Jeffery Orazulike went where few go: into the Compose node hierarchy to try to create
a single overview of all View
widgets and all Compose UI elements, despite the differences
between the two data models.
Other Interesting Links
- Medium: 10 Jetpack Compose UI Tricks You Probably Don’t Know
- Medium: Best Practices for Refactoring Jetpack Compose Anti-Patterns in Android
- Medium: Build Accessible Android Apps with Jetpack Compose (And Be Ready for the EAA 2025)
- Medium: Compose UI Performance Secrets (Part 3): The Expert’s Toolkit
- Medium: Creating a Custom Toolbar in Jetpack Compose: A Complete Guide
- Medium: Expressive Animations for Everyone
- Medium: Implementing Responsive Navigation and Layouts in Android with Jetpack Compose
- Medium: Jetpack Compose Mini Case: Duplicate keys in LazyColumn
- Medium: Scalable Navigation in Android Apps Using Jetpack Compose
- Medium: Touch, Drag, Reveal: Compose Your Own Scratch Card UI!
- Medium: When Compose Meets SwiftUI — Animation
Resource Roundup
100% pure code!
GitHub: radusalagean / ui-text-compose
Radu Salagean brings us a Kotlin Multiplatform wrapper around strings and string resources, with functions to render them in a Compose Multiplatform UI. Your viewmodels can create text “blueprints” that then get localized at the time of rendering.
GitHub: jimmyplazas / compose-calendar
Jimmy Plazas offers up a calendar UI composable for Compose for Android. It offers a slot API for event indicators, customizable colors, and more.
GitHub: MTtankkeo / compose_appbar
GitHub user MTtankkeo published a library with a lightweight app bar implementation for Compose for Android, without a dependency on Compose Material or Compose Material3.
Notable Releases
Compose Unstyled has a 1.31.1
release with a bug fix.
Orbit MVI is up to 10.0.0
,
adding support for Compose Multiplatform and ViewModel Multiplatform.
Or, you can subscribe to the Atom feed or follow Mark Murphy in the Fediverse.
Recent Issues:
- 2025-05-20: Compose Multiplatform 1.8.0! Compose 1.8.1 and 1.9.0-alpha02! And this issue is a bit short, but there's a reason for that...
- 2025-05-06: DI in previews! LinkAnnotation! Composable visibility! Drag and drop! And... do choosy developers *still* choose GIF?!?
- 2025-04-29: Compose 1.8.0 released! First 1.9.0 alpha! Tooltips! Paths! Tables! And... is Modifier.Node too complicated?!?