Kotlin Release Cadence and the Multiplatform Roadmap

Kotlin logo
JetBrains ships Kotlin feature releases roughly every six months, with incremental releases in between for bug fixes and tooling updates. The K2 compiler that arrived with Kotlin 2.0 reset the foundations of the language, and the releases since have built on it: faster compilation, better multiplatform support, and a maturing Kotlin/Wasm target. This article explains the release model, the stability guarantees attached to each component, and how to plan upgrades.

How Kotlin versions are numbered

Kotlin uses a three-part version number with distinct meanings:

Part Example Meaning
Feature release 2.2.0 New language features, may change behaviour behind deprecation cycles
Incremental release 2.2.10 Bug fixes, tooling updates, performance; no new language features
Bootstrap / preview 2.3.0-Beta Pre-release builds for early testing

Feature releases appear roughly every six months. Incremental releases follow as needed, often within weeks, and are the ones most teams actually consume.

Recent feature releases: Kotlin 1.9 in mid-2023, Kotlin 2.0 in May 2024 with the K2 compiler, Kotlin 2.1 in November 2024, and Kotlin 2.2 in 2025.

The K2 compiler as the dividing line

Kotlin 2.0 was significant less for its syntax than for replacing the compiler frontend. K2 rebuilt type inference, resolution and diagnostics on a new architecture, delivering substantially faster compilation and a more consistent foundation for future language work.

For most codebases the migration was a recompile. Where it was not, the causes were usually reliance on inference quirks that K2 resolved differently, or compiler plugins that had not yet been updated. Since K2 became the default, new language features have landed on top of it rather than being retrofitted to two frontends.

Stability levels

Kotlin labels each component so you know what you are committing to:

  • Stable - backwards compatible, follows the full deprecation cycle.
  • Beta - close to final, migration help provided if something changes.
  • Experimental - opt in with a compiler flag or an opt-in annotation; may change or be removed.

The language itself, the standard library and Kotlin/JVM are stable. Newer targets and libraries move through the tiers at their own pace. Experimental APIs require an explicit opt-in, which keeps accidental dependence on unstable surface to a minimum:

@OptIn(ExperimentalStdlibApi::class)
fun parse(input: String): Int = input.hexToInt()

Language evolution and the deprecation cycle

Language changes go through the Kotlin Language Committee and a staged deprecation process. A construct that is going away typically becomes a warning in one feature release, an error in a later one, and is removed after that. Progressive mode lets teams opt in to stricter behaviour early:

kotlinc -progressive

The languageVersion and apiVersion compiler settings let you compile with a new toolchain while targeting an older language level, which is useful for libraries that must support consumers on older Kotlin versions.

Multiplatform and the other targets

Kotlin Multiplatform lets shared business logic compile to JVM, Android, native (via LLVM), JavaScript and WebAssembly, while keeping platform-specific code where it belongs. The Android and JVM story has been stable for years; iOS via Kotlin/Native and Compose Multiplatform has matured more recently.

Kotlin/Wasm targets WebAssembly with the garbage collection proposal, which means it depends on browser support for WasmGC rather than shipping its own runtime. It has been moving through the stability tiers as that browser support has landed.

When planning multiplatform work, check the stability tier of each target you intend to ship, not just of Kotlin itself.

Upgrade guidance

  • Track incremental releases closely. A move from 2.2.0 to 2.2.10 is low risk and usually fixes something you would otherwise hit.
  • Plan feature releases deliberately. Budget time for compiler plugins - kapt, KSP, serialization, Compose - since those need matching versions and are the most common source of upgrade friction.
  • Pin the Kotlin version in the build. With Gradle, declare the plugin version explicitly rather than inheriting it, so upgrades are a visible change in version control.
  • Use -Werror selectively. Deprecation warnings introduced by a new feature release are your notice period. Treating them as errors immediately after an upgrade blocks the build; reviewing them within the cycle keeps the next upgrade cheap.

Conclusion

Kotlin’s model is a feature release roughly twice a year, incremental releases in between, and a clear stability tier attached to every component. Since Kotlin 2.0 the K2 compiler has been the foundation, and the multiplatform targets continue to move up the stability ladder. The practical advice is unchanged: take incremental releases promptly, plan feature releases around your plugin ecosystem, and pay attention to deprecation warnings while they are still warnings.

March 15, 2026 by blog.released.info