6 min read

Kotlin Multiplatform Newsletter #26

We explore how Kraken Technologies slashed their average Gradle build times by 70% using the Dependency Analysis Gradle Plugin, and dive into the undocumented compiler rules of advanced expect/actual declarations. We also break down the performance tax of BoxWithConstraints by digging into Compose's SubcomposeLayout API, outline migrating multimodule projects to Koin Annotations, and highlight a Senior Mobile KMP position at Accesa.

The Main Thread

Community's most insightful threads, curated from social media platforms and websites.

The History of Kodee, Kotlin's Mascot

Bringing Kodee to life wasn’t just a design challenge; it was a deeply collaborative effort by the Kotlin Marketing team, together with the Design and Strategic Research teams at JetBrains. The project’s goal was to create a mascot that truly resonated with the developer community.
Is Kotlin becoming too bloated? Why I am sticking to a "Minimalist" subset of the language

I really think a language should be simple and powerful, not bloated with endless concepts. Anyone else intentionally keep their Kotlin simple just to stay sane? Or am I missing something?

Expect Actual

Technical deep dives, or solving the "how-the-hell-do-I-test-this" problems.

The Same System: Advanced expect/actual in KMP

That is expect/actual, and it is the closest thing KMP has to a signature move. You declare the position once in commonMain. Each platform fields its own player. The trivial version, an expect fun with a one-line actual on each side, gets shown in every intro tutorial and it is genuinely easy. This article is about what happens after that, when you start declaring classes, constructors, and typealiases, and the compiler starts enforcing rules that the tutorials never mention.
Kotlin DSL Deep Dive: From Gradle Scripts to Building Your Own

What .kts files actually are, why Gradle’s dependencies { } is just a function call, and how to build a working HTML DSL from scratch
How to use Koin Compiler in a Multimodule Project?

Today we’re diving into how to use the Koin Compiler in a Compose Multiplatform multi-module project. In the previous article, we explored how to migrate a multimodule setup to Koin Annotations, using a convention Gradle plugin to move forward in small, safe steps. We’ll follow that same approach diving deep into a project called MovieDB-App.
Cut build time by 70% in your KMP projects with the Dependency Analysis Gradle Plugin

Kraken Technologies, which maintains a Kotlin Multiplatform (KMP) project of roughly 600 modules, was recently able to cut its average build time from about 6 minutes to about 1 minute and 50 seconds, or ~70%. They also report that sync times improved from roughly 5 minutes to roughly 45 seconds, or ~85%.

LazyColumn

Compose Multiplatform tips, tricks, and code snippets.

Another Way to KMP: Shared Renderers

In the first two articles I built 3D chess twice — once with a Compose Multiplatform shell, once with React Native. In both cases, the game logic was in shared Kotlin, and platform-specific 3D renderers displayed the state. This article is about a project that inverts that architecture — and about why the inversion is correct.
Mirage: Cloudy Grows from a Blur Library into a Graphics Effect Library

Blur is a single effect with a single knob, a radius, and for a long time that was the whole library. Mirage is where that changes. It is the first step in Cloudy growing past “the blur library” into a general graphics effect toolkit — a way to run authored GPU shader effects, not just a fixed blur, over the content and backdrops in your Compose UI.
Inside SubcomposeLayout: Jetpack Compose’s Most Misunderstood API

Hey Composers 👋, if you’ve built a complex UI in Jetpack Compose, you’ve probably reached for BoxWithConstraints. And by doing so, you’ve probably paid a performance tax you didn’t fully understand.

The Dependency Graph

Curated libraries, tools and plugins that won't break your Gradle build.

  • Cloudy
    Kotlin Multiplatform blur and liquid glass effect library for Compose, with GPU-accelerated rendering and CPU fallback for older devices.
  • kUML
    Architecture that compiles. Kotlin DSL for UML 2.x, SysML 2 and C4 diagrams-as-code — CLI, Compose Desktop, IntelliJ & Obsidian plugins, Asciidoctor extension on Maven Central, ELK layout, reverse engineering (Java/Kotlin), XMI import/export, plugin SPI. Apache-2.0.
  • KMP Biometric Auth
    KMP biometric authentication library with hardware-backed crypto. Keystore-bound AES/GCM on Android, Keychain with biometryCurrentSet on iOS.
  • Compose Multiplatform Preferences
    A lightweight, developer-friendly Key-Value Storage library for Kotlin Multiplatform (KMP) and Compose Multiplatform (CMP) projects.
  • Documents
    Typed, reactive documents on top of MMKV — a Kotlin Multiplatform storage library for Android & iOS.
  • Compose Media Player
    Compose Media Player is a video player library designed for Compose Multiplatform, supporting multiple platforms including Android, macOS, Windows, Linux, iOS and Compose Web.

Target: Production

Showcase of real-world apps proving KMP is ready for prime time.

Unbeatable Football | Historic Football Draft Game
Draft players across 11 rounds, build a balanced lineup, clear daily challenges, and protect your streak.
GitHub - wingedsheep/argentum-engine: Magic: The Gathering rules engine + online play platform, in Kotlin
Magic: The Gathering rules engine + online play platform, in Kotlin - wingedsheep/argentum-engine

Careers

Kotlin Multiplatform job postings and opportunities.

Senior Mobile Software Engineer with Kotlin at Accesa

We are looking for a Senior Kotlin Developer who is experienced in Kotlin Multiplatform delivery, comfortable owning complex shared modules in a layered architecture, and motivated by the challenge of building the reliable, platform-agnostic foundation that modern retail operations depend on.

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