jetc.dev Newsletter Issue #328
Published: 2026-08-25
This week, we look at how API modules and composables interact and why your LazyColumn() might throw “measure is called on a deactivated node”. Plus, we see a Compose “select and copy text” for images and videos implementation, and we take a peek at Alex Styl’s latest creation!
One Off the Stack, One Off the Slack
You’ve got questions. That’s understandable!
How Can I Fake a Text Field?
While the question is more about having both InputTransformation and OutputTransformation on a BasicTextField(), the accepted answer gets at the core of the issue. The developer is trying to make a text field using a custom numeric keypad… in which case, BasicTextField() just gets in the way, and you are better served using Text() and simply rendering to resembled a text field. Learn more in this week’s highlighted Stack Overflow question, the first in quite some time!
How Many Recompositions Am I Making?
Partly, this is a question about terminology: if three composables recompose as a result of some state change, is that one recomposition or three? 🧐 Partly, this is a question about batching of state changes, and whether changing three separate State objects will result in three separate recompositions or just one? Learn more in this week’s highlighted Kotlinlang #compose Slack thread.
droidcon USA 2026
droidcon USA 2026 had several presentations related to Jetpack Compose, including:
- Build Custom Design Systems with Jetpack Compose’s New Styles API
- Compose Multiplatform: Better Shared UI for iOS and Beyond
- Debugging Using Remote Compose, Made Easy with Livewire
- Deep Dive into Compose Semantics
- From Zero to Multiplatform: Building a Charts Library in 15 Days
- How We Built the Android Design System for The New York Times
- Mastering Jetpack Compose Glimmer for AI Glasses
Composable Commentary
Posts, videos, and other new information related to Jetpack Compose!
Medium: Sharing Feature-Based Composables Through API Modules
Humbet Humbetov explores what it would take to have a composable API without forcing a dependency on how that API does what it does. Humbet demonstrates using an interface with a @Composable function to serve as the API, allowing that API to be in an api module while an impl module can handle the actual rendering.
Medium: From Screens to Components: Building a Scalable Codebase in Jetpack Compose
Mathieu Perroud writes about how we can best divide up a composable screen into reusable components, by organizing the screen into sections and leaves, creating stateless composables for the leaves, and adopting a state-in/actions-out API for sections.
Medium: The press animation that never plays on a fast tap
Medium user Devsnack points out a limitation of using animateFloatAsState() to animate based on pressed state: a press is very short, so the animation does not animate very long. Reworking the logic to consider “pressed” to be a series of events leads to better results, allowing the animation to proceed to completion.
Medium: Jetpack Compose LazyColumn Crash: “measure is called on a deactivated node” — Root Cause and Fix
Swaran Singh Aulakh investigates “measure is called on a deactivated node”, which pops up as an IllegalArgumentException message sometimes when using lazy containers. At first glance, it will appear to be a framework issue, but it really stems from how well the app handles item lifecycle in lazy containers.
Other Interesting Links
- Lights Out: Automatic Skeleton Loading in Compose Multiplatform
- Medium: Compose Just Fixed Text Fields for Good (Here’s the Mental Model Shift)
- Medium: From Click to State: the Store/Action Pattern Behind a Compose Multiplatform App
- Medium: Fun Animations with Mesh Gradients: Jetpack Compose 1.12
- Medium: How To Read The Photo Library In Kotlin Multiplatform (KMP)
- Medium: Keep UI-Only Operations in Compose Extensions
- Medium: Your Navigation Bug Has a Delay Fuse
Resource Roundup
100% pure code!
GitHub: konvenant / K-Detect
GitHub user Konvenant created a Compose for Android library that allows “select and copy text” for arbitrary content, powered by ML Kit Text Recognition on the device. Use KDetectImage() for images and KDetectSurface() for paused video frames and the like.
GitHub: dbjpanda / kwery
Dibyajyoti Panda created a data caching framework for Compose for Android, modeled after TanStack Query, designed to handle refresh policies and the like for you. This suite includes a kwery-compose artifact with a rememberQuery() option for caching directly inside of a composable.
Compose Gradients
Alex Styl
is working on a site that lets you choose a gradient and get the Compose code for a Brush that renders the gradient.
Other Interesting Links
- GitHub: bodenberg / appdimens-kmp (scalable dimension values for Compose Multiplatform)
- GitHub: DeveloperSyndicate / Valix (data validation via annotations, with a Compose bridge, for Compose for Android)
- GitHub: tharukack / countrycodekit (country/calling code picker for Compose for Android and iOS)
Notable Releases
Maps for Compose is up to 8.5.0, with more info window customization, plus bug fixes.
A Very Particular Set of Skills
Adding Compose capabilities to your coding agents!
Here are two more skill libraries for Compose development:
Recent Issues:
- 2026-08-11: Why we sometimes still need to think about stability! Compose Desktop/Web test bridge! Android debugger for coding agents! And... Places, everyone?!?
- 2026-08-04: Compose 1.0 five-year anniversary! 1.12.0 RC! Memory leaks! Remote Compose for debugging! And... have you been through the desert with a state with no name?!?
- 2026-07-28: PinnableContainer! End-to-end testing! Accessibility scanner! Docked panels! Photo editing! And... do we *really* need Canvas() everywhere?!?