The Kotlin language and toolset are divided into many components such as the compilers for the JVM, JS and Native targets, the Standard Library, various accompanying tools and so on. Many of these components were officially released as Stable which means that they are evolved in the backward-compatible way following the principles of Comfortable Updates and Keeping the Language Modern. Among such stable components are, for example, the Kotlin compiler for the JVM, the Standard Library, and Coroutines.
Following the Feedback Loop principle we release many things early for the community to try out, so a number of components are not yet released as Stable. Some of them are very early stage, some are more mature. We mark them as Experimental, Alpha or Beta depending on how quickly each component is evolving and how much risk the users are taking when adopting it.
Here's a quick guide to these stability levels and their meaning:
Experimental means "try it only in toy projects":
Alpha means "use at your own risk, expect migration issues":
Beta means "you can use it, we'll do our best to minimize migration issues for you":
We collectively refer to Experimental, Alpha and Beta as pre-stable levels.
Stable means "use it even in most conservative scenarios":
Please note that stability levels do not say anything about how soon a component will be released as Stable. Similarly, they do not indicate how much a component will be changed before release. They only say how fast a component is changing and how much risk of update issues users are running.
A stable component may have an experimental subcomponent, for example:
We make sure to document precisely which subcomponents are not stable. We also do our best to warn users where possible and ask to opt in explicitly to avoid accidental usages of features that have not been released as stable.
Component | Status | Status since version | Comment |
---|---|---|---|
Kotlin/JVM | Stable | 1.0 | |
kotlin-stdlib (JVM) | Stable | 1.0 | |
Coroutines | Stable | 1.3 | |
kotlin-reflect (JVM) | Beta | 1.0 | |
Kotlin/JS (Classic back-end) | Stable | 1.3 | |
Kotlin/JVM (IR-based) | Alpha | 1.4 | |
Kotlin/JS (IR-based) | Alpha | 1.4 | |
Kotlin/Native Runtime | Beta | 1.3 | |
KLib binaries | Alpha | 1.4 | |
KDoc syntax | Stable | 1.0 | |
dokka | Alpha | 0.1 | |
Kotlin Scripts (*.kts) | Beta | 1.2 | |
Kotlin Scripting APIs and custom hosts | Alpha | 1.2 | |
Compiler Plugin API | Experimental | 1.0 | |
Serialization Compiler Plugin | Stable | 1.4 | |
Serialization Core Library | Stable | 1.0.0 | Versioned separately from the language |
Multiplatform Projects | Alpha | 1.3 | |
expect/actual language feature | Beta | 1.2 | |
Inline classes | Alpha | 1.3 | |
Unsigned arithmetics | Beta | 1.3 | |
Contracts in stdlib | Stable | 1.3 | |
User-defined contracts | Experimental | 1.3 | |
All other experimental components, by default | Experimental | N/A |
The pre-1.4 version of this page is available here.
© 2010–2020 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/reference/evolution/components-stability.html