Kotlin Multiplatform Newsletter #40
The Kotlin compiler sets JDK 17 as its minimum runtime starting in Kotlin 2.5, SKIE and Swift Export are compared for modern iOS interop, and Verifone’s lead architect shares lessons on compiler-enforced rules in mission-critical payment systems. We also explore sharing design tokens across native UIs, shipping an AI running coach with a native Apple Watch app in KMP, and visual diff testing with Spyglass (with full MCP support for AI coding agents). Plus, roles at Fanatics and ELEKS.
The Log
The only Kotlin Multiplatform and Compose Multiplatform news you actually need to know.
Here's the plan:
• 2.5.0-Beta1: A warning when you run the compiler on a JDK older than 17.
• 2.5.0-Beta2 and 2.5.0: An error, with a flag to keep using your current JDK for now.
• 2.5.20-Beta1 and later: JDK 17 or newer is required.
If your machines or CI still run the compiler on an older JDK, now is a good time to plan the update.
The Main Thread
Community's most insightful threads, curated from social media platforms and websites.
Kotlin Multiplatform has long had a challenge when it comes to Swift interoperability. Kotlin/Native relies on an Objective-C interface, which can make working with features like Flow, suspend functions, enums, and sealed classes more complicated for iOS developers. SKIE has helped teams work around these limitations for years. Now, JetBrains is developing Swift Export as a different approach.
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.
Yuri is an architect at Verifone, where he works across payment terminals, gateways, and the systems that connect them to banks and regulators in the EMEA region. His method, in one line: write code in the exact words of the regulator or card network specs, and let the compiler enforce it. Enforce not by discipline, but by the compiler.
A while ago I wrote about enforcing design system rules with Detekt, and I was pleased with myself. Colors, spacing, all of it behind a rule. Then I started moving the iOS side of a template project onto the same tokens, and I went looking for every rounded corner in both apps.
The problem never was that the values were wrong. The problem was that
medium doesn’t say what it’s for, so every component picks a number and every platform picks a different one.I wanted one app, written once in Kotlin Multiplatform, running on my Mac, my Android phone and an iPhone, that could talk to all of them. KMP is very good at sharing code across platforms. It is very bad at physics. No amount of
expect and actual will make a MacBook emit infrared. I checked.I build Flux Run, an AI running coach for iPhone and Android, as a solo developer. The app itself is written once in Kotlin Multiplatform: run recording, pace and split maths, reminders, and the Compose Multiplatform UI. The AI coaching is not in the app: it runs on a separate backend service, and the app talks to it and shows what it returns. Around that sits a small amount of native code where the platform really matters. Here is where the line fell, and the two things that bit me.
LazyColumn
Compose Multiplatform tips, tricks, and code snippets.
Compose Multiplatform components, rebuilt from scratch and recorded as short clips. One Kotlin codebase, the same pixels on Android and iOS.
The Dependency Graph
Curated libraries, tools and plugins that won't break your Gradle build.
- Device Hub Pro
Android and iOS devices, side by side on your Mac. Mirror, control, change settings and capture — free and open source. - Compose DND
A library that allows you to easily add drag and drop functionality to your Jetpack Compose or Compose Multiplatform projects. - Spyglass
Spyglass renders your Compose@Previewfunctions to PNG with no IDE, emulator or device, then compares them with a design image and tells you exactly where they differ. It works from the command line, in CI, and as an MCP server, so a coding agent can look at the UI it just wrote, compare it with the mock and fix the gaps on its own.
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.

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.
Lviv, Ukraine - Remote
The project is a set of software applications, infrastructure, and hardware resale in the domain of Convenience Store Supply and Logistics/Products Wholesale. Our products simplify the workflows of the distribution business and give business flexibility and mobility. iOS solutions are designed for ordering a variety of products. The client's business operates in the United States and Canada.
🚀 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

