> ## Content Index
> Fetch the complete content index at: https://commonmain.dev/llms.txt
> Use this file to discover other available public pages before exploring further.

# Kotlin Multiplatform Newsletter #9
- URL: https://commonmain.dev/kotlin-multiplatform-newsletter-9/
- Published: 2026-03-17T14:00:33.000Z
- Updated: 2026-06-03T15:14:14.000Z
- Author: Bogdan Codes
- Tags: Issues

Kotlin 2.3.20 released, Room supporting KMP for JavaScript and WASM, context-aware recomposition budgets for Compose, IntelliJ code selection plugin, how Compose and SwiftUI work under the hood, KMP jobs at Touchlab, and more.

### **The Log**

The only Kotlin Multiplatform and Compose Multiplatform news you actually need to know.

🚀

[The Kotlin 2.3.20 release is out! ](https://blog.jetbrains.com/kotlin/2026/03/kotlin-2-3-20-released/?ref=commonmain.dev)  
  
Here are the main highlights:  
\- ****Gradle:** Compatibility with Gradle 9.3.0 and Kotlin/JVM compilation uses the Build tools API by default.  
\- ****Maven:** Simplified setup for Kotlin projects.  
\- ****Kotlin compiler plugins:** Lombok is Alpha and improved JPA support in the `kotlin.plugin.jpa` plugin.  
\- ****Language:** Support for name-based destructuring declarations.  
\- ****Standard library:** New API for creating immutable copies of `Map.Entry`.  
\- ****Kotlin/Native:** New interoperability mode for C and Objective-C libraries.

💽

[The first alpha of Room 3.0 has been released!](https://android-developers.googleblog.com/2026/03/room-30-modernizing-room.html?ref=commonmain.dev)  
  
 Room 3.0 is a major breaking version of the library that focuses on Kotlin Multiplatform (KMP) and adds support for JavaScript and WebAssembly (WASM) on top of the existing Android, iOS and JVM desktop support.

### Expect Actual

Technical deep dives, or solving the "how-the-hell-do-I-test-this" problems.

SPONSORED 

[![CTA Image](https://storage.ghost.io/c/57/59/57597180-415a-44ab-aa77-38b4467c31d5/content/images/2026/01/practical-kotlin-deep-dive-2.png)](https://skydoves.gumroad.com/l/kotlin-deep-dive?a=705284499&ref=commonmain.dev) 

****Practical Kotlin Deep Dive** ****(Jaewoong Eum)** takes you beneath the surface of Kotlin, exploring not just what the language does, but how it works and why it was built that way.   
  
From foundational concepts through coroutines, compiler architecture, and ****Kotlin Multiplatform**, this book connects everyday coding patterns to their underlying mechanisms.

[Get the Book ](https://skydoves.gumroad.com/l/kotlin-deep-dive?a=705284499&ref=commonmain.dev) 

💲

[How KPayment Makes Google Pay & Apple Pay Boring Across Android, iOS, and Web](https://proandroiddev.com/kpayment-cross-platform-apple-pay-google-pay-for-kotlin-multiplatform-032ebc64ff78?ref=commonmain.dev)  
  
Integrating Apple Pay and Google Pay in a Kotlin Multiplatform app sounds straightforward until you actually try it. Different SDKs, different lifecycles, different UI entry points. Suddenly, your shared UI is full of platform checks, and the platform source sets are packed with empty stubs just to make things compile.

🌤️

[Tiered Data Fetching: How I Reduced API Calls by \~80% Without Sacrificing Freshness](https://medium.com/@ofek.amirav/tiered-data-fetching-how-i-reduced-api-calls-by-80-without-sacrificing-freshness-9e47f55e8161?ref=commonmain.dev)  
  
A cache strategy built around how data actually changes - not how often users open screens. The naive approach to fetching data is simple: the user opens a screen, you fetch the latest data. Every single time. It works. But it’s also incredibly wasteful in ways that compound quickly once you think about the actual nature of the data you’re fetching.

📖

[Gradle vocabulary: projects, builds, artifacts…](https://ivan.canet.dev/blog/2026/03/02/gradle-vocabulary.html?ref=commonmain.dev)  
  
To understand discussions about Gradle, it's necessary to understand how things are named—and that can be quite confusing. This is a short article to summarize the various concepts and list tips and tricks I've learned over the years.

🔍

[I tried context parameters, Kotlin's new multi-receiver extension functions](https://ivan.canet.dev/blog/2025/10/13/kotlin-context-parameters.html?ref=commonmain.dev)  
  
Kotlin is getting a new concept that will widen the possibility of extension functions. The feature is still experimental in the latest Kotlin version, which makes it the perfect time to try them out.

### LazyColumn

Compose Multiplatform tips, tricks, and code snippets.

🚀

[Introducing Rebound: context-aware recomposition budgets for Compose](https://aditlal.dev/compose-rebound/?ref=commonmain.dev)  
  
The Compose ecosystem has solid tooling for tracking recompositions. Layout Inspector shows counts and skip rates. Compiler reports surface stability issues. Rebugger logs argument changes. ComposeInvestigator traces recomposition causes automatically. Each of these tools answers an important question well.  
  
But none of them answer this one:  
"Is this composable recomposing too much **for what it does*?"

👀

[How Compose Preview Works Under the Hood](https://doveletter.dev/preview/articles/compose-preview-internals?ref=commonmain.dev)  
  
In this article, you'll explore the full pipeline that transforms a `@Preview` annotation into a rendered image, tracing the journey from the annotation definition itself, through `ComposeViewAdapter` (the FrameLayout that orchestrates the render), `ComposableInvoker` (which calls your composable via reflection while respecting the Compose compiler's ABI), `Inspectable` (which enables inspection mode and records composition data), and the `ViewInfo` tree that maps rendered pixels back to source code lines.

🏎️

[Under the Hood: How Compose and SwiftUI Handle What Happens Off-Screen](https://www.kmpbits.com/posts/sideeffects-under-the-hood?ref=commonmain.dev)  
  
The user sees a smooth screen transition, a list that populates, a dialog that appears at just the right moment. What they don’t see is the coroutine that launched in the background, the listener that was cleaned up on exit, the scope that held everything together just long enough to be useful. All that happens off-screen. In the pit lane.

### The Dependency Graph

Curated libraries, tools and plugins that won't break your Gradle build.

- [**Rebound**](https://github.com/aldefy/compose-rebound?ref=commonmain.dev)  
Compose recomposition budget monitor — catch runaway recompositions before they ship. Kotlin compiler plugin + IDE cockpit + CLI. Full KMP support.
- [**Composable Selection**](https://github.com/dungngminh/composable%5Fselection?ref=commonmain.dev)  
A lightweight IntelliJ plugin that selects the nearest function call at your cursor. Press again to expand to the parent call — effortless navigation through nested Kotlin function hierarchies.
- [**KPayment**](https://github.com/kttipay/KPayment?ref=commonmain.dev)  
A Kotlin Multiplatform payment library with Compose Multiplatform UI components for Google Pay and Apple Pay across Android, iOS, and Web. One API, shared types, reactive availability detection, and platform-native payment buttons.

### Target: Production

Showcase of real-world apps proving KMP is ready for prime time.

SPONSORED 

Ship your next iOS & Android app in days with Kotlin Multiplatform  
  
Skip the boring setup. [****KMPShip**](https://kmpship.app/?ref=commonmain) is a KMP boilerplate with Firebase auth, RevenueCat, push notifications, CI/CD, and more already wired up. Go from idea to App Store & Google Play in days, not weeks.

[Get Started ](https://kmpship.app/?ref=commonmain) 

[GitHub - kevinguitar/budgetplus: Budget+ is a co-spending tracker, available on Android and iOS. Built by KMP and CMP.Budget+ is a co-spending tracker, available on Android and iOS. Built by KMP and CMP. - kevinguitar/budgetplus![](https://storage.ghost.io/c/57/59/57597180-415a-44ab-aa77-38b4467c31d5/content/images/icon/pinned-octocat-093da3e6fa40-28.svg)GitHubkevinguitar![](https://storage.ghost.io/c/57/59/57597180-415a-44ab-aa77-38b4467c31d5/content/images/thumbnail/budgetplus)](https://github.com/kevinguitar/budgetplus?ref=commonmain.dev)

### Careers

Kotlin Multiplatform job postings and opportunities.

SPONSORED 

[![CTA Image](https://storage.ghost.io/c/57/59/57597180-415a-44ab-aa77-38b4467c31d5/content/images/2026/03/wellfound-symbol-black.webp)](https://wellfound.com/l/2ABERG?ref=commonmain.dev) 

****wellfound** • Where startups and job seekers connect.  
  
🤝 Connect directly with founders at top startups - no third party recruiters allowed.  
💸 Everything you need to know, all upfront. View salary, stock options, and more before applying.  
✌️ Say goodbye to cover letters - your profile is all you need. One click to apply and you're done.  
✨ Unique jobs at startups and tech companies you can’t find anywhere else.

[Find Your Next Remote Job ](https://wellfound.com/l/2ABERG?ref=commonmain.dev) 

👉

[iOS Developer (Swift/KMP)](https://touchlab.co/ioskmp?ref=commonmain.dev) at [Touchlab](https://touchlab.co/?ref=commonmain.dev)  
  
This role will involve directly building client applications using the latest Swift-based tools and Xcode, and coding and interacting with Kotlin libraries. It will include helping to define how our tools will evolve to serve iOS developers better, and directly working on the tools and libraries we publish.

👉

[Kotlin Multiplatform Developer (Contract)](https://touchlab.co/kmpcontract?ref=commonmain.dev) at [Touchlab](https://touchlab.co/?ref=commonmain.dev)  
  
This is a contract relationship for project-based engagements. Touchlab has been at the forefront of Kotlin Multiplatform (KMP) since the first Kotlin code ran on an iPhone. We’ve made significant contributions to the KMP ecosystem and are excited to continue growing and improving the community. We’re looking for talented developers with a strong foundation in ****one or more areas** of software development in the competencies listed below. This is a unique opportunity to work on challenging and innovative projects across different industries, from startups to established enterprises.

🍽️

[Kotlin Multiplatform Product Engineer](https://jobs.superbexperience.com/jobs/5642015-kotlin-multiplatform-product-engineer?ref=commonmain.dev) at [Superb](https://www.superbexperience.com/?ref=commonmain.dev)  
  
Superb gathers all the tools to open, run and grow your hospitality business — in one platform. We are looking for one more remote ****Kotlin Multiplatform Product Engineer** to join our team and play a key role in shaping our mobile products for restaurateurs. In this role, you will work on delivering seamless experiences across multiple platforms using KMP, ensuring high performance and maintainability.

---

#### 🚀 Get Featured!

Got something interesting to share with the Kotlin Multiplatform community? [Submit your link](https://commonmain.dev/submit-your-link/) for a chance to get featured in the next issue of **commonMain.dev**.

#### 🤝 Support the Build

**commonMain.dev** is made possible by our partners. If you have a tool or service that helps KMP developers ship to production faster, we’d love to help you reach our community. [Collaborate with us](https://commonmain.dev/sponsor/).

#### ✍ Code Review

This newsletter is curated and written by a real human being. I’m always looking for ways to optimize the build. Was there something you liked or disliked in particular? Or did you find a bug in this issue? Simply **reply to this email** \- I read every comment from the community and take your feedback into account for the next release.

Until next time,   
**Stay platform-independent!**  
Bogdan • Founder of commonMain.dev

## Sign up for commonMain.dev

The weekly newsletter for Kotlin Multiplatform (KMP). News, jobs, technical deep-dives, and more. Delivered every Tuesday.

Subscribe 

Email sent! Check your inbox to complete your signup. 

No spam. Unsubscribe anytime.