jetc.dev Newsletter Issue #287

Published: 2025-10-28

This week, we got a new Compose patch release, plus our first beta of 1.10. We peek at those, along with the next alpha of Compose Multiplatform and updates to Wear Compose.

In addition, we examine composable overlays and surfaces, get inked, and have some tartlets.

Ooooo… What Did We Get?

Reviewing the release notes for the latest Jetpack Compose update!

The Compose BOMs are up to 2025.10.01. The production BOM should point to 1.9.4 of the major Compose artifacts, with some bug fixes. The beta BOM should point to 1.10.0-beta01, as the 1.10 series picks up steam. Of note:

  • ScaleToBounds() was removed, replaced by the scaleToBounds() modifier

  • A bunch of “retain” types were renamed, such as RetainScope being renamed to RetainedValuesStore and RetainScopeHolder becoming RetainedValuesStoreRegistry

  • Various other APIs were renamed for consistency

Compose Material3 is up to 1.5.0-alpha07, with some bug fixes.

Compose Material3 Adaptive has a stable 1.2.0 release, along with a 1.3.0-alpha02 release.

Wear Compose has a 1.5.4 patch, with a few bug fixes. Wear Compose also has a 1.6.0-alpha04 release, offering reverseLayout for TransformingLazyColumn() and bug fixes.

We also got updates to:

  • androidx.activity:activity-compose:1.12.0-beta01
  • androidx.camera:camera-compose:1.6.0-alpha01
  • androidx.camera.viewfinder:viewfinder-compose:1.6.0-alpha01
  • androidx.ink:ink-authoring-compose:1.0.0-beta01
  • androidx.ink:ink-authoring-compose-android:1.0.0-beta01
  • androidx.ink:ink-brush-compose:1.0.0-beta01
  • androidx.ink:ink-brush-compose-android:1.0.0-beta01
  • androidx.ink:ink-geometry-compose:1.0.0-beta01
  • androidx.ink:ink-geometry-compose-android:1.0.0-beta01
  • androidx.lifecycle:lifecycle-runtime-compose:2.10.0-beta01 (and multiplatform targets)
  • androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0-beta01 (and multiplatform targets)
  • androidx.media3:media3-ui-compose:1.9.0-alpha01
  • androidx.media3:media3-ui-compose-material3:1.9.0-alpha01
  • androidx.pdf:pdf-compose:1.0.0-alpha11
  • androidx.savedstate:savedstate-compose:1.4.0-rc01 (and multiplatform targets)

Note that androidx.media3:media3-ui-compose-material3 is brand new.

Finally, JetBrains released [1.10.0-alpha03 of Compose Multiplatform]. The new text context menus have been temporarily disabled, and JetBrains is standardizing on androidx.compose.ui.tooling.preview.Preview to reduce the number of Preview annotations. In addition, there are your usual suite of bug fixes and updates.

One Off the Stack, One Off the Slack

You’ve got questions. That’s understandable!

How Can I Handle Both One-Finger and Two-Finger Gestures?

Simple gesture detection is reasonably easy in Compose UI. However, things can get messy quickly, especially if you are trying to support multiple gestures at once. See how to handle both one-finger and two-finger gestures in a single pointerInput() in this week’s highlighted Stack Overflow question.

Why Won’t My Window Stay Dark?

Compose Multiplatform is slick, but occasionally we will run into problems with the integration with the underlying platform. See how Compose for Desktop requires a bit of work to keep dark mode windows dark when they are resized, in this week’s highlighted Kotlinlang #compose-desktop Slack thread.

Composable Commentary

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

Medium: Using Jetpack Compose DrawScope for Custom Overlays

Steven de Tilly writes about crafting overlays for composables. While a common scenario for this is highlighting and explaining some UI in an onboarding flow, Steven instead looks at a chat app, where you want to allow for applying reactions to messages via a popup emoji picker, where the message is still shown normally but the rest of the UI being dimmed.

Medium: Demystifying Android’s Surface: Your Secret Weapon for High-Performance Graphics

Akshat Divekar explores rendering to a Surface from Compose for Android by way of AndroidView() wrapping a SurfaceView. Surface is very low-level, but it has interesting cross-process uses, since a Surface can be passed via AIDL or Intent extras, as it is Parcelable.

Medium: Compose for DI?

When we think of “Compose”, the tendency is to focus on Compose UI, the stuff that renders user interfaces. Emmanuel Ortiguela explains how the underlying Compose engine can be used for things beyond Compose UI, in this case creating a dependency injection framework driven by composables.

Medium: Practicing Shadows in Jetpack Compose — Elevation, Drop Shadow

Mingyu Kim demonstrates shadow rendering in Compose UI, not only using the shadow() modifier, but also creating custom modifiers powered by drawBehind() that implement custom drop shadows.

Video: Supporting stylus input on Android using Jetpack Ink

Thomas Künneth (Mastodon, Bluesky) delivered a presentation for droidcon Berlin 2025 on using Jetpack Ink for stylus input from a Compose UI-based app.

When common refactoring breaks the compose chain

Lyubomir Ganev (Mastodon) explains how extracting out a composable sometimes leaves it with plain data, not State, and so it is no longer capable of reacting to changes in that state as it did before.

Resource Roundup

100% pure code!

GitHub: yumemi-inc / Tartlet

YUMEMI Inc. created an MVVM framework for Compose Multiplatform designed to minimize the number of callbacks one needs to pass down from parent to child composables.

GitHub: composablehorizons / compose-ripple-indication

Alex Styl (Bluesky) brings us a standalone implementation of the Material-style ripple animation for use in indications, for Compose Multiplatform.

Notable Releases

Compose Unstyled 1.46.1 expands its ColoredIndication support, among other changes.