jetc.dev Newsletter Issue #337

Published: 2026-11-03

This week, Android Dev Summit had an outsized impact, from conference videos to new libraries, so we take a peek!

We also examine Layoutlib, consider Remote Compose, and see how to deal with foldables on both iOS and Android. Plus, since Halloween was last week, we talk a bit about death… of our Android processes, at least. 💀

Ooooo… What Did We Get?

Reviewing the release notes for the latest Jetpack Compose update!

Presumably tied into Android Dev Summit 2026, we got a couple of new artifact groups with Compose-related artifacts.

AppState StateStore is a new library built on the Compose runtime that acts as a wrapper to provide custom integrations. The androidx.appstate.statestore artifact provides the library APIs and it also comes with a androidx.appstate.statestore:statestore-datastore artifact for state persistence. Developers can use StateStore to hoist their snapshot state into their application layer and the datastore integration to persist that state.

AppState Transform is a new library built on the Compose runtime that allows for running a composition outside of your UI. The androidx.appstate.transform:transform artifact provides the library APIs and it also comes with a androidx.appstate.transform:transform-testing artifact for testing. Developers can use Transform to manage their composition anywhere within their app.

Also, Media3 got a bump to 1.12.0-alpha02, which includes:

  • androidx.media3:media3-ui-compose:1.12.0-alpha02
  • androidx.media3:media3-ui-compose-material3:1.12.0-alpha02

One Off the Stack, One Off the Slack

You’ve got questions. That’s understandable!

How Can I Avoid Losing Effects When State Changes Rapidly?

One use of LaunchedEffect() is to launch animations. If the composable will recompose with key changes for the LaunchedEffect(), the old effect is canceled and the new effect runs. This has the side effect of interrupting one animation to start another, which can lead to odd visual results. The solution is to track a richer bit of state, one that allows you to know all the animations yet to run, so you can still run them. Learn more in this week’s highlighted Stack Overflow question.

How Does Strong Skipping Deal with Inline/Value Types Across Modules?

Compose strong skipping is cool. Kotlin inline classes are cool, and the upcoming full value classes are cool. Multi-module projects are cool. Combining all three gets a bit interesting, at least in terms of the possibilities for Compose optimization, as we see in this week’s highlighted Kotlinlang #compose Slack thread.

Android Dev Summit 2026

Google held an Android Dev Summit for the first time in a while. Many of their sessions touched upon Compose, including:

Composable Commentary

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

Medium: Inside Android Layoutlib: How View and Compose Previews Reach the Canvas

Ravi Rawal looks inside the oft-ignored Layoutlib, the rendering library used for things like @Preview in Android Studio and IntelliJ IDEA. This is designed to avoid device runtimes, instead aiming to reproduce what you would see on devices using a host-supplied framework.

Medium: Remote Compose: When the UI travels as instructions

Santiago Mattiauda compares and contrasts classic JSON-based server-defined UI (SDUI) techniques with Remote Compose, to see how they perform and what limitations they present.

Medium: Your Jetpack Compose Screen Forgot Everything? Test for Process Death

Smaranika Kar reminds us that nothing lasts forever, especially Android app processes. This post also reminds us of techniques for dealing with this, such as SavedStateHandle and rememberSaveable().

Medium: Beyond Phone Screens: Our Journey with Adaptive Layouts in Box Box Club

Bhoomi Gadhiya writes about how Box Box Club migrated to adaptive layouts from phone-specific designs, starting with navigation elements and eventually migrating screens one at a time.

Medium: What Should You Pass Into a Compose Screen?

Swaran Singh Aulakh reminds us that our leaf composables generally should avoid having complex parameter types, such as viewmodels, NavController, Flow, etc. Having simpler parameters, such as current state values and event lambdas, make it easier to develop previews and write solid unit tests.

Resource Roundup

100% pure code!

GitHub: AntonUdovychenko / kmp-bugreport

Anton Udovychenko brings us a bug reporter UX for Compose Multiplatform, supporting all major targets. It includes grabbing screenshots with markup, adding images and Markdown-formatted descriptions, and customizable forms of delivering the reports.

GitHub: jantursky / crease

Ján Turský is working on foldable-aware layouts for Compose Multiplatform, supporting both Android and iOS (now that the iPhone Duo is a thing).

GitHub: jantursky / kapow

Ján Turský is also creating a library of animation effects for Compose Multiplatform, supporting all major targets. Specifically, these animations are designed to play when a state changes, such as a puff of smoke when a component vanishes.

Notable Releases

Compose Unstyled’s 2.10.2 release seems to mostly address normalizing how Host works with things it can manage, such as dialogs and modal bottom sheets.

A Very Particular Set of Skills

Adding Compose capabilities to your coding agents!

A2UI continues its turn in the spotlight. This project ports Google’s A2UI Compose implementation to Compose Unstyled, while this project offers an A2UI implementation for the embedded Compose engine that I mentioned last week.

And we have some more skills:

Featured here? Please add this badge to your article or repo! As Seen In - jetc.dev Newsletter Issue #337

Powered by Buttondown

Or, you can subscribe to the Atom feed or follow Mark Murphy on Mastodon or Bluesky.

Spread the Word!
Suggestions?
If you have ideas for items for future newsletter editions, reach out via email or contact Mark Murphy on kotlinlang Slack!