Kotlin Multiplatform Newsletter #13
We celebrate the Golden Kodee Awards finalists and dive into a technical deep dive on running Room databases client-side in the browser via Kotlin/Wasm and SQLite. We also explore how Koin annotations can make expect/actual obsolete, the implementation of cross-platform shaders in Compose Multiplatform, and a breakdown of shared element transitions in Navigation 3. Plus, new tools for validation, geolocation, and a cyberpunk glitch effect in Jetpack Compose.
The Log
The only Kotlin Multiplatform and Compose Multiplatform news you actually need to know.
Winners will be announced at KotlinConf'26 in Munich, May 20-22.
The Main Thread
Community's most insightful threads, curated from social media platforms and websites.
Not sure when it happened, but at some point I contracted this strange illness that compels someone to tinker with their OS on their spare time. The latest symptom: a floating clock widget written in Powershell, that is visible at all times. (I hide my taskbar cause I pretend I'm a minimalist).
Since
Powershell kinda sucks, I wondered if I could do the same with a proper Compose desktop app. Let's lose a few braincells together, shall we?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.
expect/actual Obsolete in KMPToday, we can go further. With Koin annotations and the Koin compiler, you can completely bypass
expect/actual. This method works seamlessly with Compose Multiplatform and lets you maintain a clean architecture while keeping platform-specific logic where it belongs.Room 3.0 shipped with Kotlin Multiplatform support, and tucked inside that release is something most developers missed: web support. Not “web” as in REST APIs. Actual Room database operations, running client-side in the browser, powered by SQLite compiled to WebAssembly and storing data in the Origin Private File System (OPFS).
This article walks through a minimal working example — a Note-taking app — to show exactly how this works, what the moving parts are, and where the gotchas hide.
LazyColumn
Compose Multiplatform tips, tricks, and code snippets.
In this article, you’ll learn how to build a clean and reusable shader abstraction using Compose Multiplatform that works seamlessly across Android, iOS, Desktop (Windows/macOS/Linux), and Web (WASM/JS) from a shared
commonMain codebase.This is a place to learn how to build delightful apps. Here you will find illuminating articles, detailing implementation of inventive and mesmerizing designs, using Jetpack Compose.
Glitch effects are a staple in sci-fi movies and cyberpunk games. In this article, we will see how easy it is to implement this effect in Jetpack Compose.
I had Navigation 3 set up, screens were flowing, and I wanted to add shared element transitions. An image from a list item that morphs into the header of a detail screen. The kind of detail that makes an app feel deliberate. I spent an afternoon hunting for the Nav3 equivalent of what I knew from Navigation 2. Found nothing. So I did what any developer does under a deadline: I switched back to Nav2 and shipped.
Months later, while reading through the Navigation 3 source, I found
LocalNavAnimatedContentScope. It had been there the whole time. The smooth handoff was always available. I just did not know where to pick up the baton.The Dependency Graph
Curated libraries, tools and plugins that won't break your Gradle build.
- KVerify
Type-safe, composable validation for Kotlin Multiplatform. KVerify is what validation should have been. A clean DSL, typed failures, automatic path tracking — and nothing your project didn't already have. - barK
A lightweight, extensible logging library for Kotlin Multiplatform. - RikkaIcons
Semantic icon tokens for Compose Multiplatform. One API, any icon pack. Built with & for Jetpack Compose. - Geolocation-KMP
A hassle-free Geolocation and Geocoding library for KMP. Get location permissions, fetch GPS coordinates, and translate them into localized street addresses using a clean, coroutine-first API. - FileMapper KMP
A lightweight, powerful Kotlin Multiplatform (KMP) library designed to seamlessly map files (XLSX, JSON) to Kotlin Data Classes. Supporting Android, iOS, Desktop, and Web (Wasm/JS), it provides both Compose-ready UI triggers and pure logic-based APIs.
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!

→ Play Store version available here.

→ Link to Kado GitHub Repository
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.
🚀 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
