jetc.dev Newsletter Issue #263
Published: 2025-04-29
Bang the drum! đ„ Compose for Android 1.8.0
shipped in stable form!
Just in time for next monthâs Google I|O! What a coincidence! đ
This week, we see what made the final cut for 1.8.0
and what the
next alpha looks like. We look at tooltips and ticket shapes. And we
see a rather feature-filled data table implementation.
Ooooo⊠What Did We Get?
Reviewing the release notes for the latest Jetpack Compose update!
The Compose BOMs are up to 2025.04.01
. And the production BOM contains
the 1.8.0
final artifacts! đ
And, as usual, a production release means we got our first alpha for the
next release, 1.9.0-alpha01
. Of note:
-
@Stable
,@Immutable
, and@StableMarker
are now in aruntime-annotation
library, so we can use them in modules that otherwise do not need Compose (e.g., model definitions) -
@FrequentlyChangingValue
lets us denote things that should not be called directly in a composition, for performance reasons -
@RememberInComposition
says âhey, you need toremember()
thisâ -
AnnotatedString
has a new API for custom bullet lists -
clickable()
,combinedClickable()
,selectable()
,toggleable()
, andtriStateToggleable()
require the use of anIndicationNodeFactory
inLocalIndication
, if you are not passing in anIndication
parameter -
A
keepScreenOn()
modifier was added
There were many other changes introduced in this alpha, so 1.9.0
is shaping up to be a rather large release.
Wear Compose is up to 1.5.0-alpha14
, migrating a bunch of stuff from foundation
to material
.
And, in Compose-related libraries, we got the following updates:
androidx.activity:activity-compose:1.11.0-rc01
androidx.lifecycle:lifecycle-runtime-compose:2.9.0-rc01
androidx.lifecycle:lifecycle-runtime-compose-android:2.9.0-rc01
androidx.lifecycle:lifecycle-runtime-compose-jvmstubs:2.9.0-rc01
androidx.lifecycle:lifecycle-runtime-compose-linuxx64stubs:2.9.0-rc01
androidx.lifecycle:lifecycle-viewmodel-compose:2.9.0-rc01
androidx.lifecycle:lifecycle-viewmodel-compose-android:2.9.0-rc01
androidx.lifecycle:lifecycle-viewmodel-compose-jvmstubs:2.9.0-rc01
androidx.lifecycle:lifecycle-viewmodel-compose-linuxx64stubs:2.9.0-rc01
androidx.navigation:navigation-common-linuxx64stubs:2.9.0-rc01
androidx.navigation:navigation-compose:2.9.0-rc01
androidx.navigation:navigation-compose-android:2.9.0-rc01
androidx.navigation:navigation-compose-jvmstubs:2.9.0-rc01
androidx.navigation:navigation-compose-linuxx64stubs:2.9.0-rc01
androidx.navigation:navigation-fragment-compose:2.9.0-rc01
androidx.savedstate:savedstate-compose:1.3.0-rc01
androidx.savedstate:savedstate-compose-android:1.3.0-rc01
androidx.savedstate:savedstate-compose-jvmstubs:1.3.0-rc01
androidx.savedstate:savedstate-compose-linuxx64stubs:1.3.0-rc01
Plus, JetBrains released 1.8.0-rc01
of Compose Multiplatform,
inching us close to a matching production release to Compose for
Android.
One Off the Stack, One Off the Slack
Youâve got questions. Thatâs understandable!
Where Did My Nav Graph Go?
rememberNavController()
is easy⊠perhaps too easy. With Navigation
for Compose you need to be careful about when and where you create
your NavController
instances, as we see in this weekâs highlighted
Stack Overflow question.
How Can I Write This Modifier Using Nodes?
There are (at least) three ways to write modifiers that are themselves
composable: @Composable
functions, the composed()
factory, and
Modifier.Node
. The latter is the most performant, but it is rather
verbose compared to the others,
as we see in this weekâs highlighted Kotlinlang #compose
Slack
thread.
Composable Commentary
Posts, videos, and other new information related to Jetpack Compose!
Whatâs new in the Jetpack Compose April â25 release
Googleâs Jolanda Verhoef
(Mastodon, Bluesky)
reviews the contents of Compose for Android
1.8.0
, including the long-awaited support for autoSize
in BasicText()
,
better autofill support, the new animateBounds()
modifier, and more.
Medium: Tooltips in Compose Material 3
Domen LaniĆĄnik walks us through plain and rich tooltips in Compose Material3,
powered by the TooltipBox()
composable. Domen also reviews what changed
in the 1.4.0
alpha releases that impact tooltips.
Medium: Technical Deep Dive: Custom Path Drawing for Ticket Shapes in Jetpack Compose
Paper tickets â the classic kind that you tear off of a roll â
have a deceptively complex shape, with rounded corners and semi-circular
notches on the ends. Abdul Mughni leveraged Bézier curves to create a
Shape
implementation for tickets and shows us how to make it work.
Medium: Understanding the Box Model in Jetpack Compose: Whereâs My Modifier.margin?
A common question for newcomers to Compose from classic Views is âwhere
do I define a margin?â. Sumeet Panchal takes us through the box model
employed by Compose and explains how one accomplishes the sorts of designs
that used to use the various margin
attributes in layout XML.
Other Interesting Links
- Medium: Adding Localization Support in Compose Multiplatform
- Medium: April â25 Jetpack Compose Drop: My Favorite New Features
- Medium: At the Mountains of Madness with Jetpack Compose
- Medium: Best Practices to Handle Side Effects in Jetpack Compose
- Medium: Building an Animated Stacked Bar Chart in Jetpack Compose
- Medium: Compose Multiplatform: A Practically-Native Example: part 2!
- Medium: Creating a Smooth and Animated Pager in Jetpack Compose
- Medium: From Lag to Lightning: Real-World Wins with Baseline Profiles in Android
- Medium: Getting Started with Media3-UI-Compose: Compose UIs for Media Playback
- Medium: Kotlin Multiplatform in 2025 â How Android Developers Can Build for iOS Too
- Medium: Level Up Your Videos: Reusable ExoPlayer in Jetpack Compose!
- Optimizing Android Performance With Jetpack Compose
- Slides: Your app at a Glance: App Widgets in Compose
Resource Roundup
100% pure code!
GitHub: ryinex / compose-table
GitHub user ryinex brings us a DataTable()
composable offering a two-dimensional
scrolling grid, with resizable columns, sticky headers, in-cell editing,
custom cell rendering, and more! Better still, this Compose Multiplatform
table supports Android, iOS, desktop, and Web.
GitHub: isakaro / kwik-ui-android
GitHub user isakaro is building out a massive library of composables, from accordions and filter chips to rating bars and timelines.
GitHub: shprotx / Custom_Sliders
Arturka Arturka brings us a few slider composables, including a color picker and a two-value slider.
Other Interesting Links
- GitHub: abdulrahman-b0 / HijriDatePicker (date picker for Hijri calendar)
- GitHub: FraRo96 / composations (streaming-based animation framework)
Notable Releases
Maps for Compose is up to 6.6.0
,
adding an attribution ID.
Compose Unstyled is out with 1.28.0
,
adding a Button()
component. This follows a blizzard of point releases
that added progress indicator, radio group, toggle switch, and text
components.
Or, you can subscribe to the Atom feed or follow Mark Murphy in the Fediverse.
Recent Issues:
- 2025-04-29: Compose 1.8.0 released! First 1.9.0 alpha! Tooltips! Paths! Tables! And... is Modifier.Node too complicated?!?
- 2025-04-22: Paging! Accessibility! Tooltips! Effects! And... Amazon has *another* app platform?!?
- 2025-04-15: Compose RC! Compose Multiplatform beta! Cameras and tabletops! Effect handlers! YouTube players! Other types of media players! And... are screenshot tests worth it?!?