jetc.dev Newsletter Issue #329
Published: 2026-09-01
This week, Compose Multiplatform got a stable release, Remote Compose has a more-defined foundation, and Material3 is less rich/more vibrant.
Also, we look at cross-platform page curls and streaming Kotlinx HTML updates via Molecule. Plus, we detect (or prevent) screenshots on Android and iOS, and we consider writing a phonebook.
Ooooo… What Did We Get?
Reviewing the release notes for the latest Jetpack Compose update!
JetBrains released a stable version of Compose Multiplatform 1.12.0! 🎊 🎉 That is a scant two weeks since Compose for Android 1.12.0 went stable, which is an impressive feat and is sure to be greatly appreciated by the community!
Google, meanwhile, is hard at work on Compose 1.13.0, releasing 1.13.0-alpha02 of the core artifacts via the BOM. We got a smattering of changes, including:
-
The various grid layout APIs (e.g.,
Grid(),GridScope) are no longer experimental -
withLocalRetainedValuesStore(), “which lets you return values from the content lambda” -
VectorPainterwill share internalImageBitmapresources when rendering the sameImageVectormultiple times, for improved efficiency -
Various bug fixes
Remote Compose gained a new artifact group: androidx.compose.remote.foundation. Mimicking android.compose.foundation, this group offers components that are design-system-agnostic. The RemoteBasic* composables and RemoteSpacer() have moved here, as 1.0.0-alpha01. In the main Remote Compose artifact, 1.0.0-alpha18, RemoteTextStyle continues to expand, and a bunch of previously-internal options (e.g., RemoteCollapsibleColumn(), RemoteFitBox(), graphicsLayer()) were made publicly available.
Compose Material3 is up to 1.5.0-alpha27. All the “rich” things are now “vibrant” instead. 🤷🏻 There are also new “opinionated” toggle buttons, even though Material3 is already “opinionated” (another 🤷🏻).
Compose Material3 Adaptive is back on the alpha train with 1.4.0-alpha01, though it feels like they mostly removed stuff. 🧐
Glance got a new artifact group, androidx.glance.adaptive, “the library for building template-first RemoteCompose Widgets for multiple form factors and surfaces across Android ecosystem”. Glance for Wear also got a 1.0.0-alpha17 release with some new Lint rules.
Navigation 3 for Compose (Nav3) got its first 1.2.0 beta. DeepLinkRequest.extra changed types (from Map to RequestExtras), and some bugs were squashed.
Wear Compose is out with 1.7.0-beta02, with a fresh baseline profile. Wear Remote Compose has its 1.0.0-alpha10 release, adopting the aforementioned androidx.compose.remote.foundation composables.
And, if all that were not enough, we also got updates to other Compose-related artifacts:
androidx.activity:activity-compose:1.14.0-alpha01androidx.camera:camera-compose:1.6.2androidx.camera.viewfinder:viewfinder-compose:1.6.2androidx.lifecycle:lifecycle-runtime-compose:2.12.0-alpha02(and multiplatform targets)androidx.lifecycle:lifecycle-viewmodel-compose:2.12.0-alpha02(and multiplatform targets)androidx.navigation:navigation-compose:2.10.0(and multiplatform targets)androidx.pdf:pdf-compose:1.0.0-beta01androidx.savedstate:savedstate-compose:1.6.0-alpha02(and multiplatform targets)androidx.text:text-vertical-compose:1.0.0-beta01
Composable Commentary
Posts, videos, and other new information related to Jetpack Compose!
Compose Multiplatform 1.12.0 Released
JetBrains’ Elvira Mustafina highlights what’s new in the latest release of Compose Multiplatform, including fallback font support for Web targets and an MCP server integrated into Compose Hot Reload.
Medium: Turning the page: a real page-curl on iOS with Compose Multiplatform
Zeyad Gasser writes about what it took to port a Compose for Android page-curl library to Compose for iOS, including dealing with a broken iPhone and coping with a variety of snapshot-related issues. The result is a Compose for Android and iOS library.
Compose & kotlinx.html
JetBrains’ is looking into what it would take for the semi-abandoned Compose for HTML to support “isomorphic rendering”, a blend of server-side and client-side rendering. Jake Wharton (Mastodon) demonstrates a lightweight approach for this sort of thing using Molecule and WebSockets.
Server-driven paywalls on Android: rendering UI your binary has never seen
Jaewoong Eum
(Mastodon, Bluesky)
describes how the RevenueCat SDK implements server-defined UI, including whether it is better to do this with a WebView instead of Compose, dealing with forward compatibility (i.e., server sends UI that is newer than the app can handle), and more.
Medium: The Recompositions That Weren’t There!
Qamar A. Safadi ran into a situation where Layout Inspector’s recomposition counts seemed to vary significantly from the profiler’s report of memory allocations. This post points out the limitations in Layout Inspector that explain the discrepancy and what aspects of the code were causing the Compose engine to make all the extra allocations.
Medium: Own Your Dialog: Taking Control of Compose’s Dialog Window
Luca Fioravanti notes that the default behavior of a Compose for Android Dialog is dictated by the platform, not the app. You can control things like the scrim and open animation from a composable, it just requires a chunk of work.
Other Interesting Links
- Medium: Building Android Apps with Jetpack Compose: A Performance-First Engineering Deep Dive
- Medium: Building slides with Compose Multiplatform
- Medium: Decorator vs. Modifier.styleable: How OnePlayer Uses Toolkit for Leaner Compose Styling
- Medium: Jetpack Compose: Turning @Preview From a Convention Into a Mechanism
- Medium: Mastering Jetpack Compose Side Effect States
- Medium: Mastering Jetpack Compose’s New SelectionState API
- Medium: My Fix Caused the Next Crash (Part 2 of 3)
- Medium: Navigation 3 Is Stable. Here’s What the Migration Actually Costs.
- Medium: Recomposition: The Silent Performance Killer in Your Jetpack Compose App
- Medium: The One-Liner That Stopped Our LazyColumn From Jumping (Part 3 of 3)
- Shipping a Kotlin Compose Multiplatform app as a PWA: getting updates and caching right
Resource Roundup
100% pure code!
GitHub: abdo-essam / ComposeShield
Abdo Essam created a library for Compose for Android and iOS that wraps each platform’s screenshot detection and prevention logic. You can protect your entire app or just individual screens/windows, via composable declarations or imperative calls. See this Medium post for more.
GitHub: stag-build / phonebook
GitHub user stag-build built a CLI that takes all your @Preview composable (and SwiftUI #Preview items) and generates a Storybbok-style gallery for easy review by you or your coding agents.
GitHub: rubywai / ruby_kmp_video_player
Wai Phyo Aung offers us a RubyVideoPlayer() wrapper around ExoPlayer and AVPlayer, for Compose for Android and iOS support of video playback.
GitHub: ryadomtech / origami-kmp-image-cropping
The Ryadom Tech team created an image-cropper implementation for Compose Multiplatform, supporting all targets. The user can select the cropped area, and you get the results of the crop.
Other Interesting Links
- GitHub: OCNYang / ComposeToast (toasts for Compose Multiplatform)
- GitHub: iVamsi / EasyAndroidPermissions (permission management for Compose for Android)
Notable Releases
Circuit had two releases in the past week:
3.7.1with some newcircuit-retainedfunctionality, plus bug fixes and dependency updates3.8.0, whereScreenandPopResultare no longerParcelable— see the release notes for migration instructions
Coil 3.6 is out!. This brings support for blob: URLs in JS and Wasm, an allowPartialImage decoder flag, and a bunch of bug fixes and dependency updates.
Compose Unstyled is up to 2.9.2, updated for Compose Multiplatform 1.12.0, plus a few bug fixes.
A Very Particular Set of Skills
Adding Compose capabilities to your coding agents!
Here are three more sets of skills that I stumbled upon:
Recent Issues:
- 2026-08-18: Compose stable release! Compose Material3 stable too! Liquid Glass in a multiplatform app! Preview generator!
- 2026-08-11: Why we sometimes still need to think about stability! Compose Desktop/Web test bridge! Android debugger for coding agents! And... Places, everyone?!?
- 2026-08-04: Compose 1.0 five-year anniversary! 1.12.0 RC! Memory leaks! Remote Compose for debugging! And... have you been through the desert with a state with no name?!?