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. 😀
Other Interesting Links
- Architecting TwoFac: My Journey into Kotlin Multiplatform Module Structure
- Compose Drawing Mastery - Part 2 - Transformations
- How Do You Extend Jetpack Compose Components Without Making Them Messy?
- Medium: Animation Preview for ProgressBar
- Medium: collectAsState vs collectAsStateWithLifecycle in Jetpack Compose
- Medium: Constraints in Jetpack Compose
- Medium: E2E Testing for Android with Jetpack Compose: A Practical Guide
- Medium: Jetpack Compose: Managing State in Deeply Nested Composables
- Medium: Memory Leaks You Probably Missed in Jetpack Compose
- Medium: Motion Blur for a Spinning Wheel in Jetpack Compose
- Medium: PhysicsBox. Adding physics to compose driven projects
- Medium: Stop Prop Drilling in Jetpack Compose: A Practical Guide to CompositionLocal
- Workshop: Choosing Your Compose Multiplatform Navigation Stack
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.
Other Interesting Links
- GitHub: aylar23 / ChartingLib (line, bar, pie 🥧, and donut 🍩 charts for Compose for Android)
- GitHub: Chen-Xi-g / MultiplatformUI (swipe button for Compose Multiplatform)
- GitHub: platacard / PagerIndicator (dot and worm pager indicators for Compose for Android)
- GitHub: wayfair-incubator / compose-lazy-adaptive-layout (adaptive grid layout for Compose for Android)
Recent Issues:
- 2026-02-24: Reducing development friction! Line graphs! CMP IDE plugin! Syntax highlighting! And... can we *finally* get rid of ViewModel?!?
- 2026-02-17: Compose patch release and alpha release! Compose Multiplatform patch release! Bottom sheets! Colors and accessibility! And... can we work with Glance?!?
- 2026-02-10: AI! Orchestration composables! Stability! Instant Compose!