Kotlin 2.4.20 Release Roundup: Swift Export, schlankeres Wasm & neue Stdlib-Features
Besserer Swift-Export mit exhaustiven Enums, schlankere Wasm-Binaries und praktische neue Stdlib-Helfer. Alle Highlights und Code-Beispiele auf einen Blick.

Inhaltsverzeichnis anzeigen▸
Was ist neu in Kotlin 2.4.20? Die wichtigsten Features, Performance-Boosts und Multiplatform-Highlights im Überblick
Mit Kotlin 2.4.20 liefert JetBrains ein vollgepacktes Release aus, das vor allem die Entwicklererfahrung (DevEx) in den Bereichen Standard Library, Kotlin Multiplatform (KMP), WebAssembly (Wasm) und den Build-Tools spürbar verbessert.
Egal ob du serverseitig mit Coroutines arbeitest, plattformübergreifend iOS-Apps mit modernem Swift-Interop baust oder auf WebAssembly setzt – hier sind die wichtigsten Neuerungen zusammengefasst.
1. Standard Library & Testing: Lesbarer Code und besseres Debugging#
Kleine Helfer mit großer Wirkung: Die Standard Library bringt neue Funktionen mit, die typische Boilerplate-Muster überflüssig machen.
Neue Collection-Utilities: allEqual() und allDistinct()#
Bisher musste man oft über toSet().size == 1 oder distinct().count() prüfen, ob alle Elemente identisch oder komplett einzigartig sind – was nicht nur unschön zu lesen ist, sondern oft unnötige Allokationen erzeugt. Jetzt gibt es direkte, idiomatische Funktionen:
val statusCodes = listOf(200, 200, 200)
val userIds = listOf("usr_1", "usr_2", "usr_3")
if (statusCodes.allEqual()) {
println("Alle Services meldeten identischen Status!")
}
if (userIds.allDistinct()) {
println("Keine doppelten Benutzer-IDs vorhanden.")
}
Stacktrace Recovery für Coroutines (StackTraceRecoverable)#
Die Standard Library führt das Interface StackTraceRecoverable ein. Dadurch können Bibliotheken wie kotlinx.coroutines Exception-Stacktraces bei asynchronen Aufrufen noch sauberer über Suspend-Punkte hinweg rekonstruieren. Für Entwickler bedeutet das: deutlich lesbarere Stacktraces beim Debuggen komplexer asynchroner Pipelines.
Lazy Message Evaluation in kotlin.test#
Aufwendige String-Interpolationen oder Diagnose-Berechnungen in Unit-Tests müssen nicht mehr vorab ausgeführt werden:
import kotlin.test.assertEquals
// Die Fehlermeldung wird erst evaluiert, wenn der Test tatsächlich fehlschlägt
assertEquals(expectedUser, actualUser) {
"User-Vergleich fehlgeschlagen für Payload: ${actualUser.dumpDetailedDebugJson()}"
}
2. Kotlin Multiplatform: Großer Sprung für Swift & Native#
Für Teams, die Kotlin Multiplatform für iOS einsetzen, bringt Version 2.4.20 echte Meilensteine bei der Developer Experience.
Exhaustive switch in Swift dank modernem Export für Sealed Hierarchies#
Sealed Classes und Sealed Interfaces werden nun wesentlich eleganter auf native Swift Enums abgebildet. In Swift/Xcode bedeutet das:
- Vollständige Code-Completion für alle Subtypen.
switch-Statements sind exhaustiv – ein lästigerdefault:-Fallback ist nicht mehr zwingend erforderlich.- Xcode warnt sofort, wenn auf Kotlin-Seite ein neuer Fall hinzukommt.
Automatisierte SwiftPM-Unterstützung#
Das Kotlin Multiplatform Gradle Plugin generiert nun bei Bedarf passende Package.swift-Deklarationen. Dadurch wird die Einbindung des Shared Code in bestehende iOS-Xcode-Workflows über den nativen Swift Package Manager noch unkomplizierter.
Inkrementelle KLIB-Kompilierung erreicht Beta#
Die Kompilierung von klib-Artefakten (Kotlin Libraries für Native) unterstützt nun inkrementelle Builds im Beta-Status. Insbesondere bei lokalen Debug-Builds und häufigen Code-Änderungen verkürzt sich die Zykluszeit spürbar.
3. Kotlin/Wasm & Kotlin/JS: Schlanker und moderner#
Wasm-Binaries: 5–10 % weniger Dateigröße#
Im Web zählt jedes Kilobyte. In Kotlin/Wasm erzeugen Lambdas und funktionale Interfaces nun keine redundanten anonymen Klassen mehr, sondern teilen sich gemeinsame Basisklassen. In Benchmarks resultiert dies in einer Größenreduktion der Wasm-Binaries um ca. 5 bis 10 Prozent. Zudem unterstützt das Kotlin Gradle Plugin nun die Wasmtime-Laufzeitumgebung direkt out-of-the-box.
JS: Suspending Functions als echte async/await-Methoden#
Beim Exportieren von Kotlin-Code nach JavaScript werden suspendierende Lambdas und Funktionen jetzt nahtlos als native JavaScript Promise/async-Funktionen exportiert. JavaScript- und TypeScript-Konsumenten können diese ohne Bridge-Layer direkt mit await aufrufen.
4. Compiler & Build-Tools: Fokus auf Geschwindigkeit#
Experimentelles Native Image für den CLI-Compiler (kotlinc)#
Für alle, die Kotlin außerhalb von Daemons über die Kommandozeile kompilieren, gibt es ein vorkompiliertes Native Image von kotlinc. Der Entfall des JVM-Warmups sorgt für blitzschnelle Startzeiten bei Ad-hoc-Skripten und CI-CLI-Läufen.
Umbenennung des Runner-Befehls#
Der CLI-Befehl zum Ausführen von Skripten und Programmen (kotlin) wurde auf kotlinr (Kotlin Runner) umgestellt. Dieser Schritt bereitet den Weg für einen künftigen vereinheitlichten kotlin-Hauptbefehl vor.
Gradle-Ökosystem#
- Gradle 9.7 Ready: Volle Kompatibilität mit den neuesten Gradle-Versionen.
- Gradle Problems API: Präzisere Diagnose-IDs sorgen dafür, dass Compiler-Warnungen und -Fehler in modernen IDEs (wie IntelliJ IDEA und Android Studio) noch genauer an die passende Codezeile geheftet werden.
- Build Tools API (BTA): Nun auch übergreifend für Kotlin/JS, Kotlin/Wasm und reine Metadaten-Kompilate verfügbar.

Geschrieben von Sascha (ayupi)
Fullstack & Mobile Software EngineerSascha ist Softwareentwickler mit Leidenschaft für das moderne Kotlin-Ökosystem. Er verbindet Backend-Architektur (Ktor, Spring) mit plattformübergreifenden Apps (KMP, Android & iOS) und teilt hier Erfahrungen aus der Praxis.
