All Versions
83
Latest Version
Avg Release Cycle
-
Latest Release
-
Changelog History
Page 1
Changelog History
Page 1
-
v1.6.4 Changes
- ➕ Added
TestScope.backgroundScope
for launching coroutines that perform work in the background and need to be cancelled at the end of the test (#3287). - 🛠 Fixed the POM of
kotlinx-coroutines-debug
having an incorrect reference tokotlinx-coroutines-bom
, which cause the builds of Maven projects using the debug module to break (#3334). - 🛠 Fixed the
Publisher.await
functions inkotlinx-coroutines-reactive
not ensuring that theSubscriber
methods are invoked serially (#3360). Thank you, @EgorKulbachka! - 🛠 Fixed a memory leak in
withTimeout
on K/N with the new memory model (#3351). - ➕ Added the guarantee that all
Throwable
implementations in the core library are serializable (#3328). - 📚 Moved the documentation to https://kotlinlang.org/api/kotlinx.coroutines/ (#3342).
- 📚 Various documentation improvements.
- ➕ Added
-
v1.6.3 Changes
- ⚡️ Updated atomicfu version to 0.17.3 (#3321), fixing the projects using this library with JS IR failing to build (#3305).
-
v1.6.2 Changes
- 🛠 Fixed a bug with
ThreadLocalElement
not being correctly updated when the most outersuspend
function was called directly withoutkotlinx.coroutines
(#2930). - 🛠 Fixed multiple data races: one that might have been affecting
runBlocking
event loop, and a benign data race inMutex
(#3250, #3251). - 📦 Obsolete
TestCoroutineContext
is removed, which fixes thekotlinx-coroutines-test
JPMS package being split betweenkotlinx-coroutines-core
andkotlinx-coroutines-test
(#3218). - ⚡️ Updated the ProGuard rules to further shrink the size of the resulting DEX file with coroutines (#3111, #3263). Thanks, @agrieve!
- ⚡️ Atomicfu is updated to
0.17.2
, which includes a more efficient and robust JS IR transformer (#3255). - ⚡️ Kotlin is updated to
1.6.21
, Gradle version is updated to7.4.2
(#3281). Thanks, @wojtek-kalicinski! - 📚 Various documentation improvements.
- 🛠 Fixed a bug with
-
v1.6.1 Changes
- ⏪ Rollback of time-related functions dispatching on
Dispatchers.Main
. This behavior was introduced in 1.6.0 and then found inconvenient and erroneous (#3106, #3113). - 🚀 Reworked the newly-introduced
CopyableThreadContextElement
to solve issues uncovered after the initial release (#3227). - 🛠 Fixed a bug with
ThreadLocalElement
not being properly updated in racy scenarios (#2930). - ⏪ Reverted eager loading of default
CoroutineExceptionHandler
that triggered ANR on some devices (#3180). - 🆕 New API to convert a
CoroutineDispatcher
to a Rx scheduler (#968, #548). Thanks @recheej! - 🛠 Fixed a memory leak with the very last element emitted from
flow
builder being retained in memory (#3197). - 🛠 Fixed a bug with
limitedParallelism
on K/N with new memory model throwingClassCastException
(#3223). - 0️⃣
CoroutineContext
is added to the exception printed to the defaultCoroutineExceptionHandler
to improve debuggability (#3153). - 0️⃣ Static memory consumption of
Dispatchers.Default
was significantly reduced (#3137). - ⚡️ Updated slf4j version in
kotlinx-coroutines-slf4j
from 1.7.25 to 1.7.32.
- ⏪ Rollback of time-related functions dispatching on
-
v1.6.0 Changes
Note that this is a full changelog relative to the 1.5.2 version. Changelog relative to 1.6.0-RC3 can be found at the end.
✅ kotlinx-coroutines-test rework
- ✅
kotlinx-coroutines-test
became a multiplatform library usable from K/JVM, K/JS, and K/N. - Its API was completely reworked to address long-standing issues with consistency, structured concurrency and correctness (#1203, #1609, #2379, #1749, #1204, #1390, #1222, #1395, #1881, #1910, #1772, #1626, #1742, #2082, #2102, #2405, #2462 ).
- ✅ The old API is deprecated for removal, but the new API is based on the similar concepts ([README](kotlinx-coroutines-test/README.md)), and the migration path is designed to be graceful: [migration guide](kotlinx-coroutines-test/MIGRATION.md).
Dispatchers
- Introduced
CoroutineDispatcher.limitedParallelism
that allows obtaining a view of the original dispatcher with limited parallelism (#2919). Dispatchers.IO.limitedParallelism
usages ignore the bound on the parallelism level ofDispatchers.IO
itself to avoid starvation (#2943).- Introduced new
Dispatchers.shutdown
method for containerized environments (#2558). - 🛠
newSingleThreadContext
andnewFixedThreadPoolContext
are promoted to delicate API (#2919).
💥 Breaking changes
- 🏗 When racing with cancellation, the
future
builder no longer reports unhandled exceptions into the globalCoroutineExceptionHandler
. Thanks @vadimsemenov! (#2774, #2791). - 🗄
Mutex.onLock
is deprecated for removal (#2794). - 0️⃣
Dispatchers.Main
is now used as the default source of time fordelay
andwithTimeout
when present(#2972).- To opt-out from this behaviour,
kotlinx.coroutines.main.delay
system property can be set tofalse
.
- To opt-out from this behaviour,
- 🏗 Java target of coroutines build is now 8 instead of 6 (#1589).
- Source-breaking change: extension
collect
no longer resolves when used with a non-in-place argument of a functional type. This is a candidate for a fix, uncovered after 1.6.0, see #3107 for the additional details.
🐛 Bug fixes and improvements
- ⚡️ Kotlin is updated to 1.6.0.
- 🏗 Kotlin/Native new memory model is now supported in regular builds of coroutines conditionally depending on whether
kotlin.native.binary.memoryModel
is enabled (#2914). - Introduced
CopyableThreadContextElement
for mutable context elements shared among multiple coroutines. Thanks @yorickhenning! (#2893). - 🔀
transformWhile
,awaitClose
,ProducerScope
,merge
,runningFold
,runingReduce
, andscan
are promoted to stable API (#2971). - ⚡️
SharedFlow.subscriptionCount
no longer conflates incoming updates and gives all subscribers a chance to observe a short-lived subscription (#2488, #2863, #2871). - 👻
Flow
exception transparency mechanism is improved to be more exception-friendly (#3017, #2860). - Cancellation from
flat*
operators that leverage multiple coroutines is no longer propagated upstream (#2964). SharedFlow.collect
now returnsNothing
(#2789, #2502).- 🚚
DisposableHandle
is nowfun interface
, and corresponding inline extension is removed (#2790). - 🚚
FlowCollector
is nowfun interface
, and corresponding inline extension is removed (#3047). - 🗄 Deprecation level of all previously deprecated signatures is raised (#3024).
- The version file is shipped with each JAR as a resource (#2941).
- Unhandled exceptions on K/N are passed to the standard library function
processUnhandledException
(#2981). - A direct executor is used for
Task
callbacks inkotlinx-coroutines-play-services
(#2990). - 📇 Metadata of coroutines artifacts leverages Gradle platform to have all versions of dependencies aligned (#2865).
- 0️⃣ Default
CoroutineExceptionHandler
is loaded eagerly and does not invokeServiceLoader
on its exception-handling path (#2552). - 🛠 Fixed the R8 rules for
ServiceLoader
optimization (#2880). - 🛠 Fixed BlockHound integration false-positives (#2894, #2866, #2937).
- 🛠 Fixed the exception handler being invoked several times on Android, thanks to @1zaman (#3056).
SendChannel.trySendBlocking
is now available on Kotlin/Native (#3064).- 👻 The exception recovery mechanism now uses
ClassValue
when available (#2997). - ⚡️ JNA is updated to 5.9.0 to support Apple M1 (#3001).
- 🗄 Obsolete method on internal
Delay
interface is deprecated (#2979). - 👌 Support of deprecated
CommonPool
is removed. @ExperimentalTime
is no longer needed for methods that useDuration
(#3041).- 🏗 JDK 1.6 is no longer required for building the project (#3043).
- 🆕 New version of Dokka is used, fixing the memory leak when building the coroutines and providing brand new reference visuals (https://kotlinlang.org/api/kotlinx.coroutines/) (#3051, #3054).
- ✅
-
v1.6.0-RC3 Changes
- 🛠 Fixed the error in 1.6.0-RC2 because of which
Flow.collect
couldn't be called due to the@InternalCoroutinesApi
annotation (#3082) - 🛠 Fixed some R8 warnings introduced in 1.6.0-RC (#3090)
- ⏱
TestCoroutineScheduler
now provides aTimeSource
with its virtual time via thetimeSource
property. Thanks @hfhbd! (#3087)
- 🛠 Fixed the error in 1.6.0-RC2 because of which
-
v1.6.0-RC2 Changes
@ExperimentalTime
is no longer needed for methods that useDuration
(#3041).- 🚚
FlowCollector
is nowfun interface
, and corresponding inline extension is removed (#3047). - 🛠 Fixed the exception handler being invoked several times on Android, thanks to @1zaman (#3056).
- ✅ The deprecated
TestCoroutineScope
is no longer sealed, to simplify migration from it (#3072). - ✅
runTest
gives more informative errors when it times out waiting for external completion (#3071). SendChannel.trySendBlocking
is now available on Kotlin/Native (#3064).- 🛠 Fixed the bug due to which
Dispatchers.Main
was not used fordelay
andwithTimeout
(#3046). - 🏗 JDK 1.6 is no longer required for building the project (#3043).
- 🆕 New version of Dokka is used, fixing the memory leak when building the coroutines and providing brand new reference visuals (https://kotlinlang.org/api/kotlinx.coroutines/) (#3051, #3054).
-
v1.6.0-RC Changes
✅ kotlinx-coroutines-test rework
- ✅
kotlinx-coroutines-test
became a multiplatform library usable from K/JVM, K/JS, and K/N. - Its API was completely reworked to address long-standing issues with consistency, structured concurrency and correctness (#1203, #1609, #2379, #1749, #1204, #1390, #1222, #1395, #1881, #1910, #1772, #1626, #1742, #2082, #2102, #2405, #2462 ).
- ✅ The old API is deprecated for removal, but the new API is based on the similar concepts ([README](kotlinx-coroutines-test/README.md)), and the migration path is designed to be graceful: [migration guide](kotlinx-coroutines-test/MIGRATION.md)
Dispatchers
- * Introduced
CoroutineDispatcher.limitedParallelism
that allows obtaining a view of the original dispatcher with limited parallelism (#2919). Dispatchers.IO.limitedParallelism
usages ignore the bound on the parallelism level ofDispatchers.IO
itself to avoid starvation (#2943).- Introduced new
Dispatchers.shutdown
method for containerized environments (#2558). - 🛠
newSingleThreadContext
andnewFixedThreadPoolContext
are promoted to delicate API (#2919).
💥 Breaking changes
- 🏗 When racing with cancellation, the
future
builder no longer reports unhandled exceptions into the globalCoroutineExceptionHandler
. Thanks @vadimsemenov! (#2774, #2791). - 🗄
Mutex.onLock
is deprecated for removal (#2794). - 0️⃣
Dispatchers.Main
is now used as the default source of time fordelay
andwithTimeout
when present(#2972).- To opt-out from this behaviour,
kotlinx.coroutines.main.delay
system property can be set tofalse
.
- To opt-out from this behaviour,
- 🏗 Java target of coroutines build is now 8 instead of 6 (#1589).
🐛 Bug fixes and improvements
- ⚡️ Kotlin is updated to 1.6.0.
- 🏗 Kotlin/Native new memory model is now supported in regular builds of coroutines conditionally depending on whether
kotlin.native.binary.memoryModel
is enabled (#2914). - Introduced
CopyableThreadContextElement
for mutable context elements shared among multiple coroutines. Thanks @yorickhenning! (#2893). - 🔀
transformWhile
,awaitClose
,ProducerScope
,merge
,runningFold
,runingReduce
, andscan
are promoted to stable API (#2971). - ⚡️
SharedFlow.subscriptionCount
no longer conflates incoming updates and gives all subscribers a chance to observe a short-lived subscription (#2488, #2863, #2871). - 👻
Flow
exception transparency mechanism is improved to be more exception-friendly (#3017, #2860). - Cancellation from
flat*
operators that leverage multiple coroutines is no longer propagated upstream (#2964). SharedFlow.collect
now returnsNothing
(#2789, #2502).- 🚚
DisposableHandle
is nowfun interface
, and corresponding inline extension is removed (#2790). - 🗄 Deprecation level of all previously deprecated signatures is raised (#3024).
- The version file is shipped with each JAR as a resource (#2941).
- Unhandled exceptions on K/N are passed to the standard library function
processUnhandledException
(#2981). - A direct executor is used for
Task
callbacks inkotlinx-coroutines-play-services
(#2990). - 📇 Metadata of coroutines artifacts leverages Gradle platform to have all versions of dependencies aligned (#2865).
- 0️⃣ Default
CoroutineExceptionHandler
is loaded eagerly and does not invokeServiceLoader
on its exception-handling path (#2552). - 🛠 Fixed the R8 rules for
ServiceLoader
optimization (#2880). - 🛠 Fixed BlockHound integration false-positives (#2894, #2866, #2937).
- 👻 The exception recovery mechanism now uses
ClassValue
when available (#2997). - ⚡️ JNA is updated to 5.9.0 to support Apple M1 (#3001).
- 🗄 Obsolete method on internal
Delay
interface is deprecated (#2979). - 👌 Support of deprecated
CommonPool
is removed.
- ✅
-
v1.5.2 Changes
- ⚡️ Kotlin is updated to 1.5.30.
- 🆕 New native targets for Apple Silicon are introduced.
- 🛠 Fixed a bug when
onUndeliveredElement
was incorrectly called on a properly received elements on JS (#2826). - 🛠 Fixed
Dispatchers.Default
on React Native, it now fully relies onsetTimeout
instead of stubprocess.nextTick
. Thanks to @Legion2 (#2843). - Optimizations of
Mutex
implementation (#2581). - 🔒
Mutex
implementation is made completely lock-free as stated (#2590). - 📚 Various documentation and guides improvements. Thanks to @MasoodFallahpoor and @Pihanya.
-
v1.5.1 Changes
- ⚡️ Atomic
update
,getAndUpdate
, andupdateAndGet
operations ofMutableStateFlow
(#2720). Executor.asCoroutineDispatcher
implementation improvements (#2601):- If the target executor is
ScheduledExecutorService
, then itsschedule
API is used for time-related coroutine operations. RemoveOnCancelPolicy
is now part of the public contract.
- If the target executor is
- Introduced overloads for
Task.asDeferred
andTask.await
that acceptCancellationTokenSource
for bidirectional cancellation (#2527). - ⚡️ Reactive streams are updated to
1.0.3
(#2740). - 👻
CopyableThrowable
is allowed to modify the exception message during stacktrace recovery (#1931). - 🚀
CoroutineDispatcher.releaseInterceptedContinuation
is now afinal
method (#2785). - Closing a Handler underlying
Handler.asCoroutineDispatcher
now causes the dispatched coroutines to be canceled onDispatchers.IO (#2778)
. - ⚡️ Kotlin is updated to 1.5.20.
- 🛠 Fixed a spurious
ClassCastException
inreleaseInterceptedContinuation
andIllegalStateException
fromtryReleaseClaimedContinuation
(#2736, #2768). - 🛠 Fixed inconsistent exception message during stacktrace recovery for non-suspending channel iterators (#2749).
- 🛠 Fixed linear stack usage for
CompletableFuture.asDeferred
when the target future has a long chain of listeners (#2730). - Any exceptions from
CoroutineDispatcher.isDispatchNeeded
are now considered as fatal and are propagated to the caller (#2733). - 🚚 Internal
DebugProbesKt
(used in the debugger implementation) are moved fromdebug
tocore
module.
- ⚡️ Atomic