jetc.dev Newsletter Issue #274

Published: 2025-07-22

New BOMs and a new Compose beta, featuring the ever-popular bug fixes!

In addition, we look at Canvas() benchmarking, PausableComposition, an AnnotatedString wrapper, and a timetable implementation.

Ooooo… What Did We Get?

Reviewing the release notes for the latest Jetpack Compose update!

The Compose BOMs are up to 2025.07.00.

The beta BOM points to 1.9.0-beta03, containing a few minor bug fixes. With luck, Compose 1.9.0 will proceed shortly to an RC.

The core Compose Material3 artifact is up to 1.4.0-alpha18, with a variety of API changes.

TV Material is up to 1.0.1, with some bug fixes.

Wear Compose is out with 1.5.0-beta06, also with some bug fixes.

And we got updates to some Compose-adjacent artifacts:

  • androidx.camera:camera-compose:1.5.0-beta02
  • androidx.camera.viewfinder:viewfinder-compose:1.5.0-beta03
  • androidx.lifecycle:lifecycle-runtime-compose:2.9.2
  • androidx.lifecycle:lifecycle-runtime-compose-android:2.9.2
  • androidx.lifecycle:lifecycle-runtime-compose-jvmstubs:2.9.2
  • androidx.lifecycle:lifecycle-runtime-compose-linuxx64stubs:2.9.2
  • androidx.lifecycle:lifecycle-viewmodel-compose:2.9.2
  • androidx.lifecycle:lifecycle-viewmodel-compose-android:2.9.2
  • androidx.lifecycle:lifecycle-viewmodel-compose-jvmstubs:2.9.2
  • androidx.lifecycle:lifecycle-viewmodel-compose-linuxx64stubs:2.9.2
  • androidx.media3:media3-ui-compose:1.8.0-rc01
  • androidx.navigation:navigation-compose:2.9.2
  • androidx.navigation:navigation-compose-android:2.9.2
  • androidx.navigation:navigation-compose-jvmstubs:2.9.2
  • androidx.navigation:navigation-compose-linuxx64stubs:2.9.2
  • androidx.navigation:navigation-fragment-compose:2.9.2
  • androidx.pdf:pdf-compose:1.0.0-alpha10
  • androidx.savedstate:savedstate-compose:1.3.1
  • androidx.savedstate:savedstate-compose-android:1.3.1
  • androidx.savedstate:savedstate-compose-jvmstubs:1.3.1
  • androidx.savedstate:savedstate-compose-linuxx64stubs:1.3.1

One Off the Stack, One Off the Slack

You’ve got questions. That’s understandable!

What Is the Best Way to Load a String Resource?

Compose for Android offers two main ways of obtaining the value of a string resource: stringResource() and LocalContext.current.getString(). See the difference, and why stringResource() often is the better answer, in this week’s highlighted Stack Overflow question.

How Can We Benchmark Canvas() Drawing Time?

Many developers would like to do A/B tests on implementations to determine if there is a performance advantage. That gets a bit tricky in Compose, above and beyond all the standard trickiness of benchmarking UI performance. Learn a bit more, in the context of Canvas() brushes and shaders, in this week’s highlighted Kotlinlang #compose Slack thread.

Composable Commentary

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

Exploring PausableComposition internals in Jetpack Compose

Shreyas Patil (Mastodon, Bluesky) is back, looking at the new PausableComposition construct in Compose Runtime. This includes peeling back the covers on RecordingApplier and how this is being employed in LazyList()-based composables like LazyColumn().

Medium: StyledString: A Better Pattern for Rich Text in Jetpack Compose

Eury Pérez Beltré was annoyed by the AnnotatedString DSL, which makes simple things simple and hard things hard. In particular, styling portions of externally-supplied text is a bit of a headache. Eury’s response was to create a StyledString that aims to hide a lot of that complexity.

Medium: Android Adaptive Design (Part 3): Supporting Desktop-Class Input

Tanish Ranjan has been exploring adaptive layouts in Compose and their ramifications. After looking at basic screen size support and foldables, Tanish starts examining supporting more desktop-style forms of input in Compose for Android, including keyboard shortcuts and a wider range of mouse clicks.

Resource Roundup

100% pure code!

Composables Reference

As Alex Styl (Bluesky) put it “I was tired of digging the internet for documentation on compose, so I built my own”. It is focused on composables and modifiers, making it easier to browse than the official documentation.

GitHub: MoyuruAizawa / LazyTimetable

Moyuru Aizawa created a timetable composable: a column-oriented staggered grid with pinned labels, designed for conference schedules and the like. It offers bi-directional scrolling, generates the grid based on event durations, offers a rich slot API, and more. Available for Compose for Android.

GitHub: Nerojust / JetImagePicker

Nyerhovwo Adjekughene created an image picker framework for Compose for Android image picker system, supporting obtaining images from both the camera and from existing images (gallery). It handles runtime permissions, offers multiple image selection, etc.

GitHub: kamyab9k / KamVision

kamyab khosravi is building a Compose for Android wrapper around the Camera2 API, including frame capture support.

Other Interesting Resources

Notable Releases

Maps for Compose is up to 6.7.0, adding a new BitmapDescriptor option on AdvancedMarker

Horologist is out with a v0.8.0-alpha release, with new media components and updated dependencies.