jetc.dev Newsletter Issue #284
Published: 2025-10-07
This week, we look at diagramming a nav graph, native code in Compose Multiplatform
projects, and the Modifier.Node
API. We also see a multiplatform maps wrapper and a
form management library. Plus, I wrestle with drawWithCache()
, to control when we
need to clear the cache and re-render.
One Off the Stack, One Off the Slack
You’ve got questions. That’s understandable!
There were no interesting answered Stack Overflow questions this past week. 😞
Modifiers in the Middle?
The Kotlinlang #compose
channel had a debate over whether to follow the standard
Compose API guidelines and have the modifier
parameter be the first optional parameter
in a composable’s parameter list.
droidcon Berlin 2025
droidcon Berlin 2025 had a few presentations related to Compose, including:
- Adapting Android Apps for Multiple Screens
- The Easing Symphony: AnimationSpec in detail!
- Navigating the future with Jetpack Navigation 3
Composable Commentary
Posts, videos, and other new information related to Jetpack Compose!
Medium: Visualizing Compose Navigation with Kotlin Compiler Plugin
Jimly Asshiddiqy created a compiler plugin to take a Nav for Compose navigation graph and turn it into a Mermaid, so you can better see how the navigation flows. Note that this plugin is for Nav2, not Nav3.
Medium: Recipe: Links in Selectable Compose Text
SelectionContainer
can work with LinkAnnotation.Url
, but by default, a long-press
triggers the link rather than allowing for text selection. Andrii Seredenko demonstrates
how to work around this issue.
Medium: Why Your Compose Multiplatform App Still Needs Native Code
Suhyeon Kim points out that while Compose Multiplatform is great, it only goes so far. Eventually, you will find the need to interoperate with some bits of SwiftUI (e.g., from a library) or tie into other native APIs, and this post walks through some concrete examples of how to accomplish that.
Accessing native macOS API in Compose Multiplatform
Marco Gomiero (Mastodon, Bluesky) also writes about working with native APIs in Compose Mulitplatform projects, in this case how to access iCloud on macOS as part of a Compose for Desktop project. Marco used Kotlin/Native and walks us through the setup to get that working.
Medium: The Art of Shadows in Jetpack Compose
Stefano Natali
Bluesky
explores the new shadow APIs added in Compose 1.9, including
the dropShadow()
and innerShadow()
modifiers. This includes various options like
custom shapes and colors, plus animated effects.
Exploring Modifier.Node for creating custom Modifiers in Jetpack Compose
Speaking of modifiers, Jaewoong Eum
(Mastodon, Bluesky)
looks at three options for creating custom
modifiers: Modifier.then()
, Modifier.composed()
, and the more-recent Modifier.Node
API. The latter has the best performance, but it is not quite as straightforward to
use.
Medium: Pulse Indicator in Jetpack Compose: Ready-to-Use @Composable
Sometimes, you will see a UI element with radiating rings, suggesting some sort of radio signal or wireless connection. Anatolii Frolov demonstrates how to build one, without using standard Compose animation APIs.
Busting drawWithCache() in Compose
drawWithCache()
definitely caches what was drawn, but sometimes you need to force
cache invalidation. In this post, I explore why that may be needed and one way to
bust the cache.
Other Interesting Links
- Jetpack Compose Animations: A Complete Guide for Android Developers
- Medium: 3 Hidden Compose Monsters That Are Secretly Slowing Your App
- Medium: Custom MaterialTheme in Compose
- Medium: Dynamic Pagination Bars in Compose Multiplatform
- Medium: Getting Started with UI Tests in Jetpack Compose
- Medium: Handling UI State In Compose like a Pro : Part 2
- Medium: Jetpack Compose Performance Cookbook (Part 2): The Hidden Performance Killer That Cost 22% of Our Main Thread
- Medium: Morphing Blobs with Jetpack Compose: From Circle to Organic Waves
- Medium: Side-Effects in Jetpack Compose
Resource Roundup
100% pure code!
GitHub: software-mansion / kmp-maps
The Software Mansion team has created a Compose Multiplatform wrapper around Maps for Android and Apple Maps on iOS, so you can display maps, markers, lines, and polygons for both mobile platforms from one code base.
GitHub: i-Cell-Mobilsoft-Open-Source / CarlosFormito
GitHub user i-Cell-Mobilsoft-Open-Source is working on a form management library, with a set of form-related composables (e.g., for text fields) and an overall manager for validation strategies. See this Medium post for more.
GitHub: PatilParas05 / AsyncPic
Patil Paras is building a wrapper around Coil to add gesture support, loading states, transformations, and more as part of an image-loading process.
Other Interesting Links
- GitHub: eidam-slices / material-pickers (horizontal and vertical pickers for Compose for Android)
- GitHub: faridsolgi / Persian-Date-picker-kotlin-multiplatform (Compose Multiplatform Persian date picker)
Notable Releases
Maps for Compose is up to 6.12.0
,
with improvements to “GoogleMapsInitializer error handling and retries”.
Compose Unstyled is out with 1.45.0
,
adding defaultComponentInteractiveSize
and removing Dokka.
Or, you can subscribe to the Atom feed or follow Mark Murphy in the Fediverse.
Recent Issues:
- 2025-09-23: Compose Multiplatform 1.9.0! Shadows! Clipping and masking! Desktop window sizes! And... can we improve our stability?!?
- 2025-09-16: Compose patch and alpha! Wear Compose patch and alpha! Compose Multiplatform RC! Visibility! Compose without an Activity! And... what is 'remote Compose'?!?
- 2025-09-09: Compose Multiplatform alpha! weight()! Conditional layouts! Shared element keys! And... composables for audio?!?