jetc.dev Newsletter Issue #306

Published: 2026-03-17

We have a new production Compose patch release, our first 1.11.0 beta release, and a new Compose Multiplatform alpha, among other goodies from Google and JetBrains!

In addition to those, we look at recomposition testing and recomposition budgets, preview sandboxes and preview implementations, a Markdown editor composable, and a macOS 26 design system.

Plus, we see that it is time for us to take action regarding “Time to Take Action”. Though I wonder, does anyone really know what time it is?

Ooooo… What Did We Get?

Reviewing the release notes for the latest Jetpack Compose update!

Time marches on, and so do the Compose BOMs, which are up to 2026.03.00. The production BOM points mostly to the 1.10.5 patch release, which contains a few bug fixes.

The beta BOM points to 1.11.0-beta01, suggesting that we might get a stable 1.11.0 in time for Google I|O 2026. The beta contains:

  • A bunch of changes to pointer input, probably with an eye towards trackpads
  • A new rememberUpdateStyleState() for the experimental Style API
  • Changes to the FlexBox() DSL, moving to functions rather than properties for configuration
  • A new PreviewWrapper for, um, wrapping previews
  • Support for constrained sharing of font-related objects, like FontLoader and FontFamilyResolver
  • Support for rendering dialogs and popups from services via a custom windowToken and windowType
  • Support for an experimental media query API, apparently for CSS-style declarative adaptive UI approaches

Remote Compose is up to 1.0.0-alpha06, adding experimental support for TextStyle, along with a bunch of other new APIs.

In Compose-related artifacts, we now have:

  • androidx.activity:activity-compose:1.13.0
  • androidx.camera:camera-compose:1.7.0-alpha01
  • androidx.camera.viewfinder:viewfinder-compose:1.7.0-alpha01
  • androidx.ink:ink-authoring-compose:1.1.0-alpha01
  • androidx.ink:ink-authoring-compose-android:1.1.0-alpha01
  • androidx.ink:ink-brush-compose:1.1.0-alpha01
  • androidx.ink:ink-brush-compose-android:1.1.0-alpha01
  • androidx.ink:ink-geometry-compose:1.1.0-alpha01
  • androidx.ink:ink-geometry-compose-android:1.1.0-alpha01
  • androidx.lifecycle:lifecycle-runtime-compose:2.11.0-alpha02 (and multiplatform targets)
  • androidx.lifecycle:lifecycle-viewmodel-compose:2.11.0-alpha02 (and multiplatform targets)
  • androidx.media3:media3-ui-compose:1.10.0-rc01
  • androidx.media3:media3-ui-compose-material3:1.10.0-rc01
  • androidx.navigation:navigation-compose:2.10.0-alpha01 (and multiplatform targets)
  • androidx.paging:paging-compose:3.4.2 (and multiplatform targets)
  • androidx.paging:paging-compose:3.5.0-alpha01 (and multiplatform targets)
  • androidx.pdf:pdf-compose:1.0.0-alpha15
  • androidx.savedstate:savedstate-compose:1.5.0-alpha01 (and multiplatform targets)

Finally, JetBrains released 1.11.0-alpha04 of Compose Multiplatform. If you directly reference Shader, you might have some minor(?) breaking changes. Also, Kotlin/Wasm support now requires Kotlin 2.3.10 or newer. You can opt into native iOS text input as the backing implementation of BasicTextField(). Also, Key.Home is being replaced by Key.MoveHome, a few other things were renamed, etc.

One Off the Stack, One Off the Slack

You’ve got questions. That’s understandable!

What’s Up with Desktop Window Insets?

Come for the discussion of providing custom window insets on Compose for Desktop, such as for transparent macOS title bars. Stay for the discussion of Jewel (JetBrains’ design system for Compose for Desktop) and what the right way is to build Compose for Desktop UIs.

Composable Commentary

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

TikTok reduces code size by 58% and improves app performance for new features with Jetpack Compose

Google’s Ajesh R Pai and Ben Trengrove provide a brief overview of TikTok’s recent migration to Compose and their results.

Exploring CompositionLocal API internals in Jetpack Compose

Shreyas Patil (Mastodon, Bluesky) takes a deep dive into composition locals, from compositionLocalOf() and CompositionLocalProvider, to the decisions between dynamic and static composition locals, to lesser-known elements like CompositionLocalContext.

Introducing Dejavu: Recomposition Testing for Jetpack Compose

Matt McKenna (Mastodon, Bluesky) writes about DejaVu, which I mentioned in last week’s issue. This library helps you write tests to validate how much recomposition is going on, so you can better detect if changes to your composables cause your recomposition counts to skyrocket.

Introducing Rebound: context-aware recomposition budgets for Compose

Adit Lal (Mastodon, Bluesky) is interested in the same issue of recomposition counts, but from a slightly different angle: what is an appropriate number of recompositions, given the role of a specific composable? To that end, Adit is building Rebound, which combines a Kotlin compiler plugin and an Android Studio plugin to help you set budgets for recomposition counts and find out when you exceed those budgets.

Medium: Stop Writing 20 @Preview Functions — Build a Runtime Sandbox Instead

George Karanikolas (Bluesky) is taking advantage of interactive previews to provide us with a PreviewSandbox() composable that lets us tweak the preview configuration and avoid a litany of @Preview functions.

How Compose Preview Works Under the Hood

Jaewoong Eum (Mastodon, Bluesky) is also interested in @Preview, in this case showing how it does what it does. This post explores ComposeViewAdapter, how it fakes Android’s lifecycle, the role of the WrapPreview() composable, and more.

The Problem Of Time-Based Actions

Eevis Panula (Mastodon, Bluesky) points out “Time to Take Action”, a setting that we should be using to determine how long transient interactive UI (e.g., snackbars) are visible. Eevis shows how we can get this value from LocalAccessibilityManager and use it to determine how long to keep composables visible.

Medium: Building a Draggable FastScroll Scrollbar for LazyColumn in Jetpack Compose

Devara Fikry Akmal resented the fact that LazyColumn() lacked a fast-scroll scrollbar. This post explores building one, based on one of Google’s sample apps.

Resource Roundup

100% pure code!

GitHub: kdroidFilter / ComposeDarwinUi

Elie Gambache is building a design system mimicking macOS 26’s native style. The design system is for Compose Multiplatform, supporting all major platforms. It includes light/dark mode support, many components, and zero Material dependencies.

GitHub: DenserMeerkat / hyphen

Ragul Raj (Bluesky) brings us a WYSIWYG Markdown editor for Compose Multiplatform, supporting Android, Web, and desktop. It supports undo/redo, Markdown-aware clipboard operations, and more.

GitHub: manjees / compose-reels

GitHub user manjees is working on a Compose for Android library that gives you a vertical scrolling roster of videos, for a UX reminiscent of TikTok, Instagram Reels, etc.

GitHub: Martmists-GH / compose-node-editor

GitHub user Martmists-GH is creating a NodeGraph() composable that allows you to depict nodes and connections, plus allow the user to edit them. It is described as being for Compose Multiplatform, but the project structure is a bit strange, so it is unclear which specific platforms it supports.

Notable Releases

Maps for Compose publised version 8.2.1, containing a couple of bug fixes.

A Very Particular Set of Skills

Adding Compose capabilities to your coding agents!

From time to time, I will list some new published agent skills related to Jetpack Compose and Compose Multiplatform.

I am not going to attempt to review them, at least not at this time. For example, this week’s batch contains a mix of ones that feel too small and ones that feel too large to me:

  • https://github.com/anhvt52/jetpack-compose-skills
  • https://github.com/Meet-Miyani/compose-skill
  • https://github.com/new-silvermoon/awesome-android-agent-skills
  • https://github.com/zshnarz/build-android

I am more interested in skills that focus on specific things, like Nav3 or Compose Unstyled, as I suspect that they will be more useful. Reach out if you have suggestions!

As always, unless the skill is clearly very popular: always read the skill before adding it to your agent harness. Skills are a breeding ground for prompt injection attacks. Trust your skill suppliers before adding them to a project, whether directly or via an agent harness plugin.