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() and onVisibilityChanged() modifiers
  • A new scrollable2D() modifier
  • An AnnotatedOutputTransformation for adding annotations to a BasicTextField() 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:

Also, the following conference presentation videos have been posted:

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.

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.