jetc.dev Newsletter Issue #315
Published: 2026-05-26
Note to self: do not take the weekend off before Google I|O. đ
This week, we see what Google I|O 2026 brought us, marvel at JetBrainsâ multiplatform velocity, explore some LLM-related Compose libraries, and debate State.
Ooooo⌠What Did We Get?
Reviewing the release notes for the latest Jetpack Compose update!
As JetBrains put it, Compose Multiplatform 1.11.0 Is Now Available. đ The time between Compose for Android releases and the corresponding Compose Multiplatform release continues to shrink, which helps with Compose comprehension and should help with Compose Multiplatform uptake.
However, time marches on, so the Compose BOMs are up to 2026.05.01. The production BOM will point to 1.11.2 of the core Compose artifacts, with your usual bug fixes.
The alpha BOM will point to 1.12.0-alpha03 of the core Compose artifacts, with several changes:
-
The Style API has made some changes to allow for custom style scopes, but you will need to add some imports due to a somewhat-breaking API change.
-
ComposeTestRuleandComposeUiTestofferrunWithoutImplicitWait(), for faster tests where you do not need the implicit synchronization -
@PreviewWrappernow works with multi-previews -
MeshGradientPainter, acredentialRequestsemantics property, andSoundEffectOnInteractionwere all added, as was amutableTransformparameter toAnimatedVisibilityandAnimatedContent
Compose Material3 is up to 1.5.0-alpha20. The biggest news is that rememberBottomSheetState() replaces rememberModalBottomSheetState() and rememberStandardBottomSheetState().
Compose Material3 Adaptive is up to 1.3.0-beta02, presumably with bug fixes.
Remote Compose reached 1.0.0-alpha11. RemoteText() now has a corresponding RemoteFontFamily, and RemoteLong now supports math.
Glance is up to 1.3.0-alpha01, with a long list of seemingly minor changes.
Wear Glance reached 1.0.0-alpha10, where developers gain access to glance.wear.health.DataType.
Nav3 has a 1.1.2 patch release (fixing a preview-related predictive back bug) and a 1.2.0-alpha03 release (adding better deep link support).
Wear Compose has 1.6.2 (bug fixes) and 1.7.0-alpha03 (one-handed gesture changes).
And, we got other Compose-related updates:
androidx.ink:ink-authoring-compose:1.1.0-alpha03androidx.ink:ink-authoring-compose-android:1.1.0-alpha03androidx.ink:ink-geometry-compose:1.1.0-alpha03androidx.ink:ink-geometry-compose-android:1.1.0-alpha03androidx.lifecycle:lifecycle-runtime-compose:2.11.0-beta02(and multiplatform targets)androidx.lifecycle:lifecycle-viewmodel-compose:2.11.0-beta02(and multiplatform targets)androidx.media3:media3-ui-compose:1.8.1androidx.navigation:navigation-compose:2.10.0-alpha05(and multiplatform targets)androidx.savedstate:savedstate-compose:1.5.0(and multiplatform targets)
One Off the Stack, One Off the Slack
Youâve got questions. Thatâs understandable!
How Can I Stop My Sheet From Dragging?
If you want scrollable content in your ModalBottomSheet(), Compose Material3 1.4.0 is adding sheetGesturesEnabled = false. Learn more in this weekâs highlighted Stack Overflow question.
How Do We Extend Stuff?
With a function-based API and implementation, Compose makes composition easy and inheritance frequently impossible. And, with only so much of the Compose implementation public, even composition can be a challenge. While copying internal implementations feels icky, often it is the only option, as we see in this weekâs highlighted Kotlinlang #compose Slack thread.
Google I|O 2026
Google I|O 2026 â Google AI|O, amirite? â did manage to have some Compose-related sessions! Beyond general ones like âWhatâs new in Androidâ and âWhatâs new in Android development toolsâ, they had some a bit more Compose-specific ones, including:
- Adaptive development for the expanding Android ecosystem
- Build a modern note-taking app on Android
- Build adaptive layouts with Navigation 3
- Build adaptive widgets for cars, phones, watches, and more
- Build beautiful, premium, adaptive apps with Material
- Build custom design systems with Jetpack Composeâs new Styles API
- Design and build desktop-class Android experiences
- Make Material your own
Composable Commentary
Posts, videos, and other new information related to Jetpack Compose!
Android is Compose-first
The biggest news out of Google I|O relative to Compose is that⌠Compose won! The View-based UI system is in maintenance mode, with all UI effort now being plowed into Compose. Way back when I started this newsletter, I expected that this would be the eventual outcome if Compose had positive uptake by developers.
A New Default Project Structure for Kotlin Multiplatform
JetBrainsâ MĂĄrton Braun
(Mastodon, Bluesky)
points out âthe new normalâ for Compose Multiplatform project structures, where each platform now gets its own top-level module, with a shared module containing all of the cross-platform elements. This improves Android Gradle Plugin 9.0 support, offers better parallelism than the previous composeApp/iosApp pair, and will be easier to extend over time.
How to Handle Disabled State for Multicolour Icons in Android (Jetpack Compose Guide)
The inDrive.Tech team explores ways to mark an icon as disabled. For a single-colour icon, applying a âdisabledâ tint often is sufficient, but that wrecks multi-colour icons. Using saturation and opacity works better for the multi-colour case, and the team demonstrates how to detect how many colours an icon uses. I sure hope all these techniques also work for single-color and multi-color icons, though. đ
Dejavu, Compose, And The Difference Between Performance Wins And Guardrails
James Cullimore wanted drama and excitement when applying Dejavu to a project, and had to settle for long-term confidence builders instead, along with an Android-related bug fix.
Medium: Dynamic Language Switching in Compose Multiplatform (Android & iOS)
Yevhen Litvintsev explores how to create a Compose Multiplatform wrapper over the native support for on-the-fly language changes in iOS and Android.
Medium: Choreographing Compose Animations with updateTransition
animate*AsState() is easy, but synchronizing multiple of them is not. Christophy Barth walks us through how to use updateTransition() to synchronize this sort of animated effect.
Medium: The Hidden Problem with Theme Switching in Jetpack Compose
Sometimes, your icons might not respect a switch between day and night themes. As Dani Mahardhika points out in this post, âeven though Compose recomposes correctly during the theme changes, the underlying resource resolution may still reference stale resources if the context or resources are not refreshed in the way we expectâ.
Medium: Your Compose Previews Should Be Good Enough to Skip the Emulator
Rituraj Sambherao argues that for examining your UI, previews should be all that you need⌠if you have a rich enough set of preview composables, powered by @PreviewParameter and PreviewParameterProvider.
Embracing Compose Snapshot State for UI Layer State Production
A long-standing debate in Compose development has been what viewmodels (or similar constructs) should expose: StateFlow or State from Composeâs snapshot system. TJ Dahunsi
(Bluesky)
argues that it should be State.
Other Interesting Links
- Beyond the Screen: Component-Level ViewModels in Compose
- Building Adaptive Layouts in Jetpack Compose
- Compose Previews Without the Boilerplate
- Compose State, Events, and Side Effects: The Clean Way to Build Android UIs
- KMP Splash: How I Stopped Opening Xcode for Splash Screens
- Medium: 3 Compose State Bugs Your Tests Will Never Catch
- Medium: Android Jetpack Compose Flexbox
- Medium: Building a Pretty Morphing Button in Jetpack Compose: A Step-by-Step Guide
- Medium: Building a Production-Grade Adaptive Layout System in Kotlin Multiplatform â From Phone to Foldable
- Medium: Building a Production-Ready Drag-to-Reveal Component in Jetpack Compose
- Medium: Building Smooth Expand/Collapse Cards in Compose
- Medium: Jetpack Compose Internals: A Deep Dive
- Medium: Row vs Column vs Box in Jetpack Compose â How They Actually Handle Children Under the Hood
- Medium: Why Your LazyColumn Drops Frames â Part 3: Production Polish
- Understanding animate*AsState API in Jetpack Compose
Resource Roundup
100% pure code!
GitHub: composablehorizons / compose-capabilities
Alex Styl
(Bluesky)
brings us a small library that reports what sorts of interaction capabilities are available to us, given the particular Compose Multiplatform platform we are running on. Specifically, it gives us hasTouch, hasPointer, and hasKeyboard information.
GitHub: Erkko68 / filament-kmp
Ăric BitriĂĄ Ribes is working on a Compose Multiplatform wrapper around Filament, Googleâs âreal-time physically based rendering engineâ.
GitHub: NadeemIqbal / llm-typewriter
Nadeem Iqbal created a streaming text renderer, designed for chat interfaces to LLMs and similar âchunk at a timeâ text sources. It supports a wide array of features, from Markdown to screen reader support, across all major Compose Multiplatform targets.
GitHub: NadeemIqbal / prompt-bar
Nadeem Iqbal also created a text entry interface, designed for chat interfaces, such as for LLMs. It supports / command auto-completion, @ mentions, attachments, and more, across all major Compose Multiplatform targets.
GitHub: NucleusFramework / ComposePdfReader
The Nucleus team is building a pdfium-based PDF renderer and text extractor, supporting all major Compose Multiplatform targets.
Laygent
Zach Klippenstein
(Mastodon, Bluesky)
created a Laygent() composable. Backed by Koog and your preferred LLM, Laygent() takes a description of a layout (e.g., âArrange items in a 3-column grid with 8 dp of spacing between themâ) and renders your supplied items in it.
Other Interesting Links
- GitHub: Alims-Repo / FlowTab-CMP (tab navigation for Compose for Android and iOS)
- GitHub: EtanaAlemu / geo-location-kit (country/region/city/country code pickers for Compose for Android)
- GitHub: miroslavhybler / jet-admob-ads (AdMob wrapper for Compose for Android)
- GitHub: miroslavhybler / jet-tts (TTS composable integration for Compose for Android)
- GitHub: morozione / compose-rolling-text (odometer-style text rolling for Compose for Android)
- GitHub: NadeemIqbal / cmp-form (form validation for Compose Multiplatform)
- GitHub: NadeemIqbal / cmp-ui-libs-responsive (adaptive layouts for Compose Multiplatform)
- GitHub: NadeemIqbal / debug-bar (debug drawer for Compose Multiplatform)
- GitHub: NadeemIqbal / flag-bar (feature flags with composable support for Compose Multiplatform)
- GitHub: NadeemIqbal / krumb (toasts for Compose Multiplatform)
Notable Releases
I go away for a week, and Alex Styl blasts out 5 releases for Compose Unstyled, all in the 2.x series:
-
2.0.0broke the library into a couple of dozen smaller libraries, along with addingPortalHost()andPortal()for all of your teleporting needs! đ -
2.1.0addedTooltipHost()and boosted test coverage -
2.2.0added more regression test coverage, along with focus-visible support ofocusRing -
2.3.0modifiedbuildTheme()to remove all default styling, including that from Compose Foundation -
And
2.4.0added acomposeunstyledmodule to serve as the basis for custom design systems, in addition to revamping the keyboard navigation forDropdownMenu()
See this blog post for more about the 2.0 release.
A Very Particular Set of Skills
Adding Compose capabilities to your coding agents!
Here are a handful of new skills and related tools for helping you get the most out of your agents:
Recent Issues:
- 2026-05-05: Bottom tab navigation! Focus indicators! Hotkey DSL! Syntax highlighting!
- 2026-04-28: Compose 1.11.0 is stable! Compose Multiplatform beta! Testing multiplatform composables! LinkBuffer! Tables! PDFs! And... text underlining?!?
- 2026-04-21: ViewModel Scope in Nav3! More inclusive drag-and-drop! Shared element transitions in Nav3! Official skills!