• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Change log for kotlinx.coroutines
2
3## Version 1.10.1
4
5* Fixed binary incompatibility introduced for non-JVM targets in #4261 (#4309).
6
7## Version 1.10.0
8
9* Kotlin was updated to 2.1.0 (#4284).
10* Introduced `Flow.any`, `Flow.all`, and `Flow.none` (#4212). Thanks, @CLOVIS-AI!
11* Reorganized `kotlinx-coroutines-debug` and `kotlinx-coroutines-core` code to avoid a split package between the two artifacts (#4247). Note that directly referencing `kotlinx.coroutines.debug.AgentPremain` must now be replaced with `kotlinx.coroutines.debug.internal.AgentPremain`. Thanks, @sellmair!
12* No longer shade byte-buddy in `kotlinx-coroutines-debug`, reducing the artifact size and simplifying the build configuration of client code. Thanks, @sellmair!
13* Fixed `NullPointerException` when using Java-deserialized `kotlinx-coroutines-core` exceptions (#4291). Thanks, @AlexRiedler!
14* Properly report exceptions thrown by `CoroutineDispatcher.dispatch` instead of raising internal errors (#4091). Thanks, @zuevmaxim!
15* Fixed a bug that delayed scheduling of a `Dispatchers.Default` or `Dispatchers.IO` task after a `yield()` in rare scenarios (#4248).
16* Fixed a bug that prevented the `main()` coroutine on Wasm/WASI from executing after a `delay()` call in some scenarios (#4239).
17* Fixed scheduling of `runBlocking` tasks on Kotlin/Native that arrive after the `runBlocking` block was exited (#4245).
18* Fixed some terminal `Flow` operators sometimes resuming without taking cancellation into account (#4254). Thanks, @jxdabc!
19* Fixed a bug on the JVM that caused coroutine-bound `ThreadLocal` values not to get cleaned when using non-`CoroutineDispatcher` continuation interceptors (#4296).
20* Small tweaks, fixes, and documentation improvements.
21
22## Version 1.9.0
23
24### Features
25
26* Wasm/WASI target support (#4064). Thanks, @igoriakovlev!
27* `limitedParallelism` now optionally accepts the name of the dispatcher view for easier debugging (#4023).
28* No longer initialize `Dispatchers.IO` on the JVM when other standard dispatchers are accessed (#4166). Thanks, @metalhead8816!
29* Introduced the `Flow<T>.chunked(size: Int): Flow<List<T>>` operator that groups emitted values into groups of the given size (#1290).
30* Closeable dispatchers are instances of `AutoCloseable` now (#4123).
31
32### Fixes
33
34* Calling `hasNext` on a `Channel`'s iterator is idempotent (#4065). Thanks, @gitpaxultek!
35* `CoroutineScope()` created without an explicit dispatcher uses `Dispatchers.Default` on Native (#4074). Thanks, @whyoleg!
36* Fixed a bug that prevented non-Android `Dispatchers.Main` from initializing when the Firebase dependency is used (#3914).
37* Ensured a more intuitive ordering of tasks in `runBlocking` (#4134).
38* Forbid casting a `Mutex` to `Semaphore` (#4176).
39* Worked around a stack overflow that may occur when calling `asDeferred` on a `Future` many times (#4156).
40
41### Deprecations and promotions
42
43* Advanced the deprecation levels for `BroadcastChannel`-based API (#4197).
44* Advanced the deprecation levels for the old `kotlinx-coroutines-test` API (#4198).
45* Deprecated `Job.cancelFutureOnCompletion` (#4173).
46* Promoted `CoroutineDispatcher.limitedParallelism` to stable (#3864).
47* Promoted `CoroutineStart.ATOMIC` from `ExperimentalCoroutinesApi` to `DelicateCoroutinesApi` (#4169).
48* Promoted `CancellableContinuation.resume` with an `onCancellation` lambda to stable, providing extra arguments to the lambda (#4088).
49* Marked the classes and interfaces that are not supposed to be inherited from with the new `InternalForInheritanceCoroutinesApi` opt-in (#3770).
50* Marked the classes and interfaces inheriting from which is not stable with the new `ExperimentalForInheritanceCoroutinesApi` opt-in (#3770).
51
52### Other
53
54* Kotlin was updated to 2.0 (#4137).
55* Reworked the documentation for `CoroutineStart` and `Channel`-based API (#4147, #4148, #4167). Thanks, @globsterg!
56* Simplified the internal implementation of `Job` (#4053).
57* Small tweaks, fixes, and documentation improvements.
58
59## Version 1.9.0-RC.2
60
61* Advanced the deprecation levels for `BroadcastChannel`-based API (#4197).
62* Advanced the deprecation levels for the old `kotlinx-coroutines-test` API (#4198).
63* Promoted `CoroutineStart.ATOMIC` from `ExperimentalCoroutinesApi` to `DelicateCoroutinesApi` (#4169).
64* Reworked the documentation for `CoroutineStart` and `Channel`-based API (#4147, #4148, #4167). Thanks, @globsterg!
65* Forbid casting a `Mutex` to `Semaphore` (#4176).
66* Deprecated `Job.cancelFutureOnCompletion` (#4173).
67* Worked around a stack overflow that may occur when calling `asDeferred` on a `Future` many times (#4156).
68* Fixed a bug that disallowed setting a custom `probeCoroutineResumed` when starting coroutines with `UNDISPATCHED` (#4162).
69* No longer initialize `Dispatchers.IO` on the JVM when other standard dispatchers are accessed (#4166). Thanks, @metalhead8816!
70* Small tweaks, fixes, and documentation improvements.
71
72## Version 1.9.0-RC
73
74* Kotlin was updated to 2.0 (#4137).
75* Introduced the `Flow<T>.chunked(size: Int): Flow<List<T>>` operator that groups emitted values into groups of the given size (#1290).
76* Closeable dispatchers are instances of `AutoCloseable` now (#4123).
77* `limitedParallelism` now optionally accepts the name of the dispatcher view for easier debugging (#4023).
78* Marked the classes and interfaces that are not supposed to be inherited from with the new `InternalForInheritanceCoroutinesApi` opt-in (#3770).
79* Marked the classes and interfaces inheriting from which is not stable with the new `ExperimentalForInheritanceCoroutinesApi` opt-in (#3770).
80* Wasm/WASI target support (#4064). Thanks, @igoriakovlev!
81* Promoted `CoroutineDispatcher.limitedParallelism` to stable (#3864).
82* Promoted `CancellableContinuation.resume` with an `onCancellation` lambda to stable, providing extra arguments to the lambda (#4088).
83* Ensured a more intuitive ordering of tasks in `runBlocking` (#4134).
84* Simplified the internal implementation of `Job` (#4053).
85* Fixed a bug that prevented non-Android `Dispatchers.Main` from initializing when the Firebase dependency is used (#3914).
86* Calling `hasNext` on a `Channel`'s iterator is idempotent (#4065). Thanks, @gitpaxultek!
87* `CoroutineScope()` created without an explicit dispatcher uses `Dispatchers.Default` on Native (#4074). Thanks, @whyoleg!
88* Small tweaks and documentation fixes.
89
90## Version 1.8.1
91
92* Remove the `@ExperimentalTime` annotation from usages of `TimeSource` (#4046). Thanks, @hfhbd!
93* Introduce a workaround for an Android bug that caused an occasional `NullPointerException` when setting the `StateFlow` value on old Android devices (#3820).
94* No longer use `kotlin.random.Random` as part of `Dispatchers.Default` and `Dispatchers.IO` initialization (#4051).
95* `Flow.timeout` throws the exception with which the channel was closed (#4071).
96* Small tweaks and documentation fixes.
97
98### Changelog relative to version 1.8.1-Beta
99
100* `Flow.timeout` throws the exception with which the channel was closed (#4071).
101* Small documentation fixes.
102
103## Version 1.8.1-Beta
104
105* Remove the `@ExperimentalTime` annotation from usages of `TimeSource` (#4046). Thanks, @hfhbd!
106* Attempt a workaround for an Android bug that caused an occasional `NullPointerException` when setting the `StateFlow` value on old Android devices (#3820).
107* No longer use `kotlin.random.Random` as part of `Dispatchers.Default` and `Dispatchers.IO` initialization (#4051).
108* Small tweaks.
109
110## Version 1.8.0
111
112* Implement the library for the Web Assembly (Wasm) for JavaScript (#3713). Thanks @igoriakovlev!
113* Major Kotlin version update: was 1.8.20, became 1.9.21.
114* On Android, ensure that `Dispatchers.Main != Dispatchers.Main.immediate` (#3545, #3963).
115* Fixed a bug that caused `Flow` operators that limit cancel the upstream flow to forget that they were already finished if there is another such operator upstream (#4035, #4038)
116* `kotlinx-coroutines-debug` is published with the correct Java 9 module info (#3944).
117* `kotlinx-coroutines-debug` no longer requires manually setting `DebugProbes.enableCoroutineCreationStackTraces` to `false`, it's the default (#3783).
118* `kotlinx-coroutines-test`: set the default timeout of `runTest` to 60 seconds, added the ability to configure it on the JVM with the `kotlinx.coroutines.test.default_timeout=10s` (#3800).
119* `kotlinx-coroutines-test`: fixed a bug that could lead to not all uncaught exceptions being reported after some tests failed (#3800).
120* `delay(Duration)` rounds nanoseconds up to whole milliseconds and not down (#3920). Thanks @kevincianfarini!
121* `Dispatchers.Default` and the default thread for background work are guaranteed to use the same context classloader as the object containing it them (#3832).
122* It is guaranteed that by the time `SharedFlow.collect` suspends for the first time, it's registered as a subscriber for that `SharedFlow` (#3885). Before, it was also true, but not documented.
123* Atomicfu version is updated to 0.23.1, and Kotlin/Native atomic transformations are enabled, reducing the footprint of coroutine-heavy code (#3954).
124* Added a workaround for miscompilation of `withLock` on JS (#3881). Thanks @CLOVIS-AI!
125* Small tweaks and documentation fixes.
126
127### Changelog relative to version 1.8.0-RC2
128
129* `kotlinx-coroutines-debug` no longer requires manually setting `DebugProbes.enableCoroutineCreationStackTraces` to `false`, it's the default (#3783).
130* Fixed a bug that caused `Flow` operators that limit cancel the upstream flow to forget that they were already finished if there is another such operator upstream (#4035, #4038)
131* Small documentation fixes.
132
133## Version 1.8.0-RC2
134
135* Fixed a bug introduced in 1.8.0-RC where `Mutex.onLock` would not unlock if a non-local return was performed (#3985).
136* Fixed a bug introduced in 1.8.0-RC where depending on kotlinx-coroutines in Native code failed with a compilation error `Could not find "org.jetbrains.kotlinx:atomicfu-cinterop-interop"` (#3968).
137* Small documentation fixes.
138
139## Version 1.8.0-RC
140
141* Implement the library for the Web Assembly (Wasm) for JavaScript (#3713). Thanks @igoriakovlev!
142* On Android, ensure that `Dispatchers.Main != Dispatchers.Main.immediate` (#3545, #3963).
143* `kotlinx-coroutines-debug` is published with the correct Java 9 module info (#3944).
144* Major Kotlin version update: was 1.8.20, became 1.9.21.
145* `kotlinx-coroutines-test`: set the default timeout of `runTest` to 60 seconds, added the ability to configure it on the JVM with the `kotlinx.coroutines.test.default_timeout=10s` (#3800).
146* `kotlinx-coroutines-test`: fixed a bug that could lead to not all uncaught exceptions being reported after some tests failed (#3800).
147* `delay(Duration)` rounds nanoseconds up to whole milliseconds and not down (#3920). Thanks @kevincianfarini!
148* `Dispatchers.Default` and the default thread for background work are guaranteed to use the same context classloader as the object containing it them (#3832).
149* It is guaranteed that by the time `SharedFlow.collect` suspends for the first time, it's registered as a subscriber for that `SharedFlow` (#3885). Before, it was also true, but not documented.
150* Atomicfu version is updated to 0.23.1, and Kotlin/Native atomic transformations are enabled, reducing the footprint of coroutine-heavy code (#3954).
151* Added a workaround for miscompilation of `withLock` on JS (#3881). Thanks @CLOVIS-AI!
152* Small tweaks and documentation fixes.
153
154## Version 1.7.3
155
156* Disabled the publication of the multiplatform library metadata for the old (1.6 and earlier) KMP Gradle plugin (#3809).
157* Fixed a bug introduced in 1.7.2 that disabled the coroutine debugger in IDEA (#3822).
158
159## Version 1.7.2
160
161### Bug fixes and improvements
162
163* Coroutines debugger no longer keeps track of coroutines with empty coroutine context (#3782).
164* `CopyableThreadContextElement` now properly copies an element when crossing the coroutine boundary in `flowOn` (#3787). Thanks @wanyingd1996!
165* Coroutine timeouts no longer prevent K/N `newSingleThreadContext` from closing (#3768).
166* A non-linearizability in `Mutex` during `tryLock`/`unlock` sequence with owners is fixed (#3745).
167* Atomicfu version is updated to 0.21.0.
168
169## Version 1.7.1
170
171### Bug fixes and improvements
172
173* Special characters in coroutine names in JSON dumps are supported (#3747)
174* The binary compatibility of the experimental overload of `runTest` is restored (#3673)
175* Channels that don't use `onUndeliveredElement` now allocate less memory (#3646)
176
177## Version 1.7.0
178
179### Core API significant improvements
180
181* New `Channel` implementation with significant performance improvements across the API (#3621).
182* New `select` operator implementation: faster, more lightweight, and more robust (#3020).
183* `Mutex` and `Semaphore` now share the same underlying data structure (#3020).
184* `Dispatchers.IO` is added to K/N (#3205)
185  * `newFixedThreadPool` and `Dispatchers.Default` implementations on K/N were wholly rewritten to support graceful growth under load (#3595).
186* `kotlinx-coroutines-test` rework:
187  - Add the `timeout` parameter to `runTest` for the whole-test timeout, 10 seconds by default (#3270). This replaces the configuration of quiescence timeouts, which is now deprecated (#3603).
188  - The `withTimeout` exception messages indicate if the timeout used the virtual time (#3588).
189  - `TestCoroutineScheduler`, `runTest`, and `TestScope` API are promoted to stable (#3622).
190  - `runTest` now also fails if there were uncaught exceptions in coroutines not inherited from the test coroutine (#1205).
191
192### Breaking changes
193
194* Old K/N memory model is no longer supported (#3375).
195* New generic upper bounds were added to reactive integration API where the language since 1.8.0 dictates (#3393).
196* `kotlinx-coroutines-core` and `kotlinx-coroutines-jdk8` artifacts were merged into a single artifact (#3268).
197* Artificial stackframes in stacktrace recovery no longer contain the `\b` symbol and are now navigable in IDE and supplied with proper documentation (#2291).
198* `CoroutineContext.isActive` returns `true` for contexts without any job in them (#3300).
199
200### Bug fixes and improvements
201
202* Kotlin version is updated to 1.8.20
203* Atomicfu version is updated to 0.20.2.
204* `JavaFx` version is updated to 17.0.2 in `kotlinx-coroutines-javafx` (#3671)..
205* JPMS is supported (#2237). Thanks @lion7!
206* `BroadcastChannel` and all the corresponding API are deprecated (#2680).
207* Added all supported K/N targets (#3601, #812, #855).
208* K/N `Dispatchers.Default` is backed by the number of threads equal to the number of available cores (#3366).
209* Fixed an issue where some coroutines' internal exceptions were not properly serializable (#3328).
210* Introduced `Job.parent` API (#3201).
211* Fixed a bug when `TestScheduler` leaked cancelled jobs (#3398).
212* `TestScope.timeSource` now provides comparable time marks (#3617). Thanks @hfhbd!
213* Fixed an issue when cancelled `withTimeout` handles were preserved in JS runtime (#3440).
214* Ensure `awaitFrame` only awaits a single frame when used from the main looper (#3432). Thanks @pablobaxter!
215* Obsolete `Class-Path` attribute was removed from `kotlinx-coroutines-debug.jar` manifest (#3361).
216* Fixed a bug when `updateThreadContext` operated on the parent context (#3411).
217* Added new `Flow.filterIsInstance` extension (#3240).
218* `Dispatchers.Default` thread name prefixes are now configurable with system property (#3231).
219* Added `Flow.timeout` operator as `@FlowPreview` (#2624). Thanks @pablobaxter!
220* Improved the performance of the `future` builder in case of exceptions (#3475). Thanks @He-Pin!
221* `Mono.awaitSingleOrNull` now waits for the `onComplete` signal (#3487).
222* `Channel.isClosedForSend` and `Channel.isClosedForReceive` are promoted from experimental to delicate (#3448).
223* Fixed a data race in native `EventLoop` (#3547).
224* `Dispatchers.IO.limitedParallelism(valueLargerThanIOSize)` no longer creates an additional wrapper (#3442). Thanks @dovchinnikov!
225* Various `@FlowPreview` and `@ExperimentalCoroutinesApi` are promoted to experimental and stable respectively (#3542, #3097, #3548).
226* Performance improvements in `Dispatchers.Default` and `Dispatchers.IO` (#3416, #3418).
227* Fixed a bug when internal `suspendCancellableCoroutineReusable` might have hanged (#3613).
228* Introduced internal API to process events in the current system dispatcher (#3439).
229* Global `CoroutineExceptionHandler` is no longer invoked in case of unprocessed `future` failure (#3452).
230* Performance improvements and reduced thread-local pressure for the `withContext` operator (#3592).
231* Improved performance of `DebugProbes` (#3527).
232* Fixed a bug when the coroutine debugger might have detected the state of a coroutine incorrectly (#3193).
233* `CoroutineDispatcher.asExecutor()` runs tasks without dispatching if the dispatcher is unconfined (#3683). Thanks @odedniv!
234* `SharedFlow.toMutableList` and `SharedFlow.toSet` lints are introduced (#3706).
235* `Channel.invokeOnClose` is promoted to stable API (#3358).
236* Improved lock contention in `Dispatchers.Default` and `Dispatchers.IO` during the startup phase (#3652).
237* Fixed a bug that led to threads oversubscription in `Dispatchers.Default` (#3642).
238* Fixed a bug that allowed `limitedParallelism` to perform dispatches even after the underlying dispatcher was closed (#3672).
239* Fixed a bug that prevented stacktrace recovery when the exception's constructor from `cause` was selected (#3714).
240* Improved sanitizing of stracktrace-recovered traces (#3714).
241* Introduced an internal flag to disable uncaught exceptions reporting in tests as a temporary migration mechanism (#3736).
242* Various documentation improvements and fixes.
243
244Changelog for previous versions may be found in [CHANGES_UP_TO_1.7.md](CHANGES_UP_TO_1.7.md)
245