jetc.dev Newsletter Issue #286

Published: 2025-10-21

This week, we explore gap buffers and organize lots of previews. We look at Liquid Glass and a custom design system that, presumably, does not involve Liquid Glass. And, we conclude that Jaewoong Eum is everything, everywhere, all at once, or possibly is just a prolific writer and developer.

Ooooo… What Did We Get?

Reviewing the release notes for the latest Jetpack Compose update!

JetBrains released 1.9.1 of Compose Multiplatform. This mostly picks up bug fixes from Compose for Android, plus fixes a few iOS and desktop-related bugs.

One Off the Stack, One Off the Slack

You’ve got questions. That’s understandable!

What System Changes Trigger Recomposition?

In this week’s highlighted Stack Overflow question, the asker wants to know if things like brightness changes or toggling light/dark mode result in recompositions. Not all system changes are created equal, though, but those that cause configuration changes are assured of triggering recomposition.

Can We Use 9-Patch Images in Compose?

Old-school Android developers will remember the joys of creating 9-patch PNG files, for resizable borders around buttons and stuff. See how to use them in a Compose for Android setting in this week’s highlighted Kotlinlang #compose Slack thread.

Composable Commentary

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

Medium: Understanding Gap Buffers in Jetpack Compose: The 60-Year-Old Algorithm Powering Modern Android UI

Several posts about Compose’s internal talk about gap buffers, but what are they? Akshay Nandwana (Bluesky) dives into gap buffers’ implementation and how Compose’s slot tables leverage them.

Medium: How to manage hundreds of Jetpack Compose previews without sacrificing performance

@Preview is a staple of Compose UI development, giving you at-a-glance renderings of your composables in various scenarios. However, too many previews can make your IDE sluggish. Adrián García explores how to have different sets of previews, allowing you to control how many previews get rendered at once.

Medium: Jetpack Compose: Static vs Dynamic CompositionLocals — Reads, Writes and Trade Offs

Pablo Costa writes about the distinction between static and dynamic composition locals, explaining their use cases and in what situations each should be applied.

Medium: Compose Beyond The UI?

Frameworks like Molecule use composables to drive behavior other than user interfaces. Mukul Jangra shows how that works, specifically peeking at using the technique for state production in viewmodels.

Medium: Liquid Glass Components in Compose Multiplatform

Julia Jakubcova explores how to leverage Liquid Glass, using natively-blurred components on modern iOS, native fallbacks on older iOS versions, and Compose implementations on Android. See also this related Kotlinlang #compose-ios Slack thread.

Medium: Understanding retain{} internals: A Scope-based State Preservation in Jetpack Compose

Jaewoong Eum (Mastodon, Bluesky) continues exploring the new retain()-based alternatives to remember(), this time diving into the implementation and explaining how it can hold onto state beyond simple recompositions.

SubComposeLayout and BoxWithConstraints internals in Jetpack Compose

Jaewoong Eum (Mastodon, Bluesky) also took the time to write about SubcomposeLayout(), how it is implemented, and how other composables like BoxWithConstraints() layer atop of it.

Resource Roundup

100% pure code!

GitHub: terrakok / nav3-recipes

GitHub user terrakok built out a clone of Google’s Nav3 recipes for Compose Multiplatform.

GitHub: skydoves / compose-effects

Jaewoong Eum (again!) (Mastodon, Bluesky) created a RememberedEffect(), which works like LaunchedEffect() but skips the coroutine for efficiency in cases where you do not need it. The library also includes ViewModelStoreScope, allowing you to scope ViewModel to a particular composable, clearing the ViewModel when the composable leaves the composition.

GitHub: Trendyol / komposto

Trendyol has published their design system for Compose for Android, including their own theme and components that use that theme.

GitHub: software-mansion / kmp-sharing

The Software Mansion team has released a library that offers content sharing for Compose Multiplatform, with a simple share() function routing to an Intent on Android and UIActivityViewController on iOS.

Notable Releases

Compose Destinations is up to 2.3.0, with dependency updates, including Compose 1.9.

Compose Unstyled now is out with 1.46.0, adding a new Tooltip() component, along with dependency updates.