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.
Other Interesting Links
- Medium: Add Jetpack Compose inside XML layouts (step-by-step)
- Medium: Android Autofill From XML Views to Jetpack Compose
- Medium: Clean and Scalable MVI Architecture for Compose Multiplatform
- Medium: CMPContactManager: Dealing with contacts made easy in Compose Multiplatform
- Medium: Enable Preview in Compose Multiplatform (No workaround seriously)
- Medium: Jetpack Compose Performance: Advanced Optimization Guide
- Medium: Mastering Collapsing Toolbar with Jetpack Compose — The Modern Way (Material 3 + LazyColumn)
- Medium: Mastering Modal Bottom Sheets in Jetpack Compose: Dynamic Interactions with Material 3
- Medium: Modern UIs with Jetpack Compose: Your Complete Guide to Background Modifiers and Beautiful Visual Effects
- Medium: Nav3 Router: Convenient Navigation on Top of Jetpack Navigation 3
- Medium: Reducing Unnecessary Recompositions: 3 Practical Optimisation Techniques for Jetpack Compose
- Medium: Single vs Multiple StateFlows in Jetpack Compose
- Medium: Stop Event-Drilling in Jetpack Compose with Composition Locals
- Medium: The Jetpack Compose Performance Pitfall No One Talks About
- Medium: ViewModel Scoping in Jetpack Compose
- Video: Compose Your Mobile App With GraphQL
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.
Other Interesting Links
- GitHub: ch4rl3x / compose-cache (
rememberForUserInput()
for Compose Multiplatform) - GitHub: developerchunk / JetCo (Compose Multiplatform widget library, see this Medium post)
- GitHub: jermeyyy / quo-vadis (type-safe navigation for Compose Multiplatform)
- GitHub: karya-inc / Waveform (visualize waveforms in Compose Multiplatform)
- GitHub: lordtao / android-tao-bubbles (tooltips for Compose for Android)
- GitHub: xoim / evolpagink (Compose-friendly paging for Compose Multiplatform)
- GitHub: OShane-McKenzie / Conductor (animations for Compose for Android)
- GitHub: RevenueCat / placeholder-compose (shimmer placeholders for Compose Multiplatform)
- GitHub: TuleSimon / XCalendar (linear and grid calendars for Compose for Android)
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.
Or, you can subscribe to the Atom feed or follow Mark Murphy in the Fediverse.
Recent Issues:
- 2025-10-07: Nav graph diagrams! Native code in Compose Multiplatform! Modifier.Node API! Multiplatform maps! And... how do we bust drawWithCache()?!?
- 2025-09-30: New patch releases and alphas of Compose and Wear Compose! Material Symbols! MapLibre! Floating action menus! And... what if I want 2 or 4, but not 3?!?
- 2025-09-23: Compose Multiplatform 1.9.0! Shadows! Clipping and masking! Desktop window sizes! And... can we improve our stability?!?