Kotlin Multiplatform Newsletter #32
Five weeks remain to submit your project to the JetBrains Shipaton for a shot at the $30,000 prize pool and a Times Square billboard spot, supported by the new AI-ready "Koko" starter kit. We also break down how Kotlin/Native invokes iOS platform APIs directly without Swift bridges, walk step-by-step through porting JNI-bound Android libraries to KMP, and compare vertical versus horizontal architecture slicing. Plus, runtime accessibility debugging via ComposeA11yScanner, zero-reflection validation with Valix, and a remote Senior Mobile position at Fanatics.
The Log
The only Kotlin Multiplatform and Compose Multiplatform news you actually need to know.
Build and ship a mobile app with KMP by Sep 30, compete for the Ship Kotlin Everywhere Award, $30,000 across three winners, top app goes on a Times Square billboard. Starter Guide, AI Guide, IntelliJ IDEA Ultimate and Junie access included.
We are thrilled to announce the KMP Contest Starter Kit (nicknamed “Koko”), a new open-source, AI-ready framework designed to help developers build and publish commercial-ready Android and iOS applications using Kotlin Multiplatform (KMP).
We're looking for beautiful real-world apps built with Compose Multiplatform to feature on Kotlin and JetBrains websites, social media channels, in presentations, and across other promotional materials. If your app is live in production or available in public beta, we'd love to see it!
The form takes about five minutes to complete. If your submission is selected, we'll get in touch to confirm all the details before anything is published.
The Main Thread
Community's most insightful threads, curated from social media platforms and websites.
Looking at making an app using Kotlin Multiplatform, is it better to use IntelliJ or Android Studio for the development? I can see they both are supported natively, but what would be reasons to use one over the other?
Struggling with how to break down a large mobile app project? Learn the difference between vertical and horizontal slicing and discover the best approach to tackle your app development efficiently. Understand why starting with shared infrastructure is crucial and how to structure your project for better maintainability and faster build times.
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.
My validation rules were already shared. That part I had right years ago:
ValidateEmailUseCase, ValidatePasswordUseCase, plain Kotlin in commonMain, called from a shared ViewModel that drove both the Compose screen and the SwiftUI one. One rule, one place, both platforms. If you had asked me whether form validation was a solved problem in my apps, I would have said yes.While working on a Kotlin Multiplatform (KMP) project, I was spending time inside the
composeApp/iosMain source set when I noticed something that genuinely caught my attention: I was writing iOS-specific code directly in Kotlin. No Swift file, no switching languages, just Kotlin. And if you’re thinking this is simply another cross-platform approach where platform-specific code works through a bridge, similar to Flutter or React Native, that’s not what’s happening here.A concrete, in-order walkthrough for turning a JNI-only Android library into a Kotlin Multiplatform one, using
TiffRenderer's actual files as the worked example at every step.LazyColumn
Compose Multiplatform tips, tricks, and code snippets.
A polished country calling-code picker for Compose Multiplatform. Search countries, display recent selections, format input, and validate phone numbers locally on Android and iOS.
ComposeA11yScanner is a debug-only runtime scanner that finds accessibility issues in Jetpack Compose and highlights them directly on the rendered UI. Inspect the affected element, understand the problem, and see a suggested fix without leaving the app.
The Dependency Graph
Curated libraries, tools and plugins that won't break your Gradle build.
- Coroutine Leak Detector
Android Studio plugin that catches common Kotlin coroutine and Flow mistakes (leaks, ANRs, flaky tests) with context-aware quick fixes. - Valix
Compile-time generated, zero-reflection validation framework for Kotlin using KSP. Type-safe validation for Android, Ktor, Spring, Micronaut, and Kotlin Multiplatform. - TiffRenderer
A Kotlin Multiplatform library for decoding and rendering TIFF images — Android, iOS, and JVM/desktop — including multi-page/multi-directory TIFFs, on top oflibtiff.
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!

GitHub link available here.

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 match you with roles that fit your stack and seniority. You review the matches, not the job boards.
We embrace principles of data-driven development, operational excellence, and continuous process optimization to deliver a stable, scalable platform. Central to our strategy is Kotlin Multiplatform, which empowers us to deliver high-quality features quickly and consistently across multiple ecosystems.
🚀 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

