> ## 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 #21
- URL: https://commonmain.dev/kotlin-multiplatform-newsletter-21/
- Published: 2026-06-09T13:00:03.000Z
- Updated: 2026-06-12T12:24:38.000Z
- Author: Bogdan Codes
- Tags: Issues

[Milestone achieved: commonMain.dev has surpassed 300 subscribers! 🎉](https://commonmain.dev/kotlin-multiplatform-newsletter-20/)  
  
Hi everyone! [Bogdan](https://www.linkedin.com/in/bogdancodes/?ref=commonmain.dev) here, founder and curator of the commonMain.dev newsletter. I want to personally thank each of you for subscribing and reading along every week. I hand-curate the news and insights for every single issue, so it’s incredibly rewarding to see so many of you opening and enjoying these emails. I have a lot of exciting ideas in store to make the newsletter even better, so stay tuned!   
  
Enjoy this week's edition, and feel free to share it with anyone else who might be interested. Thank you!

This week, we unpack the massive **Kotlin 2.4.0** launch - bringing stable context parameters and Native Swift package dependencies, and celebrate **Koin Compiler 1.0** delivering true compile-safe dependency injection without KSP. We also dive into real-world engineering at Booking.com, building cross-platform NFC and BLE tools, and surviving Jetpack Compose "nested bracket hell." Plus, an open **Senior Engineering Manager** seat at Fanatics Markets.

### **The Log** 

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

[Kotlin 2.4.0 Released](https://kotlinlang.org/docs/whatsnew24.html?ref=commonmain.dev)  
  
The Kotlin 2.4.0 release is out! Here are the main highlights:  
\- ****Language**: Stable context parameters, explicit backing fields, and multiple features for annotation use-site targets.  
\- ****Standard library**: Stabilized support for the UUID API and support for checking sorted order.  
\- ****Kotlin/JVM**: Support for Java 26 and annotations in metadata enabled by default.  
\- ****Kotlin/Native**: Support for Swift packages as dependencies, updates on Swift export, and the CMS GC enabled by default.  
\- ****Kotlin/Wasm**: Incremental compilation enabled by default and support for WebAssembly Component Model.  
\- ****Kotlin/JS**: Support for value class export and ES2015 features in JS code inlining.  
\- ****Gradle**: Compatibility with Gradle 9.5.0.  
\- ****Maven**: Automatic alignment between Java and JVM target versions.  
\- ****Kotlin compiler**: More consistent inline function behavior during `.klib` compilation.

[Koin Compiler 1.0: DSL and Annotations, Now Compile-Safe](https://blog.insert-koin.io/koin-compiler-1-0-dsl-and-annotations-koin-now-compile-safe-06905a2b04ad?ref=commonmain.dev)  
  
****Koin Compiler 1.0 is out.** Koin’s DSL and annotations now sit on a native Kotlin compiler plugin that verifies your dependency graph at build time: the missing-definition error that used to wait for a `get<T>()` call no longer makes it past `gradlew build`.   
  
No KSP, no generated files, full Kotlin Multiplatform support out of the box. It’s the biggest ergonomic shift we’ve made in Koin’s nine-year history.

### **The Main Thread**

Community's most insightful threads, curated from social media platforms and websites.

[What Nobody Told Us About KMP on iOS](https://youtu.be/efT95%5F%5FW%5FoU?ref=commonmain.dev)  
  
Three Android developers. Zero Swift experience. A two-month deadline.  
At KotlinConfersations'2026, Suhyeon (Leah) Kim shares how her team used KMP to build and ship a brand-new iOS app despite having no iOS developers on the team.

[Am I the only one who finds Jetpack Compose syntax absolutely unreadable and ugly?](https://www.reddit.com/r/JetpackCompose/comments/1u02exh/am%5Fi%5Fthe%5Fonly%5Fone%5Fwho%5Ffinds%5Fjetpack%5Fcompose/?utm%5Fsource=share&utm%5Fmedium=web3x&utm%5Fname=web3xcss&utm%5Fterm=1&utm%5Fcontent=share%5Fbutton)  
  
Every single UI layout turns into a giant waterfall of nested trailing lambdas. There are curly brackets inside normal parentheses, inside more curly brackets, and if you accidentally put a bracket on a new line (like right after setContent), the whole compiler falls apart. I am experiencing a complete "nested bracket hell" right now and constantly losing track of where a component starts or ends.

### Expect Actual

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

SPONSORED 

****Stop treating Kotlin like a black box! 🧠**  
  
To build truly performant multiplatform apps, writing code that just "works" isn't enough. We need to understand what the compiler is actually doing under the hood.

That’s why I highly recommend [****Practical Kotlin Deep Dive**](https://skydoves.gumroad.com/l/kotlin-deep-dive?a=705284499&ref=commonmain.dev) by skydoves. This isn't a basic syntax guide, it breaks down Kotlin internals, bytecode, and coroutines. It’s been a total game-changer for me when writing and optimizing shared code.  
  
If you want to level up your Kotlin and KMP skills to a senior standard, you need this on your desk.

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

[Kotlin Multiplatform in Production: Two Real-World Use Cases from Booking.com](https://medium.com/booking-com-development/kotlin-multiplatform-in-production-two-real-world-use-cases-from-booking-com-46ffe13a773d?ref=commonmain.dev)  
  
This article examines two specific engineering challenges solved using Kotlin Multiplatform (KMP) and Compose Multiplatform (CMP):  
1\. Developing a shared experimentation library to ensure uniform experiment assignments across Android and iOS.  
2\. Using Compose Multiplatform to host our Android design system in a web browser, bridging the gap between design concepts and implementation.  
  
While both cases use the same underlying technology, each provides unique insights into multiplatform development.

[Compose Multiplatform BLE Tools: One Compose UI Over Two Native Bluetooth Stacks](https://medium.com/@rwatson%5F86305/compose-multiplatform-ble-tools-one-compose-ui-over-two-native-bluetooth-stacks-7aa4e4a38534?ref=commonmain.dev)  
  
Bluetooth Low Energy looks straightforward from a distance. Scan for devices, connect to one, discover services, read a characteristic, maybe subscribe to notifications. The API names make the workflow sound linear and friendly.  
  
Across two platforms, it is not quite that simple.

[Adding NFC to Compose Multiplatform: Android, iOS, and Desktop](https://medium.com/@rwatson%5F86305/adding-nfc-to-compose-multiplatform-android-ios-and-desktop-2a51e6ac0734?ref=commonmain.dev)  
  
This article walks through a working implementation that covers all three platforms and does three things on each: read any NFC tag, write an NDEF message to a tag, and read the public data a contactless EMV payment card exposes. The focus is on the decisions that required real investigation — the places where the documentation is silent and the behavior only makes sense once you have traced what is actually happening on a device.

### LazyColumn

Compose Multiplatform tips, tricks, and code snippets.

[Through the Lens: Barcode Scanning in Compose Multiplatform](https://www.kmpbits.com/posts/barcode-scanning-compose-multiplatform?ref=commonmain.dev)  
  
CMP’s interop surface has grown enough now that you can drive the camera from a shared Composable, and the tool that makes it clean is one you already know: `expect`/`actual`. Not in a ViewModel, not in a repository. At the Composable level itself. The shared screen declares the contract; each platform provides its own camera.

[Scratchify - A Compose Multiplatform Scratch Card SDK](https://github.com/gsrathoreniks/Scratchify?ref=commonmain.dev)  
  
Scratchify is a powerful and highly customizable scratch card SDK built using Jetpack Compose Multiplatform. It enables you to create engaging interactive scratch surfaces where users can scratch off an overlay to reveal hidden content underneath. Perfect for reward systems, discount reveals, surprise elements, and gamification in your modern apps!

### The Dependency Graph

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

- [**Ghost Serializer**](https://github.com/juanchurtado1991/ghost-serializer?ref=commonmain.dev)  
A zero-copy, KMP-ready JSON parser. It uses KSP to generate reflection-free, highly optimized Field Tries that operate directly on contiguous memory buffers, achieving very high throughput and very little GC pressure.
- [**FlowMarbles**](https://terrakok.github.io/FlowMarbles/?ref=commonmain.dev)  
A simple web application that helps you understand how operators work with flows through interactive diagrams (implemented in Compose Multiplatform).
- [**KitePDF**](https://github.com/yuroyami/KitePDF?ref=commonmain.dev)  
PDF library written in pure Kotlin (reading, viewing, rendering, editing and creating PDFs) for Android, iOS, Web and JVM Desktop. No JNI or expect/actuals, only 100% Kotlin. Supports Compose Multiplatform.

### Target: Production

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

SPONSORED 

****Profitable mobile app for sale • Yazcam**  
  
Yazcam is an AI-powered dating assistant that helps users analyze chat screenshots and generate better replies, opening lines, and messaging strategies. The app is available on iOS and Android, monetized through subscriptions, and growing organically through short-form social content. It is built with Swift for iOS and Kotlin for Android.

[Contact seller ](https://trustmrr.com/startup/yazcam?ref=bogdan-ddd454) 

[GitHub - maxrave-dev/SimpMusic: A cross-platform music app using YouTube Music for backendA cross-platform music app using YouTube Music for backend - maxrave-dev/SimpMusic![](https://storage.ghost.io/c/57/59/57597180-415a-44ab-aa77-38b4467c31d5/content/images/icon/pinned-octocat-093da3e6fa40-84295cde-1b2f-4af8-9114-2ec7918625a7.svg)GitHubmaxrave-dev![](https://storage.ghost.io/c/57/59/57597180-415a-44ab-aa77-38b4467c31d5/content/images/thumbnail/d1caf378-9996-45bd-aad8-360494ce98be-67c24c41-09dc-4cf6-9ccf-352203f5e430)](https://github.com/maxrave-dev/SimpMusic?ref=commonmain.dev)

[Free Workout Logger & Progressive Overloading TrackerPlates is a free, private, offline workout logger for iOS and Android. Track sets, reps and weight, customise your splits, and watch your progressive overloading over time. No ads, no subscriptions.![](https://storage.ghost.io/c/57/59/57597180-415a-44ab-aa77-38b4467c31d5/content/images/icon/appicon-d048ddfc-abf7-4364-bead-1fef36ddfa76.webp)PlatesPlates![](https://storage.ghost.io/c/57/59/57597180-415a-44ab-aa77-38b4467c31d5/content/images/thumbnail/socialpreview-1e14093e-ce2c-4bca-952e-385ebfc769dc.jpg)](https://www.plates-gym.app/?ref=commonmain.dev)

[GitHub - iammohdzaki/OneTask-Desktop: OneTask is a flexible, block-based workspace application built with Compose Multiplatform. It allows you to organize your thoughts, tasks, and data in a unified environment that feels local-first and high-performance.OneTask is a flexible, block-based workspace application built with Compose Multiplatform. It allows you to organize your thoughts, tasks, and data in a unified environment that feels local-first a…![](https://storage.ghost.io/c/57/59/57597180-415a-44ab-aa77-38b4467c31d5/content/images/icon/pinned-octocat-093da3e6fa40-640c71ef-4eb4-484c-ac15-0e057c9b9793.svg)GitHubiammohdzaki![](https://opengraph.githubassets.com/347efe706bccab4cc68bf61a0fd60fd1637469d6735a8bc7080d5ca464ee5911/iammohdzaki/OneTask-Desktop)](https://github.com/iammohdzaki/OneTask-Desktop?ref=commonmain.dev)

### Careers

Kotlin Multiplatform job postings and opportunities.

SPONSORED 

****hackajob** • **Meet Archer, your AI job matching agent**  
  
5x more interviews. Zero guesswork.  
  
Archer works 24/7 to find roles where you genuinely match and shows you exactly why — so you apply with confidence, not blind hope.

[Create your free profile ](https://hackajob.com/talent/invite?referral%5Fid=ce111234ec9b294c075f&ref=commonmain.dev) 

[Senior Engineering Manager - Mobile](https://job-boards.greenhouse.io/fanaticsfbg/jobs/4260459009?ref=commonmain.dev) at [Fanatics Markets](https://fanaticsmarkets.com/?ref=commonmain.dev)  
  
This is a ****fully remote, US-based role** for someone in the ****EST or CST time zones**, with a salary range of ****$204,250–$268,750 USD**.  
Fanatics Markets is building a real-money prediction and trading app at the intersection of ****sports, entertainment, culture, and financial markets**. This role will lead the mobile engineering team powering the app and help shape our ****Kotlin Multiplatform strategy** as we scale.

---

#### 🚀 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

Every Tuesday, the few KMP links actually worth your time.  
Hand-picked, no AI filler.

Join free 

Email sent! Check your inbox to complete your signup. 

Free forever · One email every Tuesday · No spam, unsubscribe anytime.  
Hand-picked by a senior engineer (8+ yrs) · Read by KMP engineers & tech leads.