jetc.dev Newsletter Issue #304

Published: 2026-03-03

A lot of Compose artifacts got updates, along with a Compose Multiplatform alpha release, so we dive in!

We also explore the upcoming Compose style API and find a practical use for a linked list. Plus, we see a LaTeX renderer for Compose Multiplatform.

Ooooo… What Did We Get?

Reviewing the release notes for the latest Jetpack Compose update!

The main production Compose artifacts are up to 1.10.4, containing bug fixes. The main Compose artifacts also have a 1.11.0-alpha06 release, formally announcing the experimental styles API but otherwise not adding a lot of note.

Compose Material3 is out with 1.5.0-alpha15. This adds a new scrim component and a “standalone static sheet component”. It also reworks MaterialTheme to use a single composition local for theme data, which will require some code changes. Also, some horizontalSpacing parameters were converted to horizontalArrangement, among many other API changes.

Nav3 brings us 1.1.0-alpha05. Of note, they eliminated the SceneStrategy then() infix function, replacing it with a NavDisplay that takes a List<SceneStrategy>.

In smaller releases:

Wear Compose is up to 1.6.0-beta01, hinting that we may get a stable release in the next few months.

We also got:

  • androidx.activity:activity-compose:1.13.0-rc01
  • androidx.camera:camera-compose:1.6.0-rc01
  • androidx.camera.viewfinder:viewfinder-compose:1.6.0-rc01
  • androidx.lifecycle:lifecycle-runtime-compose:2.11.0-alpha01 (and multiplatform targets)
  • androidx.lifecycle:lifecycle-viewmodel-compose:2.11.0-alpha01 (and multiplatform targets)
  • androidx.media3:media3-ui-compose:1.10.0-beta01
  • androidx.media3:media3-ui-compose-material3:1.10.0-beta01
  • androidx.navigationevent:navigationevent-compose:1.1.0-alpha01 (and multiplatform targets)
  • androidx.pdf:pdf-compose:1.0.0-alpha14
  • androidx.xr.compose:compose:1.0.0-alpha11
  • androidx.xr.compose:compose-testing:1.0.0-alpha11
  • androidx.xr.compose.material3:material3:1.0.0-alpha15

Finally, JetBrains released Compose Multiplatform 1.11.0-alpha03. One breaking change of note: navigation-common and navigation-runtime used to provide androidx.collection as a transitive dependency, but no more.

One Off the Stack, One Off the Slack

You’ve got questions. That’s understandable!

Why Is My Text Alignment Off in My Canvas?

Whether it is with TextMeasurer or a simple ruler, if you measure one thing but use another, you may run into problems. Learn more in this week’s highlighted Stack Overflow question.

Can I Use GraalVM for Compose for Desktop?

Compose for Desktop apps usually use the JetBrains Runtime (JBR) environment, but at least on Windows using GraalVM can significantly improve memory use. Learn how to set this up and the pros/cons of various approaches in this week’s highlighted Kotlinlang #compose-desktop Slack thread.

Composable Commentary

Posts, videos, and other new information related to Jetpack Compose!

The Compose Styles API: Building 8 Labs to Master Declarative Styling

Adit Lal (Mastodon, Bluesky) takes a deep dive into the upcoming styles API for Compose, giving us Style and a styleable() modifier to greatly simplify scenarios like applying shapes and background colors, both statically and in animated responses to user input like click events.

Adding Navigation support to Large Content Viewer with Compose

Eevis Panula (Mastodon, Bluesky) follows up her previous post on adapting an iOS accessibility trick to Compose. This time, Eevis explores adding accessibility to her solution, so keyboards, screen readers, and voice assistants can work with the large content viewer.

Medium: The “Invisible Performance Killer”: A Deep Dive into Jetpack Compose Stability

Ahmed Nabil explores the ever-popular problem of reducing unnecessary recompositions, including the lesser-known technique of using stabilityConfigurationFile to indicate stable types en masse.

Simplest Nav2 to Nav3 Migration Guide

Jov Mit (Mastodon, Bluesky) quickly walks us through how to move a code base using Navigation for Compose from Nav2 to Nav3. This includes adding NavKey marker interfaces, switching from NavController to a NavBackStack, replacing NavHost() with NavDisplay(), and more.

From Gap Buffer to Linked List: How Compose Rewrote Its SlotTable for Faster Recomposition

Jaewoong Eum (Mastodon, Bluesky) wrote about an internal Compose change, tied to how Compose tracks compositions. As a side benefit, you finally get to see how a linked list gets used in production, given all those times you were asked to reverse one in job interviews… 😉

Resource Roundup

100% pure code!

GitHub: oleginvoke / composium

GitHub user oleginvoke is building a Storybook-style scene browser for Compose for Android. You can view these preview-style UI elements running live in your app, with editable parameters, as a playground for your design system, etc.

GitHub: huarangmeng / latex

GitHub user huarangmeng has created a LaTeX renderer for Compose Multiplatform, supporting all targets. It includes image export, screen reader support, and an experimental LaTeX editor.

GitHub: meetOzan / Springy

Mert Ozan Kahraman is working on a library of modifiers for simple animations, like shakeVertical(), heartBeatEffect(), wiggle(), and spin().

GitHub: flaringapp / ComposeCollapsingTopBar

GitHub user flaringapp offers us a CollapsingTopBarScaffold() for Compose Multiplatform, supporting Android and iOS. It provides automatic height adjustment, various scroll modes, snapping, and lots of customization options.

Notable Releases

Maps for Compose is up to 8.2.0, which “added Clustering decoration”, so we can avoid boring clusters.

Coil is out with 3.4.0, with better support for JS/WASM and Linux, a new ConcurrentRequestStrategy, and lots more!

Featured here? Please add this badge to your article or repo! As Seen In - jetc.dev Newsletter Issue #304

Powered by Buttondown

Or, you can subscribe to the Atom feed or follow Mark Murphy on Mastodon or Bluesky.

Spread the Word!
Suggestions?
If you have ideas for items for future newsletter editions, reach out via email or contact Mark Murphy on kotlinlang Slack!