6 min read

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.

The Kotlin compiler is moving to JDK 17 as its minimum runtime.

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.

What’s the Right Choice for Your Kotlin Multiplatform Project: SKIE or Swift Export?

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.

KotlinConf Recap: Lessons from Verifone’s Architect on Kotlin in Mission-Critical Payments

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.
Front Wing, Not Small Wing: Design Tokens for Native UI in KMP

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.
Kotlin Multiplatform, Infrared and Wi-Fi: A Remote for Everything That Blinks or Listens

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.
What I learned shipping a running app with Kotlin Multiplatform, Compose, and a native Apple Watch app

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-lab

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 @Preview functions 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.

Flux Run – Your AI running coach, in your pocket
Flux Run is an AI running coach app for beginners and improving runners, on iPhone, Apple Watch and Android. It builds a weekly training plan for your goal (first 5K to marathon), talks you through every run, and adapts the plan after each run.

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.
Junior Mobile Developer at eleks
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.

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