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:

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.

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.

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.

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.