jetc.dev Newsletter Issue #283
Published: 2025-09-30
We have new patch releases and new alphas of Compose and Wear Compose, plus a stable Compose Material3 release!
Beyond that, we look at Material Symbols, MapLibre for Compose Multiplatform, and floating action menus. Plus, we see an Illustrator-compatible image-tiling modifier for Compose Multiplatform, and we see how to set up rows that are responsive but with constraints on how many items can be in the row.
Ooooo… What Did We Get?
Reviewing the release notes for the latest Jetpack Compose update!
The Compose BOMs are up to 2025.09.01
. The production BOM mostly contains 1.9.2
patch releases, mostly to fix some bugs in onVisibilityChanged()
.
The alpha BOM mostly points to 1.10.0-alpha04
releases. The changes include:
-
A new
RetainScopeHolder
to organizeRetainScopes
with different retention periods -
A new
RetainedEffect
, akin toDisposableEffect
but tied to the retention lifecycle -
Adding
ScrollIndicatorState
to things likeLazyListState
andScrollState
-
Adding
onVisibilityChangedNode()
for building modifiers atoponVisibilityChanged()
Compose Material3 1.4.0
is out, representing a new stable release.
Wear Compose has a 1.5.2
patch release, with a few bug fixes. Wear Compose
also has a 1.6.0-alpha02
release, adding text-warping support in CurvedTextStyle
.
Finally, these Compose-related artifact updates were released:
androidx.activity:activity-compose:1.12.0-alpha09
androidx.lifecycle:lifecycle-runtime-compose:2.10.0-alpha04
(and multiplatform targets)androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0-alpha04
(and multiplatform targets)androidx.navigation:navigation-compose:2.9.5
(and multiplatform targets)androidx.navigation:navigation-fragment-compose:2.9.5
androidx.navigationevent:navigationevent-compose:1.0.0-alpha09
(and multiplatform targets)
One Off the Stack, One Off the Slack
You’ve got questions. That’s understandable!
Why Does My Enum Argument Crash Nav on iOS?
Sometimes, @Serializable
apparently is not enough for an enum class
to be usable
directly, without a custom NavType
. At least in some cases, it will work on Android
but not on iOS, crashing with a could not find any NavType for argument
error. See an example,
and how to work around the problem, in this week’s highlighted Stack Overflow question.
How Can I Have Exactly 2 or 4 Items Per Row?
FlowRow()
is great for responsive UIs, as it can readily adapt to the available width.
However, FlowRow()
assumes that you can have an arbitrary number of items per row.
Suppose you have constraints, such as there needs to be either 2 or 4 items per row,
depending on whether 4 will fit. See some possible solutions in this week’s highlighted
Kotlinlang #compose
Slack thread.
Composable Commentary
Posts, videos, and other new information related to Jetpack Compose!
The Icons Are Dead, Long Live the Icons!
In Mastodon and Bluesky,
Google’s Rebecca Franks points out that
androidx.compose.material.icons
has been discontinued and steers developers towards
Material Symbols. FWIW, last week’s newsletter had an item
about a Gradle plugin for importing Material Symbols.
Medium: Exploring 5 Lesser-Known Compose Components
Domen Lanišnik (Bluesky) walks us through a few Compose Material3 composables that designers might have missed, such as tri-state checkboxes, segmented buttons, and range sliders.
Medium: Maps with Compose Multiplatform Part 1
Youssef Mohamed spends a couple of posts (Part 2) showing how to integrate MapLibre for Compose into a Compose Multiplatform project.
Exploring Material 3 for Compose: Floating Action Button Menu
Joe Birch
(Mastodon)
gives us a quick tour of FloatingActionButtonMenu()
for the FAM pattern,
where tapping a floating action button (FAB) opens up a menu of buttons to choose from.
Other Interesting Links
- Medium: Building a Real-Time Analog Clock in Jetpack Compose
- Medium: Building a Reusable Vertical Grid in Jetpack Compose
- Medium: Mastering Canvas in Jetpack Compose: Drawing Shapes (Part 1)
- Medium: Server-Driven UI in Compose Multiplatform: contracts, schema-first codegen, partial updates
- Medium: The Magic Trick That Makes Compose Previews Actually Fun
- Medium: Use @Stable and @Immutable in core modules — No Compose Runtime Required
- Medium: Writing previews for Compose Multiplatform
Resource Roundup
100% pure code!
GitHub: Infinite-Retry / Cwackers
GitHub user Infinite-Retry brings us a tiledBackground()
offering a variety of tiling
modes for image tiling, with an objective of better matching tiling modes defined in
Adobe Illustrator. This library supports all major Compose Multiplatform platforms.
Other Interesting Links
- GitHub: eygraber / seymour (“see more” text composable)
- GitHub: hossein-no1 / compose-multiplatform-linechart (line chart for Android/iOS/desktop)
- GitHub: lokile / compose-animated-border (
animatedBorder()
modifier) - GitHub: StarkDroid / compose-ShadowGlow (
shadowGlow()
modifier)
Notable Releases
Maps for Compose is up to 6.11.0
,
with a few minor improvements.
Molecule released 2.2.0
,
beginning the migration to the multiplatform AndroidX Compose runtime.
Or, you can subscribe to the Atom feed or follow Mark Murphy in the Fediverse.
Recent Issues:
- 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?!?
- 2025-09-02: Stable Wear Compose! Compose alpha! Compose Multiplatform RC! Shadows! Nav3! And... why does rotate() behave strangely?!?