jetc.dev Newsletter Issue #324

Published: 2026-07-28

This week, we avoid Canvas(), pin some composables, and implement end-to-end testing. Plus, we scan for accessibility issues, dock some panels, and edit some photos.

Ooooo… What Did We Get?

Reviewing the release notes for the latest Jetpack Compose update!

Media3 is up to 1.11.0-rc01, which includes the Compose for Android artifacts:

  • androidx.media3:media3-ui-compose:1.11.0-rc01
  • androidx.media3:media3-ui-compose-material3:1.11.0-rc01

One Off the Stack, One Off the Slack

You’ve got questions. That’s understandable!

For Effects, How Do We Choose a Key?

Particularly for DisposableEffect(), your key should match the lifetime of the thing that you are disposing, and your key might well be the thing that you are disposing. Learn more in this week’s highlighted Kotlinlang #compose-android Slack thread.

Composable Commentary

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

Medium: Stop Reaching for Canvas: Mastering the Compose Drawing Phase with drawBehind, drawWithContent, and…

Aakanksha Shivani points out that while Canvas() is great for drawing graphic elements, creating your own Canvas() may not be the right solution for decorating an existing composable. For those cases, drawBehind(), drawWithContent(), and drawWithCache() give you a DrawScope that lets you achieve the same UI ends, but with a less-expensive implementation.

Medium: Preserving Composables Beyond the Viewport

Amanullah Sarker reminds us about PinnableContainer, which lets you indicate composables that should not be disposed if just because they leave the viewport. This is useful for heavier composables, such as ExoPlayer or native ad wrappers.

Medium: E2E Testing for Compose Multiplatform

Preetam Bhosle writes about Parikshan: an end-to-end testing framework for Compose Multiplatform, supporting all major platform targets. It leverages platform-specific solutions like Android’s UiAutomator or Playwright where practical, and embeds its own controller server for the remaining platforms. This is all hidden behind a common interface, so your Kotlin-based tests can exercise all platforms.

Resource Roundup

100% pure code!

GitHub: mohdaquib / ComposeA11yScanner

Mohd Aquib created an accessibility scanner overlay for your Compose for Android project. Ite has a rules-based engine to let you know about common accessibility issues like too-small touch targets, missing or duplicate content descriptions, etc.

GitHub: omkar-tenkale / DockLayout

Omkar Tenkale built something that I happen to have a concrete need for right now: a dockable panel implementation for Compose Multiplatform, supporting all major targets. Panels can be collapsed to sidebars, and the grid of panels can be resized horizontally and vertically.

GitHub: Jeremy-Gitau / multiplot

GitHub user Jeremy-Gitau brings us a charting library for Compose Multiplatform, supporting Android, desktop, and iOS. It supports bar and line charts, with customizable theme elements (e.g., colors).

GitHub: Muzamilabdallah / photoEditor

GitHub user Muzamilabdallah built a WhatsApp-style photo editor for Compose for Android. It has a core library that is design-system-agnostic, plus a “default” implementation that adds typical UX affordances like tool panels.

Notable Releases

Compose Unstyled is up to 2.9.0, allowing ModalBottomSheet to be enabled.

A Very Particular Set of Skills

Adding Compose capabilities to your coding agents!

Rotem Meidan created compose-doctor. This is a bit of a mashup of React Doctor and my detektifier, turning various quality tools like Detekt into a single 0-100 gate that agents can aim to achieve.

GitHub user Coding-Meet created Library Insight. This resembles ksrc to an extent, helping agents learn the shape of third-party libraries and be able to leverage them better in your app.

Also, here are a few more sets of skills of possible relevance for your Compose and Compose Multiplatform development:

Featured here? Please add this badge to your article or repo! As Seen In - jetc.dev Newsletter Issue #324

Powered by Buttondown

Or, you can subscribe to the Atom feed or follow Mark Murphy on Mastodon or Bluesky.

Spread the Word!
Suggestions?
If you have ideas for items for future newsletter editions, reach out via email or contact Mark Murphy on kotlinlang Slack!