9 min read

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.

Calling all students and recent graduates: Join the Kotlin Multiplatform Contest and win a trip to KotlinConf 2027!

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 Is Now the Kotlin Toolchain: Moving to the Kotlin Blog

Amper has evolved into the Kotlin Toolchain, and our blog is moving along with it.
Start Your Next KMP App With Kotlin Toolchain 0.13

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.
Java and Kotlin by IntelliJ IDEA: The LSP-Based Extension Reaches Release Candidate

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.

Moving from SKIE to Swift export in a Kotlin Multiplatform project

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.
Coroutines Need Your Cooperation

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.
Publishing one Kotlin Multiplatform library to six places: Maven Central, SPM, pub.dev, npm, PyPI, and the web

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.
Box, Box: Deep Links in Kotlin Multiplatform

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.

Pixelating Composables in Compose Multiplatform

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.
Profiling a Compose Multiplatform app in the browser

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.

DotTide - Every tap matters
Connect colorful dots, plan your next move and build your mastery. Available now on Android and iOS.
Sleevd - TCG Management - Apps on Google Play
Track your trading card collection across Pokemon, Magic, One Piece and more!
HealthCoach | Local-First Personal Wellness & Health Tracking
Personal health tracking application with zero telemetry, embedded SQLite database, multi-platform desktop and mobile support, nutrition logging, blood pressure analysis, and private peer sync.
PixRater - Free download and install on Windows | Microsoft Store
PixRater is a culling tool featuring a clean, modern interface designed to help you efficiently select your private photos after a shoot. To keep your culling process organized from the start, matching RAW and JPEG pairs are consistently treated as a single image. A key feature of the software is the automated facial sharpness analysis. For portraits, you can assess the focus directly without having to manually zoom into every single image. Organizing your shots is then effortless using star ratings (1–5) and intuitive pick or reject decisions. For the subsequent tagging of your photo collection, PixRater uses a local AI that analyzes your image content and provides precise suggestions for people and keywords. You can customize the catalog for these suggestions to perfectly match your personal workflow. This is complemented by batch editing, allowing you to efficiently adjust dates, locations, and tags for multiple images simultaneously. Via the integrated local MCP server, you also have the flexibility to connect your own AI tools. PixRater intentionally avoids a closed catalog. All given ratings, flags, and keywords are saved future-proof directly into standardized EXIF, IPTC, and XMP metadata or as XMP sidecars. This ensures your data is immediately available in all popular photo editing software. The entire image analysis and processing takes place 100% locally on your PC. The software requires no account, uses no tracking, is ad-free, and works completely without cloud dependency. Please note: PixRater is a tool exclusively for home use; any commercial or business use is expressly excluded.

Also check out the Product Hunt launch page.

🏆 Winners of the 2026 Kotlin Multiplatform Student Contest

Clarity
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
Huntit
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.
ClipWhisper — Clipboard Sync
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.

Senior Staff Engineer - Mobile/Kotlin at Fanatics
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.

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