Kotlin Multiplatform Newsletter #18
We cover the dual arrivals of Kotlin 2.3.20 and Compose Multiplatform 1.11.0, mapping out the massive upgrades to iOS, Web, and UI testing. We explore a foundational shift toward Name-Based Destructuring, an upcoming new default KMP project structure, and critical technical walkthroughs—including avoiding silent plain-text database bugs when mixing SPM imports with Room encryption. Plus, we highlight game-changing local AI tooling via Llamatik and open positions at VirtusLab and CUJU.
The Log
The only Kotlin Multiplatform and Compose Multiplatform news you actually need to know.
The Kotlin 2.3.20 release is out! 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.
A new release of Compose Multiplatform has landed, with improvements to the iOS and web experience and a refreshed approach to UI testing. Read on for the highlights, or for the complete list of changes, check out the What’s New.
We are updating the default project structure for Kotlin Multiplatform projects to give modules clearer responsibilities, better align with conventions used by other build systems and frameworks, and reflect the changes in Android Gradle Plugin 9.0.
Kotlin is changing, with names set to become central in destructuring. In the future,
val (name, age) = person will extract the name and age properties from the person value, regardless of the way and order in which they were defined. This marks a change from the current approach to destructuring, in which the position is the key element. This blog post explains the reasoning behind this change, the migration strategy, and how Kotlin’s tooling supports it.We want to better understand how Kotlin developers use AI today, what works well, where the friction points are, and what opportunities lie ahead. That’s why we’re launching a short community survey focused on AI-assisted development with Kotlin.
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.
KMP Splash is a Gradle plugin that handles the entire splash screen setup for both Android and iOS from a single config block. This is about why I built it and how it evolved. The README has the full setup. This is the story behind it.
My KMP project uses Kotlin’s experimental SPM import (not CocoaPods) to bring in Firebase iOS SDK, GoogleSignIn, and SQLCipher.swift, the moment Firebase entered the picture, the iOS database stopped being encrypted. No crash, no error thrown, just a silently plaintext database, just like being left on seen by your crush.
LazyColumn
Compose Multiplatform tips, tricks, and code snippets.
In this post, we’ll learn how to make GPU shader effects from scratch, talk about the problems that come up when working on multiple platforms, and see how the ShaderX library I made makes everything easier to understand with a simple API.
After working through the exercises and testing it against a real design system used by 60+ engineers, it became clear that this API introduces a missing layer in Compose — one that changes how we should think about component architecture, not just styling.
Showcase of common use cases & patterns when working with Compose Multiplatform Navigation3.
Compose Unstyled 2.0 is finally out, and I'm incredibly stoked I get to talk to you about it!
The Dependency Graph
Curated libraries, tools and plugins that won't break your Gradle build.
- KMP Splash
Professional Splash Screens for Compose Multiplatform, configured in seconds. - Some
A Kotlin JVM library that generates populated instances of any Kotlin class for testing purposes, with zero configuration required. - ShaderX
GPU shader effects for Compose Multiplatform — one API, every platform. - AI agent skills for Kotlin
A collection of AI agent skills useful for projects using the Kotlin language. - JetBrains ecosystem plugin
The JetBrains ecosystem plugin is an experimental plugin for Declarative Gradle, Gradle's new declarative build language. You can use this plugin to explore Declarative Gradle itself and a new approach to organizing Kotlin build scripts. - KMP flavorizr
A Gradle plugin for configuring build flavors (variants) across Android and iOS in Kotlin Multiplatform projects. Define your flavors once in Gradle DSL and let the plugin generate the platform-specific configuration files. - Llamatik
True on-device AI for Kotlin Multiplatform (Android, iOS, Desktop, JVM, WASM). LLM, Speech-to-Text and Image Generation — powered by llama.cpp, whisper.cpp and stable-diffusion.cpp.
Target: Production
Showcase of real-world apps proving KMP is ready for prime time.
Carrd - Simple, free, fully responsive one-page sites for pretty much anything.
Whether it's a personal profile, a landing page for your KMP project, or something a bit more elaborate, Carrd has you covered. Simple, responsive, and yup — totally free!

Careers
Kotlin Multiplatform job postings and opportunities.
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.
We are looking for engineers interested in building various tooling using mainly Kotlin. Our team is working on IntelliJ plugin, IDEs, coding agents or frameworks for Local AI inference. Your job will be focused 100% on technology and your users will be developers. You will work within, small, flexible team and you will have a lot of autonomy: you will be responsible for design, scope, testing and implementation. You will work with tooling engineers, and you will be part of an organisation specialized in developer tooling.
We’re building a scalable cross-platform product using Kotlin Multiplatform Mobile (KMP) to deliver consistent quality and speed across Android and iOS — and we’re looking for a Senior Android Developer who can help us take CUJU to the next level.
🚀 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
