All Versions
80
Latest Version
Avg Release Cycle
-
Latest Release
-

Changelog History
Page 1

  • 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 throwing ClassCastException (#3223).
    • 0๏ธโƒฃ CoroutineContext is added to the exception printed to the default CoroutineExceptionHandler 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.
  • 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 of Dispatchers.IO itself to avoid starvation (#2943).
    • Introduced new Dispatchers.shutdown method for containerized environments (#2558).
    • ๐Ÿ›  newSingleThreadContext and newFixedThreadPoolContext are promoted to delicate API (#2919).

    ๐Ÿ’ฅ Breaking changes

    • ๐Ÿ— When racing with cancellation, the future builder no longer reports unhandled exceptions into the global CoroutineExceptionHandler. Thanks @vadimsemenov! (#2774, #2791).
    • ๐Ÿ—„ Mutex.onLock is deprecated for removal (#2794).
    • 0๏ธโƒฃ Dispatchers.Main is now used as the default source of time for delay and withTimeout when present(#2972).
      • To opt-out from this behaviour, kotlinx.coroutines.main.delay system property can be set to false.
    • ๐Ÿ— 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, and scan 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 returns Nothing (#2789, #2502).
    • ๐Ÿšš DisposableHandle is now fun interface, and corresponding inline extension is removed (#2790).
    • ๐Ÿšš FlowCollector is now fun 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 in kotlinx-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 invoke ServiceLoader 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 use Duration (#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://kotlin.github.io/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 a TimeSource with its virtual time via the timeSource property. Thanks @hfhbd! (#3087)
  • v1.6.0-RC2 Changes

    • @ExperimentalTime is no longer needed for methods that use Duration (#3041).
    • ๐Ÿšš FlowCollector is now fun 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 for delay and withTimeout (#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://kotlin.github.io/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 of Dispatchers.IO itself to avoid starvation (#2943).
    • Introduced new Dispatchers.shutdown method for containerized environments (#2558).
    • ๐Ÿ›  newSingleThreadContext and newFixedThreadPoolContext are promoted to delicate API (#2919).

    ๐Ÿ’ฅ Breaking changes

    • ๐Ÿ— When racing with cancellation, the future builder no longer reports unhandled exceptions into the global CoroutineExceptionHandler. Thanks @vadimsemenov! (#2774, #2791).
    • ๐Ÿ—„ Mutex.onLock is deprecated for removal (#2794).
    • 0๏ธโƒฃ Dispatchers.Main is now used as the default source of time for delay and withTimeout when present(#2972).
      • To opt-out from this behaviour, kotlinx.coroutines.main.delay system property can be set to false.
    • ๐Ÿ— 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, and scan 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 returns Nothing (#2789, #2502).
    • ๐Ÿšš DisposableHandle is now fun 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 in kotlinx-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 invoke ServiceLoader 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 on setTimeout instead of stub process.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, and updateAndGet operations of MutableStateFlow (#2720).
    • Executor.asCoroutineDispatcher implementation improvements (#2601):
      • If the target executor is ScheduledExecutorService, then its schedule API is used for time-related coroutine operations.
      • RemoveOnCancelPolicy is now part of the public contract.
    • Introduced overloads for Task.asDeferred and Task.await that accept CancellationTokenSource 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 a final method (#2785).
    • Closing a Handler underlying Handler.asCoroutineDispatcher now causes the dispatched coroutines to be canceled on Dispatchers.IO (#2778).
    • โšก๏ธ Kotlin is updated to 1.5.20.
    • ๐Ÿ›  Fixed a spurious ClassCastException in releaseInterceptedContinuation and IllegalStateException from tryReleaseClaimedContinuation (#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 from debug to core module.
  • v1.5.0 Changes

    Note that this is a full changelog relative to 1.4.3 version. Changelog relative to 1.5.0-RC can be found in the end.

    Channels API

    • ๐Ÿšš Major channels API rework (#330, #974). Existing offer, poll, and sendBlocking methods are deprecated, internal receiveCatching and onReceiveCatching removed, receiveOrNull and onReceiveOrNull are completely deprecated. Previously deprecated SendChannel.isFull declaration is removed. Channel operators deprecated with ERROR are now HIDDEN.
    • ๐Ÿ†• New methods receiveCatching, onReceiveCatching trySend, tryReceive, and trySendBlocking along with the new result type ChannelResult are introduced. They provide better type safety, are less error-prone, and have a consistent future-proof naming scheme. The full rationale behind this change can be found here.
    • ๐Ÿ“š BroadcastChannel and ConflatedBroadcastChannel are marked as ObsoleteCoroutinesApi in the favor or SharedFlow and StateFlow. The migration scheme can be found in their documentation. These classes will be deprecated in the next major release.
    • callbackFlow and channelFlow are promoted to stable API.

    Reactive integrations

    • All existing API in modules kotlinx-coroutines-rx2, kotlinx-coroutines-rx3, kotlinx-coroutines-reactive, kotlinx-coroutines-reactor, and kotlinx-coroutines-jdk9 were revisited and promoted to stable (#2545).
    • publish is no longer allowed to emit null values (#2646).
    • ๐Ÿ—„ Misleading awaitSingleOr* functions on Publisher type are deprecated (#2591).
    • ๐Ÿ‘• MaybeSource.await is deprecated in the favor of awaitSingle, additional lint functions for Mono are added in order to prevent ambiguous Publisher usages (#2628, #1587).
    • ๐Ÿ‘ ContextView support in kotlinx-coroutines-reactor (#2575).
    • ๐Ÿ— All reactive builders no longer ignore inner cancellation exceptions preventing their completion (#2262, #2646).
    • MaybeSource.collect and Maybe.collect properly finish when they are completed without a value (#2617).
    • All exceptions are now consistently handled according to reactive specification, whether they are considered 'fatal' or not by reactive frameworks (#2646).

    Other improvements

    • โšก๏ธ Kotlin version is upgraded to 1.5.0 and JVM target is updated to 1.8.
    • Flow.last and Flow.lastOrNull operators (#2246).
    • Flow.runningFold operator (#2641).
    • CoroutinesTimeout rule for JUnit5 (#2197).
    • ๐ŸŽ Internals of Job and AbstractCoroutine was reworked, resulting in smaller code size, less memory footprint, and better performance (#2513, #2512).
    • CancellationException from Kotlin standard library is used for cancellation on Koltin/JS and Kotlin/Native (#2638).
    • ๐Ÿ“š Introduced new DelicateCoroutinesApi annotation that warns users about potential target API pitfalls and suggests studying API's documentation first. The only delicate API right now is GlobalScope (#2637).
    • ๐Ÿ›  Fixed bug introduced in 1.4.3 when kotlinx-coroutines-core.jar triggered IDEA debugger failure (#2619).
    • ๐Ÿ›  Fixed memory leak of ChildHandlerNode with reusable continuations (#2564).
    • ๐Ÿ“š Various documentation improvements (#2555, #2589, #2592, #2583, #2437, #2616, #2633, #2560).
  • v1.5.0-RC Changes

    Channels API

    • ๐Ÿšš Major channels API rework (#330, #974). Existing offer, poll, and sendBlocking methods are deprecated, internal receiveCatching and onReceiveCatching removed, receiveOrNull and onReceiveOrNull are completely deprecated. Previously deprecated SendChannel.isFull declaration is removed. Channel operators deprecated with ERROR are now HIDDEN.
    • ๐Ÿ†• New methods receiveCatching, onReceiveCatching trySend, tryReceive, and trySendBlocking along with the new result type ChannelResult are introduced. They provide better type safety, are less error-prone, and have a consistent future-proof naming scheme. The full rationale behind this change can be found here.
    • ๐Ÿ“š BroadcastChannel and ConflatedBroadcastChannel are marked as ObsoleteCoroutinesApi in the favor or SharedFlow and StateFlow. The migration scheme can be found in their documentation. These classes will be deprecated in the next major release.
    • callbackFlow and channelFlow are promoted to stable API.

    Reactive integrations

    • All existing API in modules kotlinx-coroutines-rx2, kotlinx-coroutines-rx3, kotlinx-coroutines-reactive, kotlinx-coroutines-reactor, and kotlinx-coroutines-jdk9 were revisited and promoted to stable (#2545).
    • publish is no longer allowed to emit null values (#2646).
    • ๐Ÿ—„ Misleading awaitSingleOr* functions on Publisher type are deprecated (#2591).
    • ๐Ÿ‘• MaybeSource.await is deprecated in the favor of awaitSingle, additional lint functions for Mono are added in order to prevent ambiguous Publisher usages (#2628, #1587).
    • ๐Ÿ‘ ContextView support in kotlinx-coroutines-reactor (#2575).
    • ๐Ÿ— All reactive builders no longer ignore inner cancellation exceptions preventing their completion (#2262, #2646).
    • MaybeSource.collect and Maybe.collect properly finish when they are completed without a value (#2617).
    • All exceptions are now consistently handled according to reactive specification, whether they are considered 'fatal' or not by reactive frameworks (#2646).

    Other improvements

    • Flow.last and Flow.lastOrNull operators (#2246).
    • Flow.runningFold operator (#2641).
    • CoroutinesTimeout rule for JUnit5 (#2197).
    • ๐ŸŽ Internals of Job and AbstractCoroutine was reworked, resulting in smaller code size, less memory footprint, and better performance (#2513, #2512).
    • CancellationException from Kotlin standard library is used for cancellation on Koltin/JS and Kotlin/Native (#2638).
    • ๐Ÿ“š Introduced new DelicateCoroutineApi annotation that warns users about potential target API pitfalls and suggests studying API's documentation first. The only delicate API right now is GlobalScope (#2637).
    • ๐Ÿ›  Fixed bug introduced in 1.4.3 when kotlinx-coroutines-core.jar triggered IDEA debugger failure (#2619).
    • ๐Ÿ›  Fixed memory leak of ChildHandlerNode with reusable continuations (#2564).
    • ๐Ÿ“š Various documentation improvements (#2555, #2589, #2592, #2583, #2437, #2616, #2633, #2560).
  • v1.4.3 Changes

    General changes

    • โช Thread context is properly preserved and restored for coroutines without ThreadContextElement (#985)
    • โšก๏ธ ThreadContextElements are now restored in the opposite order from update (#2195)
    • ๐Ÿ‘Œ Improved performance of combine with 4 parameters, thanks to @alexvanyo (#2419)
    • Debug agent sanitizer leaves at least one frame with source location (#1437)
    • โšก๏ธ Update Reactor version in kotlinx-coroutines-reactor to 3.4.1, thanks to @sokomishalov (#2432)
    • callInPlace contract added to ReceiveChannel.consume (#941)
    • CoroutineStart.UNDISPATCHED promoted to stable API (#1393)
    • โšก๏ธ Kotlin updated to 1.4.30
    • ๐Ÿš€ kotlinx.coroutines are now released directly to MavenCentral
    • โฌ‡๏ธ Reduced the size of DispatchedCoroutine by a field
    • โฑ Internal class TimeSource renamed to SchedulerTimeSource to prevent wildcard import issues (#2537)

    ๐Ÿ› Bug fixes

    • ๐Ÿ›  Fixed the problem that prevented implementation via delegation for Job interface (#2423)
    • ๐Ÿ›  Fixed incorrect ProGuard rules that allowed shrinking volatile felds (#1564)
    • ๐Ÿ›  Fixed await/asDeferredforMinimalState` implementations in jdk8 module (#2456)
    • ๐Ÿ›  Fixed bug when onUndeliveredElement wasn't called for unlimited channels (#2435)
    • ๐Ÿ›  Fixed a bug when ListenableFuture.isCancelled returned from asListenableFuture could have thrown an exception, thanks to @vadimsemenov (#2421)
    • Coroutine in callbackFlow and produce is properly cancelled when the channel was closed separately (#2506)