Kotlin Multiplatform Newsletter #28
JetBrains and RevenueCat team up for the Ship Kotlin Everywhere Shipaton! We also examine two remarkable real-world KMP transformations: building Multidex across three targets using Kotlin 2.4 and Material 3 Expressive, and how GeoKrishi Farm scaled from a meager 848 shared lines to a 93% shared codebase across 46 modules. Plus, an 8x RPG engine speedup by migrating Compose Canvas to Google Filament, locale-aware formatting in commonMain via Klocale, and a Senior Kotlin role at Accesa.
The Log
The only Kotlin Multiplatform and Compose Multiplatform news you actually need to know.
Reuse the Kotlin you know to build and launch a real app across Android, iOS, desktop, and web. Then compete for the Ship Kotlin Everywhere Award.
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.
Multidex is a Pokédex app that ships to Android, iOS and Desktop (JVM) from one Kotlin codebase — Kotlin 2.4, Compose Multiplatform 1.9, Material 3 Expressive. It's live on Google Play, and this post is the honest write-up I wish I'd read before starting: how the modules are cut, what shared beautifully, and where the platform seams still show.
This series is the story of the rebuild: how GeoKrishi Farm went from that number to 46 Gradle modules with 93% measured shared code, live on both stores, without users ever noticing the swap. This first part is the case study — what the fork looked like, why it happened to a reasonable team, and what the rebuild changed, in numbers I can defend line by line.
That’s paging. You don’t pull four thousand rows into memory because the user might scroll that far. You pull thirty, and you pull the next thirty while they’re still reading the first ones.
LazyColumn
Compose Multiplatform tips, tricks, and code snippets.
While pure Compose Canvas was an incredible playground for prototyping the engine and keeping everything strictly in Kotlin, expanding the tilemap, weather, and dynamic lighting eventually pushed me into a hard bottleneck on the CPU. To fix this without breaking the live game or throwing away my canvas codebase, I decided to overhaul the world rendering pipeline and migrate it to Google Filament.
The Dependency Graph
Curated libraries, tools and plugins that won't break your Gradle build.
- Klocale
Comprehensive, locale-aware number and value formatting for Kotlin Multiplatform — the missingNSNumberFormatter/Intl.NumberFormat/ ICUNumberFormatequivalent usable straight fromcommonMain, with consistent output across every target. - Andy
Andy is a desktop helper for Android, Kotlin, and Compose Multiplatform developers. Use it to manage devices and emulators, mirror screens, inspect apps, and drive day-to-day mobile workflows from one place. - CloudBridge
Multiple clouds, one Kotlin Multiplatform bridge. Supporting Android, iOS, web and desktop (JVM). - log4k
A robust, event-driven logging and tracing platform specifically designed for Kotlin Multiplatform (also compatible with the Java ecosystem). Built with coroutines and channels at its core, it offers asynchronous, scalable logging across multiple platforms. - KSafe
A library for saving key/value pair data for Kotlin Multiplatform and Android. Encryption enabled by default, with option for Plain (unencrypted) storage. Supports Property Delegates, Flow/StateFlow, with Jetpack Compose and biometrics integration using hardware-backed encryption.
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.
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 are looking for a Senior Kotlin Developer who is experienced in Kotlin Multiplatform delivery, comfortable owning complex shared modules in a layered architecture, and motivated by the challenge of building the reliable, platform-agnostic foundation that modern retail operations depend on.
🚀 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
