7 min read

Kotlin Multiplatform Newsletter #21

Milestone achieved: commonMain.dev has surpassed 300 subscribers! 🎉

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.

Kotlin 2.4.0 Released

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

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

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?

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.

Kotlin Multiplatform in Production: Two Real-World Use Cases from Booking.com

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

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

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

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

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.

GitHub - maxrave-dev/SimpMusic: A cross-platform music app using YouTube Music for backend
A cross-platform music app using YouTube Music for backend - maxrave-dev/SimpMusic
Free Workout Logger & Progressive Overloading Tracker
Plates 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.
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…

Careers

Kotlin Multiplatform job postings and opportunities.

Senior Engineering Manager - Mobile at Fanatics Markets

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.

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