jetc.dev Newsletter Issue #269
Published: 2025-06-17
This week, we examine Compose Multiplatform and server-defined UI. We peek at OpenGL and signatures in Compose Multiplatform projects. And, we continue our quest for greater focus.
One Off the Stack, One Off the Slack
You’ve got questions. That’s understandable!
Why Is My UI Not Updating This Time?
In many cases, if you are mutating state and the UI is not responding, there is an issue
in how you are mutating the state. In this case, the culprit is a MutableList
. Changing
the content of a MutableList
, then re-emitting that MutableList
via send()
on a
ChannelFlow
will not work, as while the list content has changed, the list identity
has not, and that is all ChannelFlow
cares about. Learn more in this week’s highlighted
Stack Overflow question.
How Can I Control the Initial Focus?
Focus management is a pain, and Compose does not change that much. One facet of focus is
controlling what focusable widget gets the focus when the screen (or tab or whatever)
is first displayed. Learn more about onEnter
in this week’s highlighted Kotlinlang
#compose
Slack thread.
Composable Commentary
Posts, videos, and other new information related to Jetpack Compose!
Video: Compose Preview
Google’s Paris Hsu walks us through the use of the @Preview
annotation, from simple
previews to highly-customized annoations and Android Studio tooling tips.
Medium: Bridging Compose Multiplatform with SwiftUI
Lucas Prioste takes a look at how to blend SwiftUI code on iOS into a mostly-Compose Multiplatform app, for cases where a pure-native iOS widget offers features or functionality that cannot presently be met with Compose Multiplatform.
Video: Multiplatform to the City
Karan Sharma (Mastodon) delivered a presentation for GDG Brisbane on the use of Compose Multiplatform to support both iOS and Android, in the context of a public transportation app.
Handling Privacy Sensitive content in Jetpack Compose
SwiftUI offers a privacySensitive()
modifier, so Nishant Srivastava set out to
create a Compose equivalent. Specifically, this modifier detects when the window focus
moves to some other window and then hides any content rendered by the composable to
which the modifier is applied.
Server-driven UI SDK on Android: how RevenueCat enables remote paywalls without app updates
Jaewoong Eum (Mastodon, Bluesky) examines RevenueCat’s implementation of server-defined UI (SDUI) for their Paywall component, showing how a JSON-defined structure can be converted into composables at runtime.
Other Interesting Links
- Is it vaporwave? - Compose Hot reload
- Medium: 6 Lesser-Known Jetpack Compose Tricks That Instantly Improve Your UI
- Medium: Article 4: Animations in Jetpack Compose From State to Smooth Transitions
- Medium: Building a Robust Image Loading Library for Android with Jetpack Compose
- Medium: Building a Space Flight News App with Compose Multiplatform for Android, iOS, and Desktop: Part 2 — Fetching Data from API with Ktor and Koin
- Medium: Debugging Jetpack Compose Apps: Tips, Tools, and Common Pitfalls
- Medium: Dynamic destinations with Jetpack Navigation 3
- Medium: Event Handling in Jetpack Compose: Channels, SharedFlow, and LiveData Compare
- Medium: The 8 Compose Side Effects Every Android Developer Must Master in 2025
Resource Roundup
100% pure code!
GitHub: karmakrafts / ComposeGL
GitHub user karmakrafts published an OpenGL GLCanvas()
composable for Compose Multiplatform,
supporting Android, iOS, macOS, Windows, Linux, and the Web. This presently supports
GLES 2.0, with a plan to support the richer GLES 3.x in the future.
GitHub: YuukiYoshida / undoable-compose
GitHub user YuukiYoshida brings us a framework for tracking undo/redo operations for
TextField()
for Compose for Android.
GitHub: niyajali / compose-signature
Sk Niyaj Ali created a Compose Multiplatform library (Android, iOS, desktop, Web/JS, Web/Wasm) for collecting signatures from users, with undo/redo, an optional full-screen mode, customizable theme, and much more!
GitHub: tonykolomeytsev / figx
Anton Kolomeytsev offers a command-line tool that, among other things, exports SVGs from
Figma and converts them into ImageVector
definitions.
Other Interesting Links
- GitHub: acolombo11 / flagkit-compose (national flags for Compose Multiplatform)
- GitHub: nomanr / animate-compose (animation framework with over 90 built-in animations)
- GitHub: turtlekazu / Furiganable (adds phonetic pronuciation to text)
- GitHub: vivekgupta4Git / LazySwipeBanner (swipeable stack)
- GitHub: yuyuyuyuyu-dev / CreateTypography (Compose Multiplatform
Typography
builders)
Notable Releases
Circuit is up to 0.28.1
,
updating dependencies and fixing some bugs.
Compose Unstyled now has a 1.32.0
release,
updating dependencies and upgrading the TextField()
API options.
Vortex, a fork of Voyager, released 0.2.5
for dependency updates.
Or, you can subscribe to the Atom feed or follow Mark Murphy in the Fediverse.
Recent Issues:
- 2025-06-10: Compose and Compose Multiplatform alphas! Material3 Expressive! Lottie testing! Cross-platform ripples! And... *now* can we pick a peck of pickle photos?!?
- 2025-06-03: Navigation for Compose! What's new in Compose! Accessibility testing! Snackbars and channels! Overscroll! And... can we tie a ribbon on it?!?
- 2025-05-27: Google I|O 2025! KotlinConf 2025! Compose and Compose Multiplatform updates! Motion physics in Material3 Expressive!