jetc.dev Newsletter Issue #305

Published: 2026-03-10

This week, we flex our boxes, go all native on our cameras, and scale our image content. Plus, we assert our recomposition counts and read NFC tags.

Ooooo… What Did We Get?

Reviewing the release notes for the latest Jetpack Compose update!

JetBrains released Compose Multiplatform 1.10.2. This just picks up upstream changes, without any Compose Multiplatform-specific changes.

One Off the Stack, One Off the Slack

You’ve got questions. That’s understandable!

Stack Overflow continues to crumble. 😔

What If I Want List, Detail… And Vertical Detail?

The list+detail pattern for wide adaptive screens is great, and ListDetailSceneStrategy in Nav3 handles that. But, what if you also want list+detail for certain portrait screens, where the list and the detail are split vertically? And, what if you really want both of those options on the same screen? Learn more in this week’s highlighted Kotlinlang #compose-android Slack thread.

Composable Commentary

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

FlexBox

The alpha releases of Compose 1.11 have a new FlexBox() container, based on the CSS Flexible Box Layout spec. Documentation is up, with warnings that the API is likely to change.

Jetpack Compose: Why you shouldn’t use LocalContext for Strings

Katie Barnett reminds us that on a configuration change, LocalContext does not trigger recomposition, but LocalResources does. Hence, if the user changes language while your app is running, using LocalContext will leave you stuck with the older strings.

Medium: Compose-Native CameraX in 2026: The Complete Guide

Ioannis Anifantakis wrote an absolute tome on how CameraX Compose support in Android drastically improved with versions 1.5 and 1.6.

Medium: Handling Android Permissions in Compose — A definitive implementation?

Paul Simmonds grumbles about something that I have been grumbling about since Android added runtime permissions: denials do not distinguish between first-time denials, users dismissing the permission modal, or permanent “stop asking” states. Paul walks through a permission flow that uses shouldShowRequestPermissionRationale to try to handle these scenarios better.

Medium: ContentScale in Jetpack Compose: The Ultimate Visual Guide

Sehaj kahlon explores another thing that irks me: my complete inability to remember how all the ContentScale options work. Sehaj depicts how these work, provides a decision flowchart to help you make your choice, and even explains how their implementations work.

Medium: Why Your ExoPlayer Video Ignores Compose Clipping — And the One-Line Fix That Solves It

Deepak Kumawat reminds us that ExoPlayer/Media3 uses SurfaceView by default, and that will not respect things like clipping, animations, and so forth. Instead, you need to opt into having ExoPlayer use TextureView instead.

My Compose Multiplatform Project Structure

Dalen Johnson (Bluesky) walks us through his project structure for Compose Multiplatform projects. TL;DR: Modules. Modules everywhere!

Is AndroidX ViewModel the best choice for KMP projects?

Gustavo Fão Valvassori (Bluesky) gets at one of my core irritations with the Jetpack ViewModel: it has nothing to do with view models the way the rest of the industry would use the term. In the end, Gustavo still endorses its use for Compose Multiplatform projects… assuming that you are not migrating from native iOS with an iOS team with OPINIONS. 😀

Resource Roundup

100% pure code!

Dejavu

Matt McKenna (Mastodon, Bluesky) created “a test-only library that turns recomposition behavior into assertions”. With a single rule, you can confirm that recompositions matched expectations and fail a test when they do not.

GitHub: 3xcool / Kompass

Andre Filgueiras built a “state-first, testable navigation library” for Compose Multiplatform, supporting iOS, Android, and desktop. It seems to handle a lot of the Nav3 scenarios, including equivalents of strategies, handling process death, multiple navigation graphs, and more.

GitHub: dalafiarisamuel / NfcReaderKMP

Samuel Dalafiari offers us support for NFC reading from our Compose Multiplatform apps, supporting Android and iOS. The Android implementation supports a custom bottom sheet while reading, while the iOS implementation integrates with the system scanning dialog.

GitHub: kaleidot725 / PulseMVI

GitHub use kaleidot725 brings us an MVI implementation for Compose for Desktop, with an eye towards having separate states per screen component (e.g., list versus detail) with ways to update all of them as needed.

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

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!