jetc.dev Newsletter Issue #280

Published: 2025-09-09

This week, we peek at the next alpha of Compose Multiplatform and debate weight() in scrollable containers. We look at conditional layouts and sharing shared element keys. And we explore how we can use composables for audio output.

Ooooo… What Did We Get?

Reviewing the release notes for the latest Jetpack Compose update!

While JetBrains’ works on wrapping up 1.9.0 of Compose Multiplatform, they released the first alpha of 1.10.0. These are based on Compose for Android’s 1.10.0-alpha02 releases, plus makes the new context menu enabled by default and adds a few more “bells and whistles” for iOS and desktop targets.

One Off the Stack, One Off the Slack

You’ve got questions. That’s understandable!

How Can I Play Lottie Animations in Compose Multiplatform?

Lottie is a popular way to describe animations. See how Compottie extends Lottie support to Compose Multiplatform, with an example of using rememberLottieComposition(), in this week’s highlighted Stack Overflow question.

Can I Have weight() in a Scrolling Container?

Right now, weight() on, say, children of a scrollable Column() is likely to leave you with zero height for those children. But if weight() divides up unused space, and a scrollable container can be infinitely large, what does weight() even mean? See the debate, throwbacks to the classic View system, and workarounds in this week’s highlighted Kotlinglang #compose-android Slack thread.

Composable Commentary

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

Unfold new possibilities with Compose Adaptive Layouts 1.2 beta

Google’s Fahd Imtiaz and Miguel Montemayor review the additions in the beta release of Compose Adaptive Layouts 1.2.0, including new layout strategies (e.g., levitate, reflow) and new window size classes.

Medium: Mastering Conditional Layouts in Jetpack Compose: The Flexible Way

Akshat Divekar explores conditional layouts: where you want to render something only if it fits completely. Akshat demonstrates a GenericConditionalLayout(), powered by Layout(), that efficiently identifies which children can be fully rendered and only shows them.

Medium: Injecting Android Context in Compose Multiplatform with Koin

On Android, from time to time, your composables will need access to a Context, but Context does not exist on other platforms. Domen Lanišnik (Bluesky) shows how to set up platform-specific Koin modules to enable a Context to be injected where needed in androidMain code without impacting other platforms.

Sharing Shared Element Keys

Adam McNeilly (Mastodon, Bluesky) loves shared element transitions, but points out that they have issues, such as having synchronized keys between screens. Adam’s solution is to include them as part of “display models” (model objects containing the subset of domain data needed for a given screen).

Resource Roundup

100% pure code!

GitHub: usuiat / Koruri

Atsushi USUI has created a framework for generating audio output using composables, alongside user interfaces. For example, SineWave() is a composable that, inside of a KoruriContent() container, outputs a sine wave audio at a specified frequency.

GitHub: eltonkola / bota

Elton Kola has given us a WorldMap() composable for Compose Multiplatform (Android, iOS, desktop), to allow users to view and select countries on a map.

GitHub: iVamsi / SnapNotify

Vamsi Vaddavalli has created another snackbar framework, designed to simplify both raising and rendering of snackbar-style notices.

Notable Releases

In rapid succession, the Maps for Android team released 6.8.0 and 6.9.0.