Kotlin Multiplatform Newsletter #21
Hi everyone! Bogdan 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.
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 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.
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.
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.
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 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.
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.
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.
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.
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 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
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
A simple web application that helps you understand how operators work with flows through interactive diagrams (implemented in Compose Multiplatform). - KitePDF
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.
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.

Careers
Kotlin Multiplatform job postings and opportunities.
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.
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 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.
✍ 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
