All Versions
51
Latest Version
Avg Release Cycle
83 days
Latest Release
1132 days ago

Changelog History
Page 1

  • v3.4.0 Changes

    May 14, 2021

    πŸš€ The release is binary and source compatible with 3.x series, and was cross-built for the following Scala and ScalaJS versions:

    • Scala 2.12, 2.13 and 3.0
    • Scala.js 1.5.1

    WARN: we're dropping compatibility with Scala 2.11 and ScalaJS 0.6.x. If you still need those you'll have to stay on version 3.3.0.

    πŸš€ Changes in this release:

    • ⬇️ Dropped support for Scala 2.11 and Scala.js 0.6.x
    • ⚑️ Dependency updates:
      • Cats 2.6.1
      • Cats-Effect 2.5.1
      • JCTools 3.3.0
    • βž• Adds support for Scala 3 (#1326, #1327, #1328, #1329, #1344, #1323)
    • βž• Adds Observable.whileBusyAggregateEvents (#1320)
    • πŸ›  Fix tracing in Coeval and Task via a more accurate filter (#1353)
    • βž• Adds Observable.throttleLatest (#1396)
    • Implement pagination for Observable (#1381)

    πŸš€ This release was made possible by the work and feedback of:

    • Alexandru Nedelcu (@alexandru)
    • Dominik WosiΕ„ski (@Wosin)
    • Lars Hupel (@larsrh)
    • Luke Stephenson (@lukestephenson)
    • Oleg Pyzhcov (@oleg-py)
    • Pau AlarcΓ³n (@paualarco)
    • Piotr GawryΕ› (@Avasil)
  • v3.3.0 Changes

    November 07, 2020

    πŸš€ The release is binary and source compatible with 3.x.x line.
    πŸš€ It is released for the following Scala and ScalaJS versions:

    • Scala 2.11: ScalaJS 0.6.x
    • Scala 2.12: ScalaJS 0.6.x and 1.3.x
    • Scala 2.13: ScalaJS 0.6.x and 1.3.x

    πŸš€ Note that most likely, this is going to be the last release on ScalaJS 0.6.x.
    We can consider doing backports on-demand.

    Highlights

    πŸ‘ Better Stack Traces

    πŸš€ This release includes a highly requested feature of better stack traces for Task and Coeval!
    Big thanks to @RaasAhsan and @djspiewak for providing the original implementation that we have ported.

    πŸ”§ They are enabled by default, but it is configurable.
    πŸ“„ Refer to Stack Traces section for more details.

    🐎 We have measured about 10-30% performance hit in CACHED mode (the default) in microbenchmarks.
    🐎 If you have any performance tests, we would greatly appreciate any reports!
    If the hit is too big, you can disable the stack traces with -Dmonix.eval.stackTracingMode=none.

    For the following code:

    package test.appimport monix.eval.Taskimport monix.execution.Schedulerimport cats.implicits.\_import scala.concurrent.duration.\_object TestTracingApp extends App { implicit val s = Scheduler.global def customMethod: Task[Unit] =Task.now(()).guarantee(Task.sleep(10.millis)) val tracingTestApp: Task[Unit] = for { \_ \<- Task.shift \_ \<- Task.unit.attempt \_ \<- (Task(println("Started the program")), Task.unit).parTupled \_ \<- customMethod \_ \<- if (true) Task.raiseError(new Exception("boom")) else Task.unit } yield () tracingTestApp.onErrorHandleWith(ex =\> Task(ex.printStackTrace())).runSyncUnsafe }
    

    0️⃣ The default (cached) stack trace is going to be:

    java.lang.Exception: boom
            at test.app.TestTracingApp$.$anonfun$tracingTestApp$5(TestTracingApp.scala:36)
            at guarantee @ test.app.TestTracingApp$.customMethod(TestTracingApp.scala:29)
            at flatMap @ test.app.TestTracingApp$.$anonfun$tracingTestApp$4(TestTracingApp.scala:35)
            at parTupled @ test.app.TestTracingApp$.$anonfun$tracingTestApp$2(TestTracingApp.scala:34)
            at parTupled @ test.app.TestTracingApp$.$anonfun$tracingTestApp$2(TestTracingApp.scala:34)
            at flatMap @ test.app.TestTracingApp$.$anonfun$tracingTestApp$2(TestTracingApp.scala:34)
            at flatMap @ test.app.TestTracingApp$.$anonfun$tracingTestApp$1(TestTracingApp.scala:33)
            at flatMap @ test.app.TestTracingApp$.delayedEndpoint$test$app$TestTracingApp$1(TestTracingApp.scala:32)
    

    Before 3.3.0 and with stack traces disabled, stack traces are a mess:

    java.lang.Exception: boom
            at test.app.TestTracingApp$.$anonfun$tracingTestApp$5(TestTracingApp.scala:36)
            at monix.eval.internal.TaskRunLoop$.startFull(TaskRunLoop.scala:188)
            at monix.eval.internal.TaskRestartCallback.syncOnSuccess(TaskRestartCallback.scala:101)
            at monix.eval.internal.TaskRestartCallback$$anon$1.run(TaskRestartCallback.scala:118)
            at monix.execution.internal.Trampoline.monix$execution$internal$Trampoline$$immediateLoop(Trampoline.scala:66)
            at monix.execution.internal.Trampoline.startLoop(Trampoline.scala:32)
            at monix.execution.schedulers.TrampolineExecutionContext$JVMNormalTrampoline.super$startLoop(TrampolineExecutionContext.scala:142)
            at monix.execution.schedulers.TrampolineExecutionContext$JVMNormalTrampoline.$anonfun$startLoop$1(TrampolineExecutionContext.scala:142)
            at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
            at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:94)
            at monix.execution.schedulers.TrampolineExecutionContext$JVMNormalTrampoline.startLoop(TrampolineExecutionContext.scala:142)
            at monix.execution.internal.Trampoline.execute(Trampoline.scala:40)
            at monix.execution.schedulers.TrampolineExecutionContext.execute(TrampolineExecutionContext.scala:57)
            at monix.execution.schedulers.BatchingScheduler.execute(BatchingScheduler.scala:50)
            at monix.execution.schedulers.BatchingScheduler.execute$(BatchingScheduler.scala:47)
            at monix.execution.schedulers.AsyncScheduler.execute(AsyncScheduler.scala:31)
            at monix.eval.internal.TaskRestartCallback.onSuccess(TaskRestartCallback.scala:72)
            at monix.eval.internal.TaskRunLoop$.startFull(TaskRunLoop.scala:183)
            at monix.eval.internal.TaskRestartCallback.syncOnSuccess(TaskRestartCallback.scala:101)
            at monix.eval.internal.TaskRestartCallback.onSuccess(TaskRestartCallback.scala:74)
            at monix.eval.internal.TaskSleep$SleepRunnable.run(TaskSleep.scala:71)
            at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402)
            at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
            at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
            at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
            at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
    

    πŸ‘ Better Task => Future interop when using Local

    βš™ Running Task isolates Local, which was not available in the Future, resulting in runToFuture.
    πŸš€ This release enables it and unblocks compelling use cases, such as reading proper request context in Akka HTTP Directive.
    We've created an AkkaHTTP Example that demonstrates it.

    βœ… Latest behavior is:

    implicit val s: Scheduler = Scheduler.Implicits.tracedval local = Local(0)for { \_ \<- Task(local.update(1)).runToFuture value \<- Future(local.get) } yield println(s"Local value in Future $value") println(s"Local value on the current thread = $value")// =\> Local value on the current thread = 0// =\> Local value in Future = 1
    

    Task still isolates the Local, but the Future continuation keeps the same reference and can read it.
    Before the change, Local would be 0 in the Future.

    πŸ“š More information about Local can be found in the new Local documentation.

    ⚑️ Relevant updates

    • πŸ”€ #1205: Observable.mergePrioritizedList
    • #1209: Bring back Observable.transform and Transformer alias
    • #1198: Fix flatMapIterable calling recursively itself
    • #1213: Propagate Local isolation in runToFuture
    • 🐎 #1217: Fix performance regression in bufferSliding
    • πŸ‘ #1244: Add support for compression: Gzip and deflate
    • #1262: Fix bug in Task.runSyncUnsafe related to ContextSwitch
    • #1265: Implement Observable#bufferWhile and bufferWhileInclusive
    • #1267: Implement Asynchronous Stack Traces for Task
    • #1276: Add Task/Coeval convenience methods like .when
    • #1282: Add 'as' in Task and Coeval
    • πŸ— #1284: Add left/right builders for Task and Coeval
    • πŸ— #1286: Add none/some builders for Task and Coeval
    • #1291: tapEval, tapError methods at Task and Coeval
    • #1293: removing no-op onComplete() in Observable.takeByTimespan
    • #1299: Fix a bug in Local.value
    • #1307: Observable.fromIteratorBuffered

    πŸš€ People who made this release possible

  • v3.2.2 Changes

    June 04, 2020

    πŸš€ The release is binary and source compatible with 3.x.x line.
    πŸš€ It is released for the following Scala and ScalaJS versions:

    • Scala 2.11: ScalaJS 0.6.x
    • Scala 2.12: ScalaJS 0.6.x and 1.0.x
    • Scala 2.13: ScalaJS 0.6.x and 1.0.x

    ⚑️ Relevant updates:

    • πŸ›  #1197: Fixes a memory leak in bracket, introduced in 3.2.0
    • πŸ›  #1195: Fixes non-deterministic behavior in Observable.zip of sources different size
    • 🚦 #1190: Now Observable.groupBy correctly signals error as a failed stream instead of normal completion
    • πŸ›  #1188: Fixes an issue in ForeachAsyncConsumer where it wasn't properly propagaing errors in some cases
    • πŸ›  #1187: Fixes an issue where Observable.doAfterSubscribe was not executing its finalizer
    • ⏱ #1186: Observable.interval method now schedules the first tick asynchronously
    • 🐎 #1184: Huge performance improvement in CharsReader, InputStream and LinesReaderObservable
    • #1154: Observable.fromInputStream and fromCharsReader now respects the chunkSize
    • #1181: Fix MatchError in Iterant.fromReactivePublisher

    πŸš€ People who made this release possible:

  • v3.2.1 Changes

    April 30, 2020

    πŸ› Bug fix release, fixing a critical issue with ScalaJS 1.0.x #1666 and a corner case with Bracket #1175

  • v3.2.0 Changes

    April 26, 2020

    πŸš€ The release is binary and source compatible with 3.x.x line.
    πŸš€ It is released for the following Scala and ScalaJS versions:

    • Scala 2.11: ScalaJS 0.6.x
    • Scala 2.12: ScalaJS 0.6.x and 1.0.x
    • Scala 2.13: ScalaJS 0.6.x and 1.0.x

    ⚑️ Relevant updates:

    • #1087: Bracket should not evaluate "use" if Task was canceled during "acquire"
    • #1098: Allow to pass Long in Observable.drop(n)
    • #1101: Canceled tasks in Half-Open state should return to Open state in CircuitBreaker
    • #1107: Add CommutativeApplicative[Task.Par] instance
    • #1106 and #1125: Add Observable.concatMapIterable
    • πŸ”€ #1117: SyncEffect instance for Coeval
    • #1120: Cancel should always wait for the finalizer
    • 🚦 #1126: bufferIntrospective should signal Stop upstream when it is back-pressured
    • πŸ›  #1135: Observable.intervalAtFixedRate under-millisecond interval fix
    • #1132: Add Iterant.withFilter
    • #1129: Add Observable.withFilter
    • πŸ—„ #1145: Deprecate gather, gatherN, gatherUnordered in favor of parSequence, parSequenceN, parSequenceUnordered
    • #1152: Add Consumer.toList

    πŸš€ People that made this release possible:

  • v3.1.0 Changes

    November 08, 2019

    πŸ”– Version 3.1.0 (November 8, 2019)

    πŸš€ The release is binary and source compatible with 3.0.0.

    ⚑️ Important updates:

    • βœ… #1008: Fixed stack safety issue of Observable.combineLatestList for big lists
    • #1010: flatMapLoop for Task and Coeval
    • #1012: ConcurrentQueue.isEmpty
    • #1014: Observable.timeoutOnSlowDownstreamTo
    • #1016: Observable.takeUntilEval
    • ⏱ #1057: Fix default scheduleOnce implementation
    • ⏱ #1062: Solves a memory leak which sometimes occurred when using Task with localContextPropagation and non-TracingScheduler
    • #1063: Ensure async boundary in TaskCreate if LCP is enabled
    • #1064 and #1070: Earlier cancelation in Observable.mapParallel if any task fails
    • #1065: Add mapAccumulate to Observable

    πŸš€ People that made this release possible:

  • v3.0.0 Changes

    June 16, 2019

    πŸ”– Version 3.0.0-RC3 (June 16, 2019)

    πŸš€ This release depends on Cats-Effect 1.3.1 and Cats 1.6.1.

    πŸš€ The next planned release will target Cats-Effect 2.0.0 with Scala 2.13 support.

    πŸš€ NOTE: this release IS NOT binary compatible with 3.0.0-RC2, as it contains some API changes, but it should be source compatible (with @deprecated symbols where the case).

    Sub-project: monix-execution

    This sub-project no longer depends on cats-effect and there are various
    πŸ‘Œ improvement to Local aimed at fixing interop with Future. Note that
    you might have to call Local.isolate to disable any sharing between tasks.

    PR #775:
    Simplified FutureUtils materialize & dematerialize

    PR #790:
    πŸ‘Œ improve fixed rate scheduling on JS

    PR #803:
    Eagerly null out dequeued elements in ChunkedArrayQueue

    PR #822:
    βœ‚ remove dependency on cats-effect from monix-execution

    PR #773:
    πŸ”„ change Cancelable.empty type to Cancelable

    PR #887:
    Shared locals with binds

    PR #888:
    πŸ›  Fix uncaught exception reporting for Scheduler

    Sub-project: monix-catnap

    PR #778:
    βž• Adds ConcurrentChannel

    PR #784:
    βœ… More concurrent tests for MVar/Semaphore

    PR #865:
    βž• Adding FunctionK values for Task, Coeval

    Sub-project: monix-eval

    PR #802:
    encapsulate local ctx on task execution

    PR #807:
    πŸ‘Œ Improve encapsulation test, encapsulate locals on ContextShift

    PR #838:
    βž• Add taskified variants of timeout combinators

    PR #839:
    TaskLocal should propagate when used with Bracket Methods

    PR #849:
    πŸ‘» Specify exception on timeout

    PR #887:
    Shared locals with binds

    PR #865:
    βž• Adding FunctionK values for Task, Coeval

    Sub-project: monix-reactive

    PR #759:
    βž• Add Contravariant Observer and Subscriber

    PR #760:
    βž• add Observable.filterEval

    PR #774:
    βž• Add FunctorFilter instances for Iterant&Observable

    PR #779:
    fork blocking i/o observable ops

    PR #794:
    πŸ”’ Acquire lock per subscription instead of observable-wide lock

    PR #801:
    πŸ”¨ Observable buffers refactoring

    PR #819:
    Extend ObservableLike with filterNot method

    PR #831:
    βœ… SerializableSuite to no longer test Future for serializability

    PR #834:
    Observable.reduce should emit for single item source

    PR #846:
    Ensure mapParallelOrdered runs in parallel

    PR #872:
    βž• Add observable take while inclusive

    PR #895:
    πŸ›  Fix memory leak in MapParallelOrderedObservable

    Sub-project: monix-tail

    PR #778:
    βž• Adds Iterant.channel, Iterant#consume

    PR #826:
    βž• add Iterant.uncons operation

    Chores

    PR #766:
    ⚑️ Update sbt-unidoc to 0.4.2

    PR #766:
    ⚑️ Update sbt-pgp to 1.1.2

    PR #768:
    ⚑️ Update sbt-mima-plugin to 0.3.0

    PR #769:
    ⚑️ Update sbt-git to 1.0.0

    PR #770:
    ⚑️ Update jctools-core to 2.1.2

    PR #771:
    ⚑️ Update kind-projector to 0.9.8

    PR #772:
    ⚑️ Update sbt-jmh to 0.3.4

    PR #771:
    ⚑️ Update kind-projector to 0.9.9

    PR #783:
    πŸ‘‰ Use globally accessible (rather than local) source paths in JS source maps (#781)

    PR #785:
    ⚑️ Update sbt-scalajs, scalajs-compiler, scalajs-library... to 0.6.26

    PR #788:
    ⚑️ Update cats-effect, cats-effect-laws to 1.1.0

    PR #796:
    πŸ›  fix scalacOptions

    PR #797:
    Scala 2.12.8

    PR #798:
    ⚑️ Update intervalWithFixedDelay scaladoc

    PR #805:
    πŸ“‡ Rename keysBuffer to os in groupBy's parameters

    PR #808:
    ⚑️ Update Copyright to 2019

    PR #810:
    sbt 1.2.8 (was 1.1.0)

    PR #812:
    ⚑️ Update Minitest to 2.3.2

    PR #813:
    Disable code coverage

    PR #818:
    ⚑️ Update Cats-Effect to 1.2.0

    PR #820:
    ⚑️ Update cats-laws to 1.5.0

    PR #821:
    ⚑️ Update cats-laws to 1.6.0

    PR #823:
    πŸ‘ Scala 2.13 support

    PR #821:
    ⚑️ Update sbt-header to 5.1.0

    PR #827:
    βœ‚ Remove comments from .jvmopts

    PR #833:
    πŸ›  Fix build for 2.13.0-M5 by deactivating Mima for it

    PR #840:
    βž• Add adopters list seed

    PR #842:
    πŸ›  Fixed deprecation docs for Task#coeval

    PR #843:
    βœ‚ Remove dead code from tests

    PR #844:
    ⚑️ Update sbt-header to 5.2.0

    PR #847:
    ⚑️ Update ExecutionModel.scala

    PR #850:
    ⏱ Increase rate in AsyncSchedulerSuite

    PR #854:
    πŸ›  fix apparently erronous code involving Unit companion

    PR #855:
    ⚑️ Update sbt-jmh to 0.3.5

    PR #857:
    πŸ‘‰ Make benchmarks compile

    PR #859:
    ⚑️ Update sbt-scalajs, scalajs-compiler to 0.6.27

    PR #867:
    ⚑️ Update kind-projector to 0.10.0

    PR #869:
    πŸ›  fix compile errors with latest Scala 2.13

    PR #874:
    ⚑️ Update cats-effect, cats-effect-laws to 1.3.0

    PR #878:
    Compile Benchmarks in CI

    PR #879:
    Do on subscription cancel scaladoc fix

    PR #889:
    ⚑️ Update cats-effect, cats-effect-laws to 1.3.1

    PR #894:
    βž• Add UnsafeBecauseImpure Annotation to foreach.

    PR #896:
    ⚑️ Update cats-laws to 1.6.1

    PR #898:
    Reformating via Scalafmt

    PR #899:
    πŸ›  Fix autoCancelableRunLoops comment.

    PR #901:
    πŸ—„ avoid deprecated unicode arrow chars

    PR #902:
    πŸ— reformat build files

    Thanks

    πŸš€ People that made this release possible, in alphabetical order:

    πŸš€ And special thanks to our top contributor in this release:
    https://github.com/fthomas/scala-steward :)

  • v3.0.0-RC5 Changes

    August 29, 2019

    πŸš‘ This is a bug fix release β€” fixing a critical issue:

    • #991 (PR #993): NullPointerException in Task when used in combination with Local
    • πŸ”¨ #992 (PR #998): hide InterceptableRunnable exposed accidentally, refactor it for efficiency
    • #997: bumped Scala version to 2.12.9 and Scala.js to 0.6.28

    πŸš€ This release is binary compatible with 3.0.0-RC4.

  • v3.0.0-RC4 Changes

    August 25, 2019

    πŸ”– Version 3.0.0-RC4 (August 25, 2019)

    πŸš‘ Last release before 3.0.0 which will be released as soon as Cats-Effect 2.0.0 is available. At the time of writing release notes, it is only waiting on Cats 2.0.0 which is about to release next RC which will become stable version if no critical issues are discovered.

    πŸš‘ Any other development for this release is now frozen except if we discover critical bugs like memory leaks. All other changes will target 3.1.0.

    πŸš€ 3.0.0 will be binary and source compatible with 3.0.0-RC4 for Scala 2.12. Monix itself will be also binary compatible for 2.11 but it will have a dependency on Cats-Effect which is not. See Cats-Effect release notes for more details.

    πŸš€ We wish we could release 3.0.0 already but if we released now, we would have to release 4.0.0 for Cats-Effect 2.0 because of 2.11 incompatibility there so we decided to hold on.
    πŸš€ It was a rough road but currently we have multiple active maintainers that can do releases going forward, instead of just Alex so we hope it can give you a confidence for the future! :)
    πŸš€ Note that Cats-Effect 2.0 is very small release and mostly targeted at support for Scala 2.13 and bug fixes - the upgrade should be limited to bumping version without changing a single line of code.

    πŸš€ This release depends on Cats-Effect 1.4.0 and Cats 1.6.1

    πŸš€ This release is binary compatible with 3.0.0-RC3 on Scala 2.12.
    ⏱ On Scala 2.11 there is an incompatibility caused by introduction of Scheduler.features:

    exclude[ReversedMissingMethodProblem]("monix.execution.Scheduler.features")
    

    Main changes

    Local

    πŸ›  There are several fixes related to Local usage.

    • ⏱ Using TracingScheduler will also automatically enable local context propagation in Task so
      βš™ running it with runToFutureOpt or setting env variable is no longer a necessity.
    • Local.isolate has a overload for isolating Future which is safer than regular Local.isolate.

    0️⃣ The Local model since 3.0.0-RC3 shares by default. To isolate modifications of Local by
    other concurrently running Future, you have to call Local.isolate.

    In case of Task, there is a TaskLocal.isolate version. It is automatically called whenever you run Task
    so if your use case is setting correlationId or similar, it probably won't require any explicit isolation because
    your HTTP library will most likely run the Task per request.

    πŸ— Task Builders

    There are two major improvements:

    • ⏱ Now all Task builders (Task.create, Task.async, Task.fromFuture etc.) will return a Task that continues on default Scheduler which is the one supplied during execution unless overriden by executeOn.
    • πŸ”€ Callback in Task.create is now thread-safe against contract violation (calling it more than once) so does not require synchronization on the user side.

    Sub-project: monix-execution

    PR #946: Expose less implementation details in Local

    PR #948: Make Task.memoize play well with Local

    ⏱ PR #953: Make default scheduler remove cancelled tasks

    ⏱ PR #960: Scheduler.features

    PR #971: Callback tryOnSuccess/tryOnFailure

    PR #973: Fix Local.isolate corner case

    PR #977: Use type classes instead of overloads in Local.isolate/bind

    Sub-project: monix-eval

    ⚑️ PR #913: Optimize Task.guarantee

    PR #921 & PR #917: Callbacks in Task.create are now thread-safe and
    ⏱ always return to the main Scheduler.

    PR #933: Adds >> syntax to Task

    PR #935: Adds >> syntax to Coeval

    PR #934: Implement doOnFinish in terms of guaranteeCase

    PR #951: Add void to Task + Coeval

    PR #952: Implement ContextShift.evalOn in terms of Task.executeOn

    PR #954: Add gatherN + wanderN

    PR #972: Rename Task.forkAndForget to Task.startAndForget

    Sub-project: monix-reactive

    PR #906: Fix race in MapParallelOrderedObservable

    PR #918: switchMap should wait for last child to complete

    PR #919: propagate cancellation to tasks in async Consumers

    🚚 PR #932: Remove try-catch for EvalOnceObservable implementation

    PR #941: Added some polymorphic methods for Observable

    PR #945: Add collectWhile observable

    PR #958: Add Observable.throttle

    PR #963: Added fromAsyncStateActionF

    PR #970: Observable.unfold

    PR #989: Observable.unfoldEval and Observable.unfoldEvalF

    Sub-project: monix-tail

    • πŸ›  PR #965: fixes resource handling in Iterant.repeat, adds Iterant.retryIfEmpty

    Chores

    0️⃣ PR #936: Add defaults values for benchmarking

    ⚑️ Tons of updates by https://github.com/fthomas/scala-steward

    Thanks

    πŸš€ People that made this release possible, in alphabetical order:

  • v3.0.0-RC3 Changes

    June 16, 2019

    πŸ”– Version 3.0.0-RC3 (June 16, 2019)

    πŸš€ This release depends on Cats-Effect 1.3.1 and Cats 1.6.1.

    πŸš€ The next planned release will target Cats-Effect 2.0.0 with Scala 2.13 support.

    πŸš€ NOTE: this release IS NOT binary compatible with 3.0.0-RC2, as it contains some API changes, but it should be source compatible (with @deprecated symbols where the case).

    Sub-project: monix-execution

    This sub-project no longer depends on cats-effect and there are various
    πŸ‘Œ improvement to Local aimed at fixing interop with Future. Note that
    you might have to call Local.isolate to disable any sharing between tasks.

    PR #775:
    Simplified FutureUtils materialize & dematerialize

    PR #790:
    πŸ‘Œ improve fixed rate scheduling on JS

    PR #803:
    Eagerly null out dequeued elements in ChunkedArrayQueue

    PR #822:
    βœ‚ remove dependency on cats-effect from monix-execution

    PR #773:
    πŸ”„ change Cancelable.empty type to Cancelable

    PR #887:
    Shared locals with binds

    PR #888:
    πŸ›  Fix uncaught exception reporting for Scheduler

    Sub-project: monix-catnap

    PR #778:
    βž• Adds ConcurrentChannel

    PR #784:
    βœ… More concurrent tests for MVar/Semaphore

    PR #865:
    βž• Adding FunctionK values for Task, Coeval

    Sub-project: monix-eval

    PR #802:
    encapsulate local ctx on task execution

    PR #807:
    πŸ‘Œ Improve encapsulation test, encapsulate locals on ContextShift

    PR #838:
    βž• Add taskified variants of timeout combinators

    PR #839:
    TaskLocal should propagate when used with Bracket Methods

    PR #849:
    πŸ‘» Specify exception on timeout

    PR #887:
    Shared locals with binds

    PR #865:
    βž• Adding FunctionK values for Task, Coeval

    Sub-project: monix-reactive

    PR #759:
    βž• Add Contravariant Observer and Subscriber

    PR #760:
    βž• add Observable.filterEval

    PR #774:
    βž• Add FunctorFilter instances for Iterant&Observable

    PR #779:
    fork blocking i/o observable ops

    PR #794:
    πŸ”’ Acquire lock per subscription instead of observable-wide lock

    PR #801:
    πŸ”¨ Observable buffers refactoring

    PR #819:
    Extend ObservableLike with filterNot method

    PR #831:
    βœ… SerializableSuite to no longer test Future for serializability

    PR #834:
    Observable.reduce should emit for single item source

    PR #846:
    Ensure mapParallelOrdered runs in parallel

    PR #872:
    βž• Add observable take while inclusive

    PR #895:
    πŸ›  Fix memory leak in MapParallelOrderedObservable

    Sub-project: monix-tail

    PR #778:
    βž• Adds Iterant.channel, Iterant#consume

    PR #826:
    βž• add Iterant.uncons operation

    Chores

    PR #766:
    ⚑️ Update sbt-unidoc to 0.4.2

    PR #766:
    ⚑️ Update sbt-pgp to 1.1.2

    PR #768:
    ⚑️ Update sbt-mima-plugin to 0.3.0

    PR #769:
    ⚑️ Update sbt-git to 1.0.0

    PR #770:
    ⚑️ Update jctools-core to 2.1.2

    PR #771:
    ⚑️ Update kind-projector to 0.9.8

    PR #772:
    ⚑️ Update sbt-jmh to 0.3.4

    PR #771:
    ⚑️ Update kind-projector to 0.9.9

    PR #783:
    πŸ‘‰ Use globally accessible (rather than local) source paths in JS source maps (#781)

    PR #785:
    ⚑️ Update sbt-scalajs, scalajs-compiler, scalajs-library... to 0.6.26

    PR #788:
    ⚑️ Update cats-effect, cats-effect-laws to 1.1.0

    PR #796:
    πŸ›  fix scalacOptions

    PR #797:
    Scala 2.12.8

    PR #798:
    ⚑️ Update intervalWithFixedDelay scaladoc

    PR #805:
    πŸ“‡ Rename keysBuffer to os in groupBy's parameters

    PR #808:
    ⚑️ Update Copyright to 2019

    PR #810:
    sbt 1.2.8 (was 1.1.0)

    PR #812:
    ⚑️ Update Minitest to 2.3.2

    PR #813:
    Disable code coverage

    PR #818:
    ⚑️ Update Cats-Effect to 1.2.0

    PR #820:
    ⚑️ Update cats-laws to 1.5.0

    PR #821:
    ⚑️ Update cats-laws to 1.6.0

    PR #823:
    πŸ‘ Scala 2.13 support

    PR #821:
    ⚑️ Update sbt-header to 5.1.0

    PR #827:
    βœ‚ Remove comments from .jvmopts

    PR #833:
    πŸ›  Fix build for 2.13.0-M5 by deactivating Mima for it

    PR #840:
    βž• Add adopters list seed

    PR #842:
    πŸ›  Fixed deprecation docs for Task#coeval

    PR #843:
    βœ‚ Remove dead code from tests

    PR #844:
    ⚑️ Update sbt-header to 5.2.0

    PR #847:
    ⚑️ Update ExecutionModel.scala

    PR #850:
    ⏱ Increase rate in AsyncSchedulerSuite

    PR #854:
    πŸ›  fix apparently erronous code involving Unit companion

    PR #855:
    ⚑️ Update sbt-jmh to 0.3.5

    PR #857:
    πŸ‘‰ Make benchmarks compile

    PR #859:
    ⚑️ Update sbt-scalajs, scalajs-compiler to 0.6.27

    PR #867:
    ⚑️ Update kind-projector to 0.10.0

    PR #869:
    πŸ›  fix compile errors with latest Scala 2.13

    PR #874:
    ⚑️ Update cats-effect, cats-effect-laws to 1.3.0

    PR #878:
    Compile Benchmarks in CI

    PR #879:
    Do on subscription cancel scaladoc fix

    PR #889:
    ⚑️ Update cats-effect, cats-effect-laws to 1.3.1

    PR #894:
    βž• Add UnsafeBecauseImpure Annotation to foreach.

    PR #896:
    ⚑️ Update cats-laws to 1.6.1

    PR #898:
    Reformating via Scalafmt

    PR #899:
    πŸ›  Fix autoCancelableRunLoops comment.

    PR #901:
    πŸ—„ avoid deprecated unicode arrow chars

    PR #902:
    πŸ— reformat build files

    Thanks

    πŸš€ People that made this release possible, in alphabetical order:

    πŸš€ And special thanks to our top contributor in this release:
    https://github.com/fthomas/scala-steward :)