jetc.dev Newsletter Issue #270

Published: 2025-06-24

Not only did we get a new Compose production patch release, but we got our first beta of 1.9.0 and some new Compose libraries besides!

Beyond that, we peek at edge-to-edge (on iOS!) and TextFieldState. We learn about Nav3 and Androidify. We explore creating an OTP field and how to render text along a path. And we integrate Rive animations in Compose Multiplatform.

Ooooo… What Did We Get?

Reviewing the release notes for the latest Jetpack Compose update!

The production and beta Compose BOMs are up to 2025.06.01. The production BOM points to version 1.8.3 for the primary Compose artifacts, with a couple of bug fixes and little else.

The beta BOM is now for 1.9.0-beta01, which is surprising considering that 1.9.0-alpha01 is barely two months old. Of note:

  • background() and border() modifiers now implement SemanticsModifierNode, which may affect some of your tests

  • There is a new rememberSerializable() function, that works akin to rememberSaveable() but is powered by kotlinx.serialization

  • InsetsRulers was moved to common code and renamed WindowInsetsRulers

The Compose Runtime gained support for many new platforms:

  • androidx.compose.runtime:runtime-annotation-js
  • androidx.compose.runtime:runtime-annotation-mingwx64
  • androidx.compose.runtime:runtime-iosarm64
  • androidx.compose.runtime:runtime-iossimulatorarm64
  • androidx.compose.runtime:runtime-iosx64
  • androidx.compose.runtime:runtime-js
  • androidx.compose.runtime:runtime-linuxarm64
  • androidx.compose.runtime:runtime-linuxx64
  • androidx.compose.runtime:runtime-macosarm64
  • androidx.compose.runtime:runtime-macosx64
  • androidx.compose.runtime:runtime-mingwx64
  • androidx.compose.runtime:runtime-tvosarm64
  • androidx.compose.runtime:runtime-tvossimulatorarm64
  • androidx.compose.runtime:runtime-tvosx64
  • androidx.compose.runtime:runtime-watchosarm32
  • androidx.compose.runtime:runtime-watchosarm64
  • androidx.compose.runtime:runtime-watchosdevicearm64
  • androidx.compose.runtime:runtime-watchossimulatorarm64
  • androidx.compose.runtime:runtime-watchosx64

Wear Compose is up to 1.5.0-beta04, with a lot of bug fixes.

The Jetpack Ink set of libraries now has a Compose-based UI layer:

  • androidx.ink:ink-authoring-compose
  • androidx.ink:ink-authoring-compose-android
  • androidx.ink:ink-brush-compose
  • androidx.ink:ink-brush-compose-android
  • androidx.ink:ink-geometry-compose
  • androidx.ink:ink-geometry-compose-android

The NavigationEvent set of libraries now has a Compose flavor:

  • androidx.navigationevent:navigationevent-compose
  • androidx.navigationevent:navigationevent-compose-android
  • androidx.navigationevent:navigationevent-compose-jvmstubs
  • androidx.navigationevent:navigationevent-compose-linuxx64stubs

Also, androidx.activity:activity-compose:1.12.0-alpha03 was released.

In addition, JetBrains released 1.8.2 of Compose Multiplatform, with a bunch of bug fixes.

One Off the Stack, One Off the Slack

You’ve got questions. That’s understandable!

How Do I Go Edge-to-Edge… in iOS?

Android developers have been dealing with edge-to-edge UI presentations for some time. But, what if you are using Compose Multiplatform, and you want to match that presentation on iOS? See how to tweak ContentView.swift to get what you are seeking in this week’s highlighted Stack Overflow question.

Should TextFieldState Go In Our ViewModel?

Keeping all your state in a ViewModel sounds great, but testing TextViewState becomes tricky. Learn some testing workarounds for this scenario, and a bit about the future of this issue, in this week’s highlighted Kotlinlang #compose Slack thread.

KotlinConf 2025

Not surprisingly, KotlinConf 2025 had several presentations regarding Compose and Compose Multiplatform, including:

Composable Commentary

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

Video: Navigating the future with Jetpack Navigation 3 - Core Concepts

Google’s Jeremy Woods gives us a quick 10-minute tour of the new Nav3 library, particularly how it puts the backstack under your control.

Video: All about Androidify

Google’s Rebecca Franks (Mastodon, Bluesky) and Roberto Orgiu joined the Code with the Italians team to talk about the latest incarnation of Androidify, especially its Compose-based UI. From Material 3 Expressive to adaptive layouts, see how Google is powering this new, droidful app. And, yes, of course “droidful” is a word!

Medium: Future Of Android: Why Navigation 3 is a Game-Changer!

Medium user ashiqfury gives us an extended walkthrough of Nav3, from basic setup through scenes and strategies, transitions, and more.

Medium: Creating an OTP Text View with Auto-Fill Support in Jetpack Compose

There are many OTP composable libraries. Karishma Agrawal shows how to create one, complete with autofill support, leveraging the flexibility of BasicTextField().

Medium: Migrating a Custom EditText to Jetpack Compose (Without Breaking Focus Navigation)

Sometimes you have so much invested in a View that you need an interim hybrid solution blending Compose and the View-based system. This gets extra-tricky when it comes to focus, which is fairly important if your View is a highly-customized EditText. Yusuf Önder shows us the limitations of focus and AndroidView() and helps us work around those limitations.

Material 3 Expressive for Compose: Loading Indicator

Joe Birch (Mastodon) has begun a blog post series examining Material 3 Expressive. This week’s post looks at LoadingIndicator(), providing you an animated rotating polygon to let the user know that your app is busy loading some data.

Animating Text along a Path in Jetpack Compose

sinasamaki (Mastodon, Bluesky) is back, showing us how to render text on a Canvas(), following a Path, including rotating the characters to be perpendicular to the line represented by the Path.

Resource Roundup

100% pure code!

GitHub: muazkadan / Rive-CMP

Muaz Kadan has created a Compose Multiplatform wrapper around native libraries for rendering Rive animations, supporting Android and iOS.

GitHub: sunildhiman90 / KotlinMultiplatformAuth

Sunil Kumar is working on a authentication framework for Compose Mulitplatform, supporting all platforms. Presently, it wraps Sign In with Google.

GitHub: ernestoyaquello / DragDropSwipeLazyColumn

Julio Ernesto Rodríguez Cabañas published a wrapper around LazyColumn() that adds item drag-and-drop capabilities, along with horizontal swipe actions.

GitHub: shivvrat12 / markdown-compose

Shiv Vrat Raghuvanshi brings us a MarkdownText() composable supporting basic Markdown rendering.

Composer

The Firebender team has published “an autonomous coding agent that takes any Figma design URL and converts it to near pixel-perfect Jetpack Compose code”.

Notable Releases

Compose Unstyled is up to 1.33.0, with some BottomSheet() improvements and new slot APIs for a variety of the library’s composables.