All Versions
83
Latest Version
Avg Release Cycle
-
Latest Release
-
Changelog History
Page 2
Changelog History
Page 2
-
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
, andsendBlocking
methods are deprecated, internalreceiveCatching
andonReceiveCatching
removed,receiveOrNull
andonReceiveOrNull
are completely deprecated. Previously deprecatedSendChannel.isFull
declaration is removed. Channel operators deprecated withERROR
are nowHIDDEN
. - ๐ New methods
receiveCatching
,onReceiveCatching
trySend
,tryReceive
, andtrySendBlocking
along with the new result typeChannelResult
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
andConflatedBroadcastChannel
are marked asObsoleteCoroutinesApi
in the favor orSharedFlow
andStateFlow
. The migration scheme can be found in their documentation. These classes will be deprecated in the next major release. callbackFlow
andchannelFlow
are promoted to stable API.
Reactive integrations
- All existing API in modules
kotlinx-coroutines-rx2
,kotlinx-coroutines-rx3
,kotlinx-coroutines-reactive
,kotlinx-coroutines-reactor
, andkotlinx-coroutines-jdk9
were revisited and promoted to stable (#2545). publish
is no longer allowed to emitnull
values (#2646).- ๐ Misleading
awaitSingleOr*
functions onPublisher
type are deprecated (#2591). - ๐
MaybeSource.await
is deprecated in the favor ofawaitSingle
, additional lint functions forMono
are added in order to prevent ambiguousPublisher
usages (#2628, #1587). - ๐
ContextView
support inkotlinx-coroutines-reactor
(#2575). - ๐ All reactive builders no longer ignore inner cancellation exceptions preventing their completion (#2262, #2646).
MaybeSource.collect
andMaybe.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
andFlow.lastOrNull
operators (#2246).Flow.runningFold
operator (#2641).CoroutinesTimeout
rule for JUnit5 (#2197).- ๐ Internals of
Job
andAbstractCoroutine
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 isGlobalScope
(#2637). - ๐ Fixed bug introduced in
1.4.3
whenkotlinx-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).
- ๐ Major channels API rework (#330, #974). Existing
-
v1.5.0-RC Changes
Channels API
- ๐ Major channels API rework (#330, #974). Existing
offer
,poll
, andsendBlocking
methods are deprecated, internalreceiveCatching
andonReceiveCatching
removed,receiveOrNull
andonReceiveOrNull
are completely deprecated. Previously deprecatedSendChannel.isFull
declaration is removed. Channel operators deprecated withERROR
are nowHIDDEN
. - ๐ New methods
receiveCatching
,onReceiveCatching
trySend
,tryReceive
, andtrySendBlocking
along with the new result typeChannelResult
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
andConflatedBroadcastChannel
are marked asObsoleteCoroutinesApi
in the favor orSharedFlow
andStateFlow
. The migration scheme can be found in their documentation. These classes will be deprecated in the next major release. callbackFlow
andchannelFlow
are promoted to stable API.
Reactive integrations
- All existing API in modules
kotlinx-coroutines-rx2
,kotlinx-coroutines-rx3
,kotlinx-coroutines-reactive
,kotlinx-coroutines-reactor
, andkotlinx-coroutines-jdk9
were revisited and promoted to stable (#2545). publish
is no longer allowed to emitnull
values (#2646).- ๐ Misleading
awaitSingleOr*
functions onPublisher
type are deprecated (#2591). - ๐
MaybeSource.await
is deprecated in the favor ofawaitSingle
, additional lint functions forMono
are added in order to prevent ambiguousPublisher
usages (#2628, #1587). - ๐
ContextView
support inkotlinx-coroutines-reactor
(#2575). - ๐ All reactive builders no longer ignore inner cancellation exceptions preventing their completion (#2262, #2646).
MaybeSource.collect
andMaybe.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
andFlow.lastOrNull
operators (#2246).Flow.runningFold
operator (#2641).CoroutinesTimeout
rule for JUnit5 (#2197).- ๐ Internals of
Job
andAbstractCoroutine
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 isGlobalScope
(#2637). - ๐ Fixed bug introduced in
1.4.3
whenkotlinx-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).
- ๐ Major channels API rework (#330, #974). Existing
-
v1.4.3 Changes
General changes
- โช Thread context is properly preserved and restored for coroutines without
ThreadContextElement
(#985) - โก๏ธ
ThreadContextElement
s 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
to3.4.1
, thanks to @sokomishalov (#2432) callInPlace
contract added toReceiveChannel.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 toSchedulerTimeSource
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/
asDeferredfor
MinimalState` implementations in jdk8 module (#2456) - ๐ Fixed bug when
onUndeliveredElement
wasn't called for unlimited channels (#2435) - ๐ Fixed a bug when
ListenableFuture.isCancelled
returned fromasListenableFuture
could have thrown an exception, thanks to @vadimsemenov (#2421) - Coroutine in
callbackFlow
andproduce
is properly cancelled when the channel was closed separately (#2506)
- โช Thread context is properly preserved and restored for coroutines without
-
v1.4.2 Changes
- ๐ Fixed
StackOverflowError
inJob.toString
whenJob
is observed in its intermediate state (#2371). - ๐ Improved liveness and latency of
Dispatchers.Default
andDispatchers.IO
in low-loaded mode (#2381). - ๐ Improved performance of consecutive
Channel.cancel
invocations (#2384). SharingStarted
is nowfun
interface (#2397).- โ Additional lint settings for
SharedFlow
to catch programmatic errors early (#2376). - ๐ Fixed bug when mutex and semaphore were not released during cancellation (#2390, thanks to @Tilps for reproducing).
- Some corner cases in cancellation propagation between coroutines and listenable futures are repaired (#1442, thanks to @vadimsemenov).
- ๐ Fixed unconditional cast to
CoroutineStackFrame
in exception recovery that triggered failures of instrumented code (#2386). - ๐ Platform-specific dependencies are removed from
kotlinx-coroutines-javafx
(#2360).
- ๐ Fixed
-
v1.4.1 Changes
๐ This is a patch release with an important fix to the
SharedFlow
implementation.- SharedFlow: Fix scenario with concurrent emitters and cancellation of subscriber (#2359, thanks to @vehovsky for the bug report).
-
v1.4.0 Changes
๐ Improvements
StateFlow
,SharedFlow
and corresponding operators are promoted to stable API (#2316).- โฑ
Flow.debounce
operator with timeout selector based on each individual element is added (#1216, thanks to @mkano9!). - ๐ท
CoroutineContext.job
extension property is introduced (#2159). Flow.combine operator
is reworked:- Complete fairness is maintained for single-threaded dispatchers.
- Its performance is improved, depending on the use-case, by at least 50% (#2296).
- Quadratic complexity depending on the number of upstream flows is eliminated (#2296).
crossinline
andinline
-heavy internals are removed, fixing sporadic SIGSEGV on Mediatek Android devices (#1683, #1743).
- ๐
Flow.zip
operator performance is improved by 40%. - ๐ Various API has been promoted to stable or its deprecation level has been raised (#2316).
๐ Bug fixes
- ๐ป Suspendable
stateIn
operator propagates exception to the caller when upstream fails to produce initial value (#2329). - ๐ Fix
SharedFlow
with replay for subscribers working at different speed (#2325). - ๐ Do not fail debug agent installation when security manager does not provide access to system properties (#2311).
- Cancelled lazy coroutines are properly cleaned up from debug agent output (#2294).
BlockHound
false-positives are correctly filtered out (#2302, #2190, #2303).- ๐ Potential crash during a race between cancellation and upstream in
Observable.asFlow
is fixed (#2104, #2299, thanks to @LouisCAD and @drinkthestars).
-
v1.4.0-M1 Changes
๐ฅ Breaking changes
- ๐ The concept of atomic cancellation in channels is removed. All operations in channels
and corresponding
Flow
operators are cancellable in non-atomic way (#1813). - โฑ If
CoroutineDispatcher
throwsRejectedExecutionException
, cancel currentJob
and schedule its execution toDispatchers.IO
(#2003). CancellableContinuation.invokeOnCancellation
is invoked if the continuation was cancelled while its resume has been dispatched (#1915).Flow.singleOrNull
operator is aligned with standard library and does not longer throwIllegalStateException
on multiple values (#2289).
๐ New experimental features
- ๐
SharedFlow
primitive for managing hot sources of events with support of various subscription mechanisms, replay logs and buffering (#2034). Flow.shareIn
andFlow.stateIn
operators to transform cold instances of flow to hotSharedFlow
andStateFlow
respectively (#2047).
Other
- ๐ Support leak-free closeable resources transfer via
onUndeliveredElement
in channels (#1936). - ๐ Changed ABI in reactive integrations for Java interoperability (#2182).
- ๐ Fixed ProGuard rules for
kotlinx-coroutines-core
(#2046, #2266). - ๐ Lint settings were added to
Flow
to avoid accidental capturing of outerCoroutineScope
for cancellation check (#2038).
External contributions
- ๐ Allow nullable types in
Flow.firstOrNull
andFlow.singleOrNull
by @ansman (#2229). - โ Add
Publisher.awaitSingleOrDefault|Null|Else
extensions by @sdeleuze (#1993). awaitCancellation
top-level function by @LouisCAD (#2213).- ๐ Significant part of our Gradle build scripts were migrated to
.kts
by @turansky.
Thank you for your contributions and participation in the Kotlin community!
- ๐ The concept of atomic cancellation in channels is removed. All operations in channels
and corresponding
-
v1.3.9 Changes
- ๐ Support of
CoroutineContext
inFlow.asPublisher
and similar reactive builders (#2155). - โก๏ธ Kotlin updated to 1.4.0.
- Transition to new HMPP publication scheme for multiplatform usages:
- Artifacts
kotlinx-coroutines-core-common
andkotlinx-coroutines-core-native
are removed. - For multiplatform usages, it's enough to [depend directly](README.md#multiplatform) on
kotlinx-coroutines-core
incommonMain
source-set. - The same artifact coordinates can be used to depend on platform-specific artifact in platform-specific source-set.
- Artifacts
- ๐ Support of
-
v1.3.8 Changes
๐ New experimental features
- โ Added
Flow.transformWhile operator
(#2065). - Replaced
scanReduce
withrunningReduce
to be consistent with the Kotlin standard library (#2139).
๐ Bug fixes and improvements
- ๐ Improve user experience for the upcoming coroutines debugger (#2093, #2118, #2131).
- Debugger no longer retains strong references to the running coroutines (#2129).
- ๐ Fixed race in
Flow.asPublisher
(#2109). - ๐ Fixed
ensureActive
to work in the empty context case to fixIllegalStateException
when using flow fromsuspend fun main
(#2044). - ๐ Fixed a problem with
AbortFlowException
in theFlow.first
operator to avoid erroneousNoSuchElementException
(#2051). - ๐ Fixed JVM dependency on Android annotations (#2075).
- โ Removed keep rules mentioning
kotlinx.coroutines.android
from core module (#2061 by @mkj-gram). - ๐ Corrected some docs and examples (#2062, #2071, #2076, #2107, #2098, #2127, #2078, #2135).
- ๐ Improved the docs and guide on flow cancellation (#2043).
- ๐ Updated Gradle version to
6.3
(it only affects multiplatform artifacts in this release).
- โ Added
-
v1.3.7 Changes
- ๐ Fixed problem that triggered Android Lint failure (#2004).
- ๐ New
Flow.cancellable()
operator for cooperative cancellation (#2026). - ๐ Emissions from
flow
builder now check cancellation status and are properly cancellable (#2026). - ๐ New
currentCoroutineContext
function to use unambiguously in the contexts withCoroutineScope
in receiver position (#2026). - ๐
EXACTLY_ONCE
contract support in coroutine builders. - ๐ Various documentation improvements.