jetc.dev Newsletter Issue #295

Published: 2025-12-23

This week, we got a new Compose alpha, a new Compose Multiplatform alpha, and the first traditionally-published edition of RemoteCompose! In addition, we get our composables on (Apple) TV, automate our marketing screenshots, and explore another WebView wrapper and another PDF renderer.

Note that I will not be publishing the newsletter between Christmas and New Year’s Day, so it will be two weeks before the next issue… which puts us in 2026.

Ooooo… What Did We Get?

Reviewing the release notes for the latest Jetpack Compose update!

The Compose BOMs are up to 2025.12.01. The alpha BOM mostly will point to 1.11.0-alpha02, which adds trackpad testing APIs, in addition to bug fixes.

Compose Material3 is up to 1.5.0-alpha11, adding “material expressive list items” and ExpandedFullScreenContainedSearchBar(), among other changes.

RemoteCompose is available in a super-early 1.0.0-alpha01 release:

  • androidx.compose.remote:remote-core:1.0.0-alpha01
  • androidx.compose.remote:remote-creation:1.0.0-alpha01
  • androidx.compose.remote:remote-creation-android:1.0.0-alpha01
  • androidx.compose.remote:remote-creation-compose:1.0.0-alpha01
  • androidx.compose.remote:remote-creation-core:1.0.0-alpha01
  • androidx.compose.remote:remote-creation-jvm:1.0.0-alpha01
  • androidx.compose.remote:remote-player-compose:1.0.0-alpha01
  • androidx.compose.remote:remote-player-core:1.0.0-alpha01
  • androidx.compose.remote:remote-player-view:1.0.0-alpha01

For more on RemoteCompose, see these slides.

Compose developers also got androidx.biometric:biometric-compose (presumably a Compose-native biometrics wrapper) and androidx.wear.compose:compose-navigation3 (presumably for using Nav3 on watches). Our overall roster of new Compose-adjacent artifact versions is:

  • androidx.activity:activity-compose:1.12.2
  • androidx.biometric:biometric-compose:1.4.0-alpha05
  • androidx.camera:camera-compose:1.6.0-alpha02
  • androidx.camera.viewfinder:viewfinder-compose:1.6.0-alpha02
  • androidx.ink:ink-authoring-compose:1.0.0
  • androidx.ink:ink-authoring-compose-android:1.0.0
  • androidx.ink:ink-brush-compose:1.0.0
  • androidx.ink:ink-brush-compose-android:1.0.0
  • androidx.ink:ink-geometry-compose:1.0.0
  • androidx.ink:ink-geometry-compose-android:1.0.0
  • androidx.paging:paging-compose:3.4.0-beta01 (and multiplatform targets)
  • androidx.privacysandbox.ui:ui-client-compose:1.0.0-alpha17

Finally, JetBrains published 1.11.0-alpha01 of Compose Multiplatform, as they close the time gap between Compose releases and corresponding Compose Multiplatform releases. Compose Multiplatform now uses Kotlin 2.2, and this release also contains a smattering of other bug fixes and smaller features.

One Off the Stack, One Off the Slack

You’ve got questions. That’s understandable!

How Can We Minimize Recomposition When Updating Lots of Data?

If your data, and the composables that render that data, are fine-grained, Compose should skip unnecessary recompositions, only worrying about re-rendering composables where the fine-grained data changed. Learn more in this week’s highlighted Stack Overflow question.

Can We Use Nav3 in Compose Multiplatform?

The answer is “yes”, but it requires alpha library versions at this point, and you need to be a bit careful where you get your version numbers from. Learn more in this week’s highlighted Kotlinlang #compose Slack thread.

Composable Commentary

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

Migrating a Jetpack Compose app to Kotlin Multiplatform

JetBrains published a lengthy bit of documentation describing how to convert a Compose for Android app to Compose Multiplatform. Specifically, they convert Google’s Jetcaster sample app.

Reddit: I Got Compose Multiplatform Running on Apple TV

Sajid Ali described the process for getting Compose Multiplatform to play well with tvOS and run on the Apple TV.

Medium: Generate App Store Screenshots Directly from Jetpack Compose Previews

Medium user Benji wrote up how to use @Preview annotations to create marketing preview images, such as those that you might publish on your Web site or in an app store listing. This offers a lot of long-term potential, such as for having CI/CD generate those preview images on release builds.

Medium: Jetpack Compose Context.getString: When Lint Suddenly Breaks Your CI before year-end

Lint will now complain about your use of LocalContext for resolving resources, as configuration changes will not cause your code to recompose. Medium user Ryan W walks us through how to resolve this issue.

Testing Jetpack Compose UI on the JVM: The Discovery That Changed My Workflow

KMP Bits explains how to use Robolectric to run Compose UI tests as ordinary unit tests on the JVM, for faster test execution by avoiding the need to fire up emulators.

Resource Roundup

100% pure code!

GitHub: parkwoocheol / compose-webview

GitHub user parkwoocheol is aiming to build a WebView implementation that works across most Compose Multiplatform platforms: Android, iOS, desktop, and Web/JS. A key emphasis for the mobile versions is Kotlin<->JavaScript communication.

GitHub: dshatz / pdfmp

GitHub user dshatz is creating a Compose Multiplatform wrapper around libpdfium for rendering PDFs. The library supports Android and desktop, along with untested iOS support.

GitHub: kez-lab / Compose-DateTimePicker

GitHub user kez-lab brings us a Compose Multiplatform TimePicker() and YearMonthPicker(), supporting Android, iOS, desktop, and Web/Wasm.

Introducing the Huge Icon Collection with 17,043 free icons

Alex Styl has massively expanded the icon collection for which his site offers SVG access, generated Compose code, and more.

Notable Releases

The Google Maps team published 7.0.0 of Maps for Compose. Mostly, this updates the library to depend upon Compose 1.10, with a resulting increase of the minSdk to 23.

The Google Pay team released 1.2.0 of Compose Pay Button, “adding support for PIX and `EWALLET”.

Ballast is up to 5.0.1. It migrates to Kotlin 2.2.20, updates dependencies, and replaced some kotlinx.datetime type references with equivalents from kotlin.time.