jetc.dev Newsletter Issue #271

Published: 2025-07-01

Welcome to the second half of 2025!

🙀

This week, we try to say “goodbye” to Skia, dive a bit deeper into Nav3, explore autofill support and Compose Hot Reload, and peek at a server-side rendering framework.

Ooooo… What Did We Get?

Reviewing the release notes for the latest Jetpack Compose update!

androidx.compose:compose-bom-alpha:2025.06.01 was released later than its peer beta and production BOMs, but is now available.

One Off the Stack, One Off the Slack

You’ve got questions. That’s understandable!

Where Did rememberSystemUiController() Go?

The Accompanist project deprecates and removes code, either when it gets promoted into official Compose libraries, or when the project maintainers simply do not want to maintain it. Accompanist System UI Controller suffered the latter fate, and I point out the official migration instructions and the option of forking the library.

What If I Don’t Want Skia?

Compose Foundation and things built atop of it assume that the UI will be rendered by Skia. If you are implementing some separate rendering system, you lose some of the modifiers and related code from Foundation. You have a couple of options for dealing with this, as we see in this week’s highlighted Kotlinlang #compose Slack thread.

Composable Commentary

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

Medium: Custom Scene Strategy in Navigation 3 — Make Your App Flow Your Way

Ashiq Fury reviews the role of scenes and scene strategies in Nav3, then walks us through how to define Scene implementations and a SceneStrategy, including how to incorporate window size classes and how to deal with back navigation.

Medium: Implementing Nested Bottom Navigation with Navigation 3 in Jetpack Compose

Muhammad Irfan Ali also explores Nav3, in this case looking at having nested navigation with a BottomNavBar(). This involves defining a distinct set of NavKey objects representing the nested destinations, then defining and applying distinct backstacks per nested destination.

Slides: Blazing Fast UI Development with Compose Hot Reload

Márton Braun (Mastodon, Bluesky) delivered a droidcon NYC 2025 presentation on Compose Hot Reload — while we wait for the conference video, here are the slides!

Autofill in Compose 1.8.0

Bryan Herbst (Mastodon, Bluesky) returns to autofill support in Compose for Android, looking at what was added in 1.8.0, including enabling autofill via contentType semantics, improved highlighting and context menu support, and more.

Medium: How to Create a Word-by-Word Animation in Jetpack Compose

Kappdev is back with a new animated effect: rendering text in pieces (word-at-a-time, line-at-a-time, etc.). This involves dividing the text into discrete Text() composables, positioned based on text measurements, and animated using AnimatedVisibility().

Medium: Creating a Dimmed Overlay with a Transparent Cutout in Jetpack Compose

A common onboarding technique is to highlight a UI element by means of dimming everything else around it, incorporating a callout or some other UI that explains the role of the highlighted element. Zvereva Tatiana demonstrates how to implement this sort of presentation, by means of cutting a Color.Transparent hole in an overlay Canvas() that is sufficient to let the to-be-highlighted composable peek through.

Resource Roundup

100% pure code!

GitHub: serioushyeon / styled-text-compose

Jihyeon Jin has published a StyledText() composable that offers a DSL for building up an AnnotatedString for rendering. The library also offers some helper extension functions for assembling an AnnotatedString for use in stock composables like BasicText() and Text().

GitHub: nicholaspark09 / ssr

Nicholas Park is working on a Compose for Android server-side rendering (SSR) library for use in server-defined UI (SDUI) scenarios, or just for describing screens in JSON.

Raising the Glass

And since the fine folk at Apple are all glassy-eyed, there has been renewed interest in glass and glassmorphism in Compose, leading to:

Notable Releases

Circuit is up to 0.29.0, adding seekable transition support to AnimatedOverlay(), predictive back support to FullScreenOverlay(), and the latest version of Kotlin/KSP.

Compose WebView Multiplatform is now at 2.0.1, improving zoom support.

Compose Unstyled had 3 releases in the past week. 🤯 1.34.0 added progress() to sheets and retired the legacy version of LocalModalWindow. 1.35.0 folds in a version of theming formerly found in a separate project. And 1.36.1 offers fully stateless versions of RadioGroup(), TabGroup(), and DropdownMenu().