jetc.dev Newsletter Issue #272

Published: 2025-07-08

This week, we get another pair of BOMs, a new Wear Compose, and a new Compose Multiplatform — let’s check them out!

After that, we look at Android Studio tooling, Nav3, and ExoPlayer/Media3. Plus, we see a Material Design datatable implementation, along with a tool that helps migrate Compose for Android projects to Compose Multiplatform.

Ooooo… What Did We Get?

Reviewing the release notes for the latest Jetpack Compose update!

The Compose alpha and beta BOMs were updated to 2025.06.02. The beta BOM now points to 1.9.0-beta02. Compose Foundation now supports “smart items in context menu and selection toolbar”, but overall this beta release, as expected, was mostly bug fixes.

Wear Compose is up to 1.5.0-beta05, also containing a handful of bug fixes.

The following Compose-related artifact versions were released:

  • androidx.activity:activity-compose:1.12.0-alpha04
  • androidx.media3:media3-ui-compose:1.8.0-beta01
  • androidx.navigation:navigation-compose:2.9.1
  • androidx.navigation:navigation-compose-android:2.9.1
  • androidx.navigation:navigation-compose-jvmstubs:2.9.1
  • androidx.navigation:navigation-compose-linuxx64stubs:2.9.1
  • androidx.navigation:navigation-fragment-compose:2.9.1
  • androidx.navigationevent:navigationevent-compose:1.0.0-alpha04
  • androidx.navigationevent:navigationevent-compose-android:1.0.0-alpha04
  • androidx.navigationevent:navigationevent-compose-jvmstubs:1.0.0-alpha04
  • androidx.navigationevent:navigationevent-compose-linuxx64stubs:1.0.0-alpha04

Finally, JetBrains released 1.9.0-alpha03 of Compose Multiplatform, bringing us customizable shadows, some more Swing integration hooks for Compose for Desktop, and keepScreenOn support for iOS, along with bug fixes.

One Off the Stack, One Off the Slack

You’ve got questions. That’s understandable!

How Can I Use SVGs For My Compose UI?

SVGs are a great format for vector artwork to use in Compose… but then you need to decide how to actually use them. One developer tried two approaches (vector drawable resources and Valkyrie) and got confused by both of them. I tried to lend a hand, in this week’s highlighted Stack Overflow question.

What Happens with Conditional Calls to remember()?

Suppose you have an if/else branch, and you remember() a value in one of the two branches. What happens when, on a recomposition, you go down the other branch? Does the remember() get retained, discarded, or sucked into a rip in the space-time continuum? See the answer in this week’s highlighted Kotlinlang #compose Slack thread! NOTE: no actual space-time continua were harmed in the creation of this newsletter (AFAIK).

Composable Commentary

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

Video: Embedded Layout Inspector

Google’s Paris Hsu looks at Android Studio’s Embedded Layout Inspector, explaining how to get to it and how to use it to help you debug your composables.

Medium: Migrating to Jetpack Compose Navigation 3

Stefano Natali Bluesky takes us through the steps to migrate a codebase from Nav for Compose 2.8.0-era code to using Nav3. This includes defining the NavKey interface implementations for our routes, converting a NavHost() into a NavDisplay(), etc.

Medium: Getting Started With EXO Player in Jetpack Compose

Siva Ganesh Kantamani shows us how to use ExoPlayer in a Compose for Android project, including a PlayerSurface() for video playback, playback controls, and content management handling in a viewmodel.

Video: Building a Modern Kotlin Multiplatform Application with Compose Multiplatform and Koin

In an Android Makers presentation, Arnaud Giulani walks us through a case study of converting Google’s “Now in Android” app to use Compose Multiplatform, with Koin serving as the dependency inversion framework.

Resource Roundup

100% pure code!

GitHub: dufacoga / MaterialDataTableLibrary

Douglas Farid Cortes Garcia created a MaterialDataTableC() composable for a Material Design 3-style data table, complete with support for scrolling, pagination, responsive sizing of columns, per-row edit/delete actions, and more! It presently supports Compose for Android.

GitHub: mori-atsushi / compose-callable

Mori Atsushi created a coroutine-based way to show a dialog and be able to react to its result in sequential statements, as opposed to being split up within a larger composable, to improve readability. It appears to support all Compose Multiplatform targets.

GitHub: MahmoudRH / kmpify

Mahmoud Habib created a desktop tool to help migrate a Compose for Android project to a Compose Multiplatform project, such as by replacing Compose resources, imports, and annotations with CMP equivalents.

GitHub: htandiono / watermark-photo

Hendrik Tandiono brings us a Compose for Android library that wraps CameraX and lets you take a photo, then apply a custom watermark to the image before it is saved.

GitHub: chachako / svg-to-compose-vector

GitHub user chachako created a CLI in Python to generate ImageVector Kotlin source code from SVG files, with support for “paths, basic shapes (rect, circle, ellipse, line, polygon), groups, transforms, gradients, and strokes”.

Notable Releases

Circuit is up to 0.29.1, with a bug fix in support of Metro.