All Versions
62
Latest Version
Avg Release Cycle
39 days
Latest Release
47 days ago

Changelog History
Page 1

  • v1.3.3

    December 13, 2019

    Flow

    • 🐎 Flow.take performance is significantly improved (#1538).
    • 🔀 Flow.merge operator (#1491).
    • Reactive Flow adapters are promoted to stable API (#1549).
    • 🐎 Reusable cancellable continuations were introduced that improved the performance of various flow operators and iteration over channels (#1534).
    • 🛠 Fixed interaction of multiple flows with take operator (#1610).
    • 👍 Throw NoSuchElementException instead of UnsupportedOperationException for empty Flow in reduce operator (#1659).
    • onCompletion now rethrows downstream exceptions on emit attempt (#1654).
    • 👍 Allow non-emitting withContext from flow builder (#1616).

    Debugging

    • ⚡️ DebugProbes.dumpCoroutines is optimized to be able to print the 6-digit number of coroutines (#1535).
    • Properly capture unstarted lazy coroutines in debugger (#1544).
    • ✅ Capture coroutines launched from within a test constructor with CoroutinesTimeout test rule (#1542).
    • 👷 Stacktraces of Job-related coroutine machinery are shortened and prettified (#1574).
    • Stacktrace recovery unification that should provide a consistent experience recover of stacktrace (#1597).
    • 👍 Stacktrace recovery for withTimeout is supported (#1625).
    • 👻 Do not recover exception with a single String parameter constructor that is not a message (#1631).

    Other features

    • 0️⃣ Dispatchers.Default and Dispatchers.IO rework: CPU consumption is significantly lower, predictable idle threads termination (#840, #1046, #1286).
    • Avoid ServiceLoader for loading Dispatchers.Main (#1572, #1557, #878, #1606).
    • Consistently handle undeliverable exceptions in RxJava and Reactor integrations (#252, #1614).
    • 👍 yield support in immediate dispatchers (#1474).
    • CompletableDeferred.completeWith(result: Result<T>) is introduced.
    • ➕ Added support for tvOS and watchOS-based Native targets (#1596).

    🐛 Bug fixes and improvements

    • ⚡️ Kotlin version is updated to 1.3.61.
    • CoroutineDispatcher.isDispatchNeeded is promoted to stable API (#1014).
    • 🛠 Livelock and stackoverflows in mutual select expressions are fixed (#1411, #504).
    • Properly handle null values in ListenableFuture integration (#1510).
    • Making ReceiveChannel.cancel linearizability-friendly.
    • Linearizability of Channel.close in a complex contended cases (#1419).
    • 🛠 ArrayChannel.isBufferEmpty atomicity is fixed (#1526).
    • 📚 Various documentation improvements.
    • ⬇️ Reduced bytecode size of kotlinx-coroutines-core, reduced size of minified dex when using basic functionality of kotlinx-coroutines.
  • v1.3.2

    September 25, 2019

    🚀 This is a maintenance release that does not include any new features or bug fixes.

    • Reactive integrations for Flow are promoted to stable API.
    • 🗄 Obsolete reactive API is deprecated.
    • 🗄 Deprecation level for API deprecated in 1.3.0 is increased.
    • 📚 Various documentation improvements.
  • v1.3.1

    September 04, 2019

    ⚡️ This is a minor update with various fixes:

    • Flow: Fix recursion in combineTransform<T1, T2, R> (#1466).
    • 🛠 Fixed race in the Semaphore (#1477).
    • Repaired some of ListenableFuture.kt's cancellation corner cases (#1441).
    • 👻 Consistently unwrap exception in slow path of CompletionStage.asDeferred (#1479).
    • 📚 Various fixes in documentation (#1496, #1476, #1470, #1468).
    • ✅ Various cleanups and additions in tests.

    📇 Note: Kotlin/Native artifacts are now published with Gradle metadata format version 1.0, so you will need Gradle version 5.3 or later to use this version of kotlinx.coroutines in your Kotlin/Native project.

  • v1.3.0

    July 19, 2019

    Flow

    • Core Flow API is promoted to stable
    • 🆕 New basic Flow operators: withIndex, collectIndexed, distinctUntilChanged overload
    • 🆕 New core Flow operators: onStart and onCompletion
    • ReceiveChannel.consumeAsFlow and emitAll (#1340)

    General changes

    • ⚡️ Kotlin updated to 1.3.41
    • ➕ Added kotlinx-coroutines-bom with Maven Bill of Materials (#1110)
    • Reactive integrations are seriously improved
      • All builders now are top-level functions instead of extensions on CoroutineScope and prohibit Job instance in their context to simplify lifecycle management
      • Fatal exceptions are handled consistently (#1297)
      • Integration with Reactor Context added (#284)
    • Stacktrace recovery for suspend fun main (#1328)
    • CoroutineScope.cancel extension with message (#1338)
    • Protection against non-monotonic clocks in delay (#1312)
    • Duration.ZERO is handled properly in JDK 8 extensions (#1349)
    • Library code is adjusted to be more minification-friendly
  • v1.3.0-RC2

    Flow improvements

    • 💻 Operators for UI programming are reworked for the sake of consistency, naming scheme for operator overloads is introduced:

      • combineLatest is deprecated in the favor of combine.
      • combineTransform operator for non-trivial transformations (#1224).
      • Top-level combine and combineTransform overloads for multiple flows (#1262).
      • switchMap is deprecated. flatMapLatest, mapLatest and transformLatest are introduced instead (#1335).
      • collectLatest terminal operator (#1269).
    • 👌 Improved cancellation support in flattenMerge (#1392).

    • channelFlow cancellation does not leak to the parent (#1334).

    • 🛠 Fixed flow invariant enforcement for suspend fun main (#1421).

    • 🗄 delayEach and delayFlow are deprecated (#1429).

    General changes

    • Integration with Reactor context

      • Propagation of the coroutine context of await calls into Mono/Flux builder.
      • Publisher.asFlow propagates coroutine context from collect call to the Publisher.
      • New Flow.asFlux builder.
    • ServiceLoader-code is adjusted to avoid I/O on the Main thread on newer (3.6.0+) Android toolchain.

    • 🏗 Stacktrace recovery support for minified builds on Android (#1416).

    • ⚡️ Guava version in kotlinx-coroutines-guava updated to 28.0.

    • setTimeout-based JS dispatcher for platforms where process is unavailable (#1404).

    • Native, JS and common modules are added to kotlinx-coroutines-bom.

    • 🛠 Fixed bug with ignored acquiredPermits in Semaphore (#1423).

  • v1.3.0-rc2

    August 09, 2019

    Flow improvements

    💻 Operators for UI programming are reworked for the sake of consistency, naming scheme for operator overloads is introduced:

    • combineLatest is deprecated in the favor of combine.
    • combineTransform operator for non-trivial transformations (#1224).
    • Top-level combine and combineTransform overloads for multiple flows (#1262).
    • switchMap is deprecated. flatMapLatest, mapLatest and transformLatest are introduced instead (#1335).

    - collectLatest terminal operator (#1269).

    👌 Improved cancellation support in flattenMerge (#1392).

    channelFlow cancellation does not leak to the parent (#1334).

    🛠 Fixed flow invariant enforcement for suspend fun main (#1421).

    🗄 delayEach and delayFlow are deprecated (#1429).

    General changes

    Integration with Reactor context

    • Propagation of the coroutine context of await calls into Mono/Flux builder.
    • Publisher.asFlow propagates coroutine context from collect call to the Publisher.

    - New Flow.asFlux builder.

    ServiceLoader-code is adjusted to avoid I/O on the Main thread on newer (3.6.0+) Android toolchain.

    🏗 Stacktrace recovery support for minified builds on Android (#1416).

    ⚡️ Guava version in kotlinx-coroutines-guava updated to 28.0.

    setTimeout-based JS dispatcher for platforms where process is unavailable (#1404).

    Native, JS and common modules are added to kotlinx-coroutines-bom.

    🛠 Fixed bug with ignored acquiredPermits in Semaphore (#1423).

  • v1.3.0-RC

    Flow

    • Core Flow API is promoted to stable
    • 🆕 New basic Flow operators: withIndex, collectIndexed, distinctUntilChanged overload
    • 🆕 New core Flow operators: onStart and onCompletion
    • ReceiveChannel.consumeAsFlow and emitAll (#1340)

    General changes

    • ⚡️ Kotlin updated to 1.3.41
    • ➕ Added kotlinx-coroutines-bom with Maven Bill of Materials (#1110)
    • Reactive integrations are seriously improved
      • All builders now are top-level functions instead of extensions on CoroutineScope and prohibit Job instance in their context to simplify lifecycle management
      • Fatal exceptions are handled consistently (#1297)
      • Integration with Reactor Context added (#284)
    • Stacktrace recovery for suspend fun main (#1328)
    • CoroutineScope.cancel extension with message (#1338)
    • Protection against non-monotonic clocks in delay (#1312)
    • Duration.ZERO is handled properly in JDK 8 extensions (#1349)
    • Library code is adjusted to be more minification-friendly
  • v1.3.0-rc

    July 19, 2019

    Flow

    • Core Flow API is promoted to stable
    • 🆕 New basic Flow operators: withIndex, collectIndexed, distinctUntilChanged overload
    • 🆕 New core Flow operators: onStart and onCompletion
    • ReceiveChannel.consumeAsFlow and emitAll (#1340)

    General changes

    • ⚡️ Kotlin updated to 1.3.41
    • ➕ Added kotlinx-coroutines-bom with Maven Bill of Materials (#1110)
    • Reactive integrations are seriously improved
      • All builders now are top-level functions instead of extensions on CoroutineScope and prohibit Job instance in their context to simplify lifecycle management
      • Fatal exceptions are handled consistently (#1297)
      • Integration with Reactor Context added (#284)
    • Stacktrace recovery for suspend fun main (#1328)
    • CoroutineScope.cancel extension with message (#1338)
    • Protection against non-monotonic clocks in delay (#1312)
    • Duration.ZERO is handled properly in JDK 8 extensions (#1349)
    • Library code is adjusted to be more minification-friendly
  • v1.3.0-M2

    June 26, 2019
    • ⚡️ Kotlin updated to 1.3.40.
    • 👻 Flow exception transparency concept.
    • 🆕 New declarative Flow operators: onCompletion, catch, retryWhen, launchIn. onError* operators are deprecated in favour of catch. (#1263)
    • Publisher.asFlow is integrated with buffer operator.
    • 0️⃣ Publisher.openSubscription default request size is 1 instead of 0 (#1267).
  • v1.3.0-M1

    June 06, 2019

    Flow:

    • Core Flow interfaces and operators are graduated from preview status to experimental.
    • Context preservation invariant rework (#1210).
      • channelFlow and callbackFlow replacements for flowViaChannel for concurrent flows or callback-based APIs.
      • flow prohibits emissions from non-scoped coroutines by default and recommends to use channelFlow instead to avoid most of the concurrency-related bugs.
    • Flow cannot be implemented directly
      • AbstractFlow is introduced for extension (e.g. for managing state) and ensures all context preservation invariants.
    • Buffer size is decoupled from all operators that imply channel usage (#1233)
      • buffer operator can be used to adjust buffer size of any buffer-dependent operator (e.g. channelFlow, flowOn and flatMapMerge).
      • conflate operator is introduced.
    • 🐎 Flow performance is significantly improved.
    • 🆕 New operators: scan, scanReduce, first, emitAll.
    • 🗄 flowWith and flowViaChannel are deprecated.
    • retry ignores cancellation exceptions from upstream when the flow was externally cancelled (#1122).
    • combineLatest overloads for multiple flows (#1193).
    • 🛠 Fixed numerical overflow in drop operator.

    Channels:

    • consumeEach is promoted to experimental API (#1080).
    • ✅ Conflated channels always deliver the latest value after closing (#332, #1235).
    • 🐎 Non-suspending ChannelIterator.next to improve iteration performance (#1162).
    • 👻 Channel exception types are consistent with produce and are no longer swallowed as cancellation exceptions in case of programmatic errors (#957, #1128).
    • 🗄 All operators on channels (that were prone to coroutine leaks) are deprecated in the favor of Flow.

    General changes:

    • ⚡️ Kotlin updated to 1.3.31
    • Semaphore implementation (#1088)
    • 🚚 Loading of Dispatchers.Main is tweaked so the latest version of R8 can completely remove I/O when loading it (#1231).
    • Performace of all JS dispatchers is significantly improved (#820).
    • withContext checks cancellation status on exit to make reasoning about sequential concurrent code easier (#1177).
    • 👻 Consistent exception handling mechanism for complex hierarchies (#689).
    • Convenient overload for CoroutinesTimeout.seconds (#1184).
    • 🛠 Fix cancellation bug in onJoin (#1130).
    • Prevent internal names clash that caused errors for ProGuard (#1159).
    • POSIX's nanosleep as delay in runBlocking in K/N (#1225).