Kotlin Multiplatform Newsletter #39
In this briefing: JetBrains releases Kotlin Toolchain 0.13, recommending it as the default entry point for new KMP projects, and announces the Kotlin Multiplatform Student Contest with trips to KotlinConf 2027 in Kraków. We also explore migrating from SKIE to native Swift export in PeopleInSpace, publishing a single KMP library across six package managers (Maven Central, SPM, pub.dev, npm, PyPI, and web), and unifying iOS and Android deep links into shared commonMain navigation. Plus, ultra-fast Rust-based Kotlin linting with ktrs, pixelating UI previews, and a Senior Staff Engineer role at Fanatics.
The Log
The only Kotlin Multiplatform and Compose Multiplatform news you actually need to know.
Showcase your skills and creativity by building a cross-platform project with Kotlin Multiplatform. Give your project an edge by adding AI capabilities. Get inspiration from our Kotlin AI examples. Submit your project to our contest for a chance to win one of three trips to KotlinConf 2027 in Krakow, Poland. Authors of all other valid entries will receive Kotlin souvenirs!
Amper has evolved into the Kotlin Toolchain, and our blog is moving along with it.
The Kotlin Toolchain is a unified entry point into Kotlin. It lets you build JVM, Android, iOS, multiplatform, and server-side applications with a simple declarative configuration.
With the release of v0.13, we now recommend the Kotlin Toolchain for most new Kotlin Multiplatform (KMP) projects.
Two months ago, we announced the preview of Java and Kotlin by IntelliJ IDEA – an LSP-based extension that brings IntelliJ IDEA’s Java and Kotlin intelligence to third-party editors, starting with VS Code and its forks, such as Cursor.
This was our first step towards bringing IntelliJ IDEA’s Java and Kotlin intelligence beyond the IDE, giving developers and their agents accurate, project-aware code understanding across their tools and workflows.
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.
The SwiftUI client in the PeopleInSpace Kotlin Multiplatform sample has, up to now, consumed the shared Kotlin code through a framework with a generated Objective-C API. It also used SKIE to make that code nicer to use from Swift (for things like sealed classes and flows). Kotlin also has Swift export (currently in alpha) which generates Swift bindings directly, and in this article we’re going to go through what was needed to move PeopleInSpace over to it. The changes are in this PR.
I regularly interview candidates for Android positions. Lately, I’ve been interviewing at least one person every week. In these interviews, candidates have to implement a few simple features in a very simple, two-screen (list-detail) app. This might sound weird, but it’s always surprising to me when someone can handle coroutine cancellation properly. That’s because, at this point, the vast majority of candidates I talk with either don’t know how to do it, or know about it but somehow mess it up anyway. So, in this post I’ll talk about a few cases I’ve seen, and how to fix them.
I started Nepali Date Picker to solve one problem: give Android and iOS a Bikram Sambat date picker that feels exactly like the Material 3 one. I did not plan to end up publishing the same code to six different package ecosystems. But a calendar is not an Android problem or an iOS problem. It is a Nepali problem, and Nepali dates show up on backends, in scripts, on websites, and in Python notebooks just as often as they show up in a mobile UI.
I ran into the messy version of this while wiring up push notifications for a KMP app that had Android and iOS UI sharing a single navigation layer. The notification payload carried an order ID. Tapping it was supposed to open the order detail screen. On Android I had intent filters. On iOS I had Universal Links and a URL scheme. Two platform mechanisms, two ways of receiving the raw URL, and one navigation graph in
commonMain that had no idea any of this existed. The question was where to draw the line between “platform receives the URL” and “shared code decides what to do with it.”LazyColumn
Compose Multiplatform tips, tricks, and code snippets.
When it comes to displaying portfolio data inside of Sleevd, this is only available to users on the Ultimate plan. To hide this functionality from free users, a common approach here is to swap the value out for a placeholder or completely hide the component from view. While this works, I wanted to display the same UI for free and paid users as to give an insight into the information being displayed there which would then become revealed when the user upgrades.
I hope everyone already knows that to check the performance of a Compose app, you need to run it in release mode. Development mode is designed for quick iterations and skips a lot of build-time optimizations. So first of all, if you see that the app is lagging and dropping frames, make sure you’re not running it in development mode.
The Dependency Graph
Curated libraries, tools and plugins that won't break your Gradle build.
- Pixelate
Pixelates Compose Multiplatform content into a mosaic of solid blocks. - ktrs
Kotlin formatter and linter in Rust, drop-in ktfmt and ktlint (2.0 and 1.8) replacements with identical output, 13-190x faster, no JVM. - Waypoint
Product tours, onboarding and feature showcases for Compose Multiplatform (Android, iOS, Desktop, Web) - Ketch
A fast, open-source download manager for every device you own.
macOS · Windows · Linux · Android · iOS · Web · Command line.
A Kotlin Multiplatform library you can embed in your own application.
Target: Production
Showcase of real-world apps proving KMP is ready for prime time.
wellfound • Where great companies meet great people.
The next company that changes the world, and the role that changes yours. Wellfound is where 27,000+ startups hire. Apply directly to the founders and hiring managers building what's next.




Also check out the Product Hunt launch page.
🏆 Winners of the 2026 Kotlin Multiplatform Student Contest
A cognitive training and self-awareness laboratory built with Kotlin Multiplatform. Play science-backed games, track your daily context, and unlock AI-driven insights about your mind
A social scavenger hunt game where friends compete to find and snap items before time runs out. This cross-platform app is built with Kotlin Multiplatform and Compose, providing a seamless experience on both Android and iOS devices.
An application that seamlessly syncs clipboard text across devices on the same local network. It currently supports Android and Desktop (JVM), featuring a secure pairing & approval flow, echo suppression (to prevent sync loops), and a configurable local clipboard history.
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.
New York, NY, United States - Remote
As a Sr. Staff Engineer at Fanatics, you are a recognized technical leader. You operate both strategically and hands-on while leading ambitious projects, and your solutions set the standard for the team. Your bold decisions balance immediate business needs with long-term technical excellence. Through your leadership, you cultivate a culture of excellence and innovation that leaves a lasting impact.
🚀 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


