All Versions
45
Latest Version
Avg Release Cycle
52 days
Latest Release
121 days ago

Changelog History
Page 1

  • v3.0.0

    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

    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

    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

    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-RC2

    November 06, 2018

    ⚑️ Cats-Effect Updates

    πŸ‘Œ Supporting Cats-Effect 1.0.0 has been a massive amount of work:

    • PR #659 Cats Effect 1.0.0-RC update
    • PR #681: Cats-Effect 1.0.0-RC2 update
    • PR #686: Cats-Effect 1.0.0-RC3 update, Task conversions
    • PR #716: Updates to Cats-Effect 1.0.0

    Also related, but mentioned below:

    • Iterant's encoding had to change due to the new contract of Cats-Effect's type classes, in a massive change of internals that also improved its performance and safety (#683)

    Sub-project: monix-execution

    ♻️ Several features, deprecations and refactorings happened in monix-execution, mentioned under the changes for monix-catnap below:

    • ♻️ monix.execution.misc.AsyncVar was refactored, to have an interface in line with the MVar in Cats-Effect and moved to monix.execution.AsyncVar (#753)
    • ♻️ monix.execution.misc.AsyncSemaphore was also refactored and enhanced, with an interface resembling that of Cats-Effect's Semaphore and moved to monix.execution.Semaphore (#754)
    • monix.execution.AsyncQueue was added (#757)
    • monix.execution.Callback was added (#740)
    • monix.execution.FutureUtils and CancelableFuture can now take care of the conversions of Scala's Future to and from Java's CompletableFuture (#761)

    Other features:

    • PR #675: Switches to stdlib NonFatal
    • PR #738: Adds CancelablePromise
    • PR #765: Changes TrampolineScheduler's internal stack back to a queue

    Sub-project: monix-catnap

    This is a new project introduced that currently depends on only monix-execution and Cats/Cats-Effect and whose purpose is to provide abstractions built on top of Cats-Effect's type classes.

    • PR #744: Adds monix.catnap.CircuitBreaker and LiftFuture
    • PR #753: Adds generic monix.catnap.MVar and monix.execution.AsyncVar refactoring
    • PR #756: Makes MVar fork on async take for fairness
    • PR #754: Adds generic monix.catnap.Semaphore and monix.execution.AsyncSemaphore refactoring
    • PR #757: Adds monix.execution.AsyncQueue and monix.catnap.ConcurrentQueue
    • PR #762: Fixes issue typelevel/cats-effect#403, also added monix.catnap.cancelables.SingleAssignCancelableF

    Also mentioned below, as part of other features:

    • βž• Added monix.catnap.CancelableF and monix.catnap.cancelables.BooleanCancelableF (#726)

    Note: the new FutureLift type class provides some of the πŸ—„ functionality of the now deprecated monix-java8.

    Sub-project: monix-eval

    πŸ—„ Major removals (with deprecation symbols kept around):

    • monix.eval.TaskSemaphore, replaced by the generic monix.catnap.Semaphore
    • monix.eval.MVar, replaced by the generic monix.catnap.MVar
    • monix.eval.TaskCircuitBreaker, replaced by the generic monix.catnap.CircuitBreaker

    This was done because having these implementations specialized for πŸ‘ Task doesn't make sense and the new implementations are better and have more features.

    πŸ”‹ Features:

    • PR #626: Adds forever for Task
    • PR #636: Adds join to the fork documentation
    • PR #639: Makes Coeval.value empty-parens to indicate side effects
    • PR #638: Fixes Task.foreach waiting / error reporting
    • PR #634: Adds ability to specify custom options on Effect[Task]
    • PR #655: Handles InterruptedException in NonFatal
    • PR #660: Makes TaskApp scheduler and options defs
    • PR #664: Fixes Task.map2 not executing things in sequence
    • PR #661: Makes mapBoth always execute tasks in parallel
    • PR #669 Adds uncancelable to example
    • PR #647: Changes internal encoding for Task.Async (major!)
    • PR #670: Task gets smarter about forking and async boundaries
    • PR #652: Uses TaskLocal#local in TaskLocal#bindL and TaskLocal#bindClear
    • PR #679: Fixes Task.bracket, onCancelRaiseError; introduce Task.ContextSwitch
    • PR #706: Adds SemigroupK[Task] instance
    • PR #715: Implements Task timed method
    • PR #724: Makes Task auto-cancelable by defaul (major!)
    • PR #725: Adds runtime check to TaskLocal to make it safer
    • PR #726: Changes Task to sequence (back-pressure) async finalizers (major!)
    • PR #732: Adds guarantee and guaranteeCase methods on Task and Coeval
    • PR #740: Moves Callback to monix.execution, Task runAsync refactor, rename to runToFuture (major!)
    • PR #761: Expands FutureLift to take care of CompletableFuture

    Sub-project: monix-reactive

    ♻️ Observable suffered an API refactoring, changing the convention for operators that take Task or F[_] : Effect values as arguments:

    • operators using Task now use the Eval suffix instead of Task, or no special suffix at all
    • πŸ”€ operators using F[_] : Sync parameters use an F suffix
    • 🚦 the F suffixed operators previously signalled operators that kept the Observable context (e.g. findF), however all of them have been renamed

    πŸ‘€ See PR #729 for details.

    πŸ”‹ Features:

    • PR #610: Adds scan0, flatScan0, flatScan0DelayErrors, scanEval0, scanMap0 on Observable
    • PR #641: Reference bufferTumbling instead of buffer in scaladoc
    • PR #646: Fixes ack.future called when Ack is null
    • PR #657: Adds a few missing tests to Observable methods
    • PR #684: Simplifies logic in TakeLastOperator.onNext
    • PR #704: Introduces Observable.doOnStartTask and Observable.doOnStartEval
    • PR #723: Adds Alternative instance for Observable
    • PR #654: Makes Observable#++'s argument lazy
    • PR #729: Adds Observable.bracket, Iterant/Task API refactorings, fixes (major!)
    • PR #741: Adds cats Profunctor instance for Subject
    • PR #739: Adds operator bufferTimedWithPressure with sizeOf on Observable
    • PR #743: Improvs Observable.collect to avoid double evaluation
    • PR #749: Adds Profunctor and Contravariant instance for Consumer
    • PR #750: Fixes handling start/end of Long range in RangeObservable
    • PR #558: Adds Observable.mapParallelOrdered

    Sub-project: monix-tail

    The Iterant encoding suffered a major change, with all operators described for Iterant being changed for it. This was done because:

    πŸ‘ 1. the old encoding couldn't be supported under the auto-cancelable model promoted by Cats-Effect 1.0.0 🐎 2. the new encoding is safer and has better performance too

    πŸ”‹ Features:

    • PR #683: Iterant, version 2 (major)
    • PR #614: Adds scan0, scanEval0, scanMap0 on Iterant
    • PR #622: Adds mapBatch for Iterant
    • PR #629: Fixes IterantBuildersSync methods to not require implicit F: Sync[F]
    • PR #631: Renames toGenerator to toBatch in Cursor
    • PR #633: Fixes eagerness of .bracket on Last nodes
    • PR #621: Changes behavior of Batch#fromArray, fromAnyArray
    • PR #656: Makes Iterant's ++ take a lazy (by-name) parameter
    • PR #662: Adds Iterant.fromReactivePublisher
    • PR #709: Removes unused function from EvalOnNextAck
    • PR #707: Add Iterant.lastOptionL
    • PR #746: Fix Iterant.fromReactivePublisher
    • PR #755: Remove the Sync[Iterant] instance

    πŸ—„ Sub-project deprecation: monix-java8

    The functionality in monix-java8 was implemented directly in:

    1. monix.execution.FutureUtils
    2. monix.execution.CancelableFuture
    3. monix.catnap.FutureLift

    πŸ—„ The monix-java8 sub-project is still provided, but is deprecated and 🚚 will soon be removed.

    Chores

    • PR #653: Update Monix's rootdoc, the landing page for the ScalaDoc
    • PR #671: Optionally allow forcing a build on Java 9+
    • PR #677: Add Starting Point section to CONTRIBUTING.md
    • PR #693: Fix micro doc typo in monix.execution.misc.InlineMacros
    • PR #699: Add Concat and Scope to Iterant's description
    • PR #640: Add sbt-doctest, to verify code examples in ScalaDoc
    • PR #705: Fix all ScalaDocs (except Task's) in monix.eval
    • PR #717: Change to Scala's Code of Conduct
    • PR #720: Add @Avasil to the Code of Conduct
    • PR #718: Fix Task ScalaDocs
    • PR #736: Update doctest plugin version
    • PR #763: Fix Observable doc mentioning cats.Eq

    Thanks

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

    • Alexandru Nedelcu (@alexandru)
    • Eduardo Barrientos (@kdoomsday)
    • Eugene Platonov (@jozic)
    • Jakub KozΕ‚owski (@kubukoz)
    • Jamie Wilson (@jfwilson)
    • Joe Ferris (@jferris)
    • Jules Ivanic (@guizmaii)
    • Kacper Gunia (@cakper)
    • Kamil Kloch (@kamilkloch)
    • LorΓ‘nd SzakΓ‘cs (@lorandszakacs)
    • Oleg Pyzhcov (@oleg-py)
    • Piotr GawryΕ› (@Avasil)
    • Raas A (@RaasAhsan)
    • Seth Tisue (@SethTisue)
    • Yohann B (@ybr)
    • jendakol (@jendakol)
    • volth (@volth)
  • v3.0.0-RC1

    May 18, 2018

    [https://typelevel.org/cats-effect/ Cats Effect] integration:

    • PR #598: Integrates cats.effect.Timer and IO.cancelable
    • PR #600: Add Sync & Async instances for Iterant
    • PR #607: implement ConcurrentEffect[Task] (upgrade to cats-effect 0.10)
    • PR #609: update Cats to 1.1.0 & Cats Effect to 0.10

    πŸ”‹ Features for monix-execution:

    • PR #527 (#517, #525 and #526): removes macros, replacing them with plain extension methods, removes SerialCancelable#orderedUpdate
    • PR #556: SchedulerService.awaitTermination and fix concurrency tests
    • PR #584 (#221): add conversions module for the Java 8 CompletableFuture

    πŸ”‹ Features for monix-eval:

    • PR #507: add onErrorRestartLoop for Task and Coeval
    • PR #533 (#523): add Task.fork operator, deprecate old Task.fork and executeWithFork, renamed to executeAsync
    • PR #530 (#520): add Task.forkAndForget
    • PR #537 (#535): Make MVar constructors return Task
    • PR #540 (#539): make all Task abstractions referentially transparent
    • PR #545 (#538): add newtype for Task.Par, using same encoding used in cats-effect
    • PR #547 (#542): add Task.runSyncUnsafe
    • PR #550: add Task.sleep, refactor the implementation of delayExecution and delayResult and deprecate delayExecutionWith and delayResultBySelector
    • PR #482 (#477): add the .cancelable operator on Task
    • PR #561: Bracket for Task / Coeval, Task.cancelable and Task.onCancelRaiseError
    • PR #596: add Fiber interface, refactor memoize for Task and Coeval
    • PR #602: TaskLocal should expose Local
    • PR #603: Changed implementation TaskLocal#bind in terms of Task#bracket

    πŸ”‹ Features for monix-reactive:

    • PR #511 (#269): add monix.reactive.subjects.Var type
    • PR #528: add Observable.scanMap operator
    • PR #536 (#459): add a NonEmptyParallel for Observable using combineLatest

    πŸ”‹ Features for monix-tail:

    • PR #503 (#487): add Iterant.liftF builder for lifting monadic values
    • PR #510 (#500): add Iterant.takeEveryNth operator
    • PR #504 (#499): add Iterant.switchIfEmpty operator
    • PR #509 (#495): add Iterant.dropLast operator
    • PR #508 (#501): add Iterant.intersperse operator
    • PR #512 (#496): add Iterant.dropWhileWithIndex operator
    • PR #514 (#497): add Iterant.takeWhileWithIndex operator
    • PR #523 (#519): add Iterant.scanMap operator
    • PR #518 (#516): add Iterant[Task].intervalAtFixedRate
    • PR #524 (#498): add Iterant.interleave
    • PR #549 (#548): add Iterant.fromStateAction and fromStateActionL
    • PR #567 (related to #563): completedL should handle F[_] errors, mapEval should not
    • PR #569 (related to #563): Iterant fold left operators (yielding F[_]) need to handle errors thrown in F[_]
    • PR #566 (#562): improve safety of attempt & onErrorHandleWith on Iterant
    • PR #578 (#570): add Iterant#sumL method
    • PR #579 (#577): make Iterant#reduceL and headOptionL left folds handle errors from F[_] context
    • PR #575 (##571 and #572): add Iterant.repeat (method and builder)
    • PR #583 (#549): add Iterant.fromStateAction builder
    • PR #582 (#573 and #574): add repeatEval/repeatEvalF for Iterant & repeatEvalF for Observable
    • PR #554 (#479): add Iterant#bracket operator
    • PR #581 (#559): handle broken nodes in Iterant.skipSuspendL
    • PR #589: improve handling of broken batches/cursors in Iterant.attempt
    • PR #591 (#580): improve strictness of Eq of Iterant, fix doOnFinish on Last

    πŸ› Bug fixes:

    • PR #552 (#483): MVar is stack unsafe, triggering stack overflow on put
    • PR #543 (#541): Observable.take(0) shouldn't subscribe to the source at all
    • PR #496 (#468): race condition for Observable in concatenation operators
    • PR #568: in Iterant.toReactivePublisher the cancel should be made by request()
    • PR #592 (#590): potential nontermination in Observable.zip[Map]

    Chores:

    • ⚑️ PR #502: update SBT to 1.1
    • PR #488: add note about execution model for Observable.fromInputStream
    • PR #531 (related to #513): add automatic header creation on compilation
    • PR #557: disable automatic publishing, too dangerous
    • PR #546 (related to #513): add scalafmt.conf configuration
    • PR #565: correct small typo in doc of Task#executeOn
    • PR #576: fix comment mentioning Akka instead of Monix
    • PR #588: update copyright headers for Scala 2.11 source files
    • PR #605: Make concurrent Atomic tests more resilient to timeouts
  • v3.0.0-M3

    January 07, 2017

    πŸš€ Final milestone release before the RC and the final and stable 3.0.0.

    Highlights

    Local and TaskLocal

    πŸ“„ Special thanks to Leandro Bolivar for implementing propagation of "local vars" (aka Local and TaskLocal, the equivalents of ThreadLocal, but for usage with Future and Task). The inspiration was com.twitter.util.Local and scala.util.DynamicVariable.

    ⏱ Right now the Monix Task is the only (known) IO data type for Scala that can work with such locals and because of the provided TracingScheduler, you can work with Scala's Future too.

    πŸ‘€ See:

    Pure cancellation, .start, .uncanceled, race

    πŸš€ This release also lands a long awaited feature for Task β€” pure cancellation, aka Task.cancel. It's building on top of the current Task implementation, however it changes the API β€” e.g. in order to keep Task pure, the chooseFirstOf operator is now gone, being replaced with an equivalent racePair that operates with tasks and pure functions.

    πŸ‘€ See:

    🐎 Performance optimizations

    πŸš€ One other highlight of the release are the performance improvements for Task and Coeval, an on-going process to make sure that Monix's Task remains the best implementation in Scala's ecosystem.

    πŸ‘€ See:

    Typelevel Cats

    We now depend on Cats 1.0.1 and cats-effect 0.8.

    πŸš€ This unblocks the 3.0.0 release, because Cats 1.x has stronger backwards compatibility guarantees.

    Pull requests

    • ⚑️ PR #464: updates dependencies, Scala to 2.12.4 and 2.11.12, JCTools to 2.1.1, Minitest to 2.0.0, Scala.js to 0.6.21
    • ⏱ PR #462: Fix for timeoutTo to cancel source task directly after timeout
    • PR #444: Add localContextPropagation to Task.Options, implement tracing Local vars
    • βœ… PR 470: increase test coverage
    • PR #473: Fix issue where fromAsyncStateAction is not safe for user code
    • ⚑️ PR #485 and PR #489: Updates Cats to 1.0.1 and cats-effect to 0.8
    • PR #474: Task / Coeval Run-loop Optimizations, First Batch
    • PR #492: Second batch of optimizations
    • PR #494: Task.cancel as a pure action, along with .start, .race and .uncancelable
  • v3.0.0-M2

    November 09, 2017

    πŸš€ The highlight of this release is the upgrade to Cats 1.0-RC1, bringing a cats.Parallel[Task, Task] instance that replaces 🚚 the need for Task.nondeterminism, now removed.

    List of changes:

    • PR #437: Added Iterant.zipWithIndex
    • PR #439: Added Iterant.dump
    • PR #441: Observable.mapParallelUnordered needs configurable overflow strategy
    • PR #445: Added ShiftedRunnable in monix.execution
    • PR #443: Iterant maxByL and minByL ops
    • PR #442: small fixes in takeWhileNotCanceled and runAsyncGetFirst docs
    • PR #450: Minor test description fix
    • PR #458: Updates to cats 1.0-RC1 and cats-effect 0.5, along with redesigning that integration, e.g. added cats.Parallel instance, Iterant.parZip and Iterant.parZipMap
  • v3.0.0-M1

    September 15, 2017

    πŸš€ This is a major release that breaks both binary and source πŸš€ compatibility. The major themes of this release:

    1. deep integration with Typelevel Cats
    2. the Iterant data type in a new monix-tail sub-project ♻️ 3. API refactoring, eliminated deprecations
    3. major improvements to Observable, Task and CancelableFuture

    Typelevel Cats integration:

    • PR #370: introduced Cats and cats-effect as direct dependencies
    • PR #377: added Cats related conversions, along with naming changes for consistency (e.g. renamed Coeval.Attempt to Coeval.Eager)
    • ⚑️ PR #387: updated Cats to 1.0.0-MF, removed deprecated functions and classes
    • PR #397: standardizes on Cats-related naming, removes Coeval's Comonad implementation
    • PR #398: re-adds instances for CoflatMap
    • PR #427: adds conversions from Cats to Observable

    πŸ†• New monix-tail sub-project, exposing monix.tail.Iterant[F[_], A]:

    • PR #280: introduces Iterant[F[_], A] for pull-based streaming based on Task / Coeval
    • PR #396: adds the Iterant.scan operator
    • PR #403: adds Iterant.foldWhileLeftL and Iterant.foldWhileLeftEvalL operators
    • PR #404: adds Iterant existsL, forallL, changes Observable.foldWhileL (breaking change)
    • PR #402: adds Iterant.foldRightL operator
    • PR #405: adds Iterant ops - findL, foldL, maxL, minL, reduceL
    • PR #407: adds Iterant ops - countL, distinctUntilChanged, distinctUntilChangedByKey
    • PR #412: adds scanEval on both Iterant and Observable
    • PR #411: another naming consistency change between Observable and Iterant
    • PR #413: Iterant.bufferSliding, bufferTumbling and batched operators
    • PR #417 and PR #418: Reactive Streams implementation for Iterant

    πŸ‘Œ Improvements for monix-execution and CancelableFuture:

    • PR #390: changes for flatMap on CancelableFuture to cancel all involved futures (thanks to @larsrh)
    • PR #395: adds Cats type class implementations for CancelableFuture
    • PR #431: improvements to CancelableFuture to get rid of memory leak, also adding utils like CancelableFuture.async
    • PR #432: further fixes to CancelableFuture, since describing a cancellable flatMap is a hard problem
    • PR #418: adds flip convenience method to AtomicBoolean (thanks to @Wogan)

    πŸ‘Œ Improvements for monix-reactive and Observable:

    • PR #391: makes Observable concatenation (++) stack safe
    • PR #408: changes for Iterant and Cats consistency (make use of Eq and Order type classes, add foldF and foldL, remove distinct and distinctByKey)
    • PR #368: added the Observable.intersperse operator (thanks to @omainegra)
    • PR #384: added contramap method to Callback (thanks to @Wogan)
    • PR #425: gets rid of ObservableLike, makes Observable an abstract class where the operators are final, Pipe no longer has Observable's operators, just transform

    πŸ‘Œ Improvements for monix-eval, Task and Coeval:

    • PR #410: Task and Coeval performance optimisations
    • PR #422: adds Task.shift, an innovation inspired by cats.effect.IO
    • PR #424: Task refactoring, gets rid of Task.OnFinish type alias
    • PR #430: Coeval and Task refactoring to the run methods for consistency, introduced map2, map3...map6 on both Task and Coeval, renamed zipMap* to parMap2, parMap3... parMap6 for Task

    πŸ— Administrative and build changes:

    • πŸ”§ PR #372: configured project for Git hash versioning (for enabling automatic releases)
    • PR #378: dropped Scala 2.10 support
    • πŸš€ enabled automatic deployments through Travis-ci, wrote a blog post documenting the necessarily steps, see Automatic Releases to Maven Central with Travis and SBT
    • ⚑️ PR #423: updates Scala.js to 0.6.20, the final in the series before 1.0.0
  • v2.3.3

    January 29, 2018

    πŸš€ Release is binary backwards compatible with series 2.3.x.

    πŸ› Bug fixes:

    • Issue #468:
      Observables created using concat don't get canceled
      πŸš‘ ( critical )
    • Issue #483:
      stack overflow error on MVar.put
    • Issue #541:
      observable.take(0) shouldn't subscribe to the source at all
    • Issue #475:
      Observable.fromAsyncStateAction does not protect against
      exceptions thrown in use code

    Issue #468 in particular is pretty serious as it can lead to
    resource leaks. Read the pull request
    for more details.

    ⬆️ Upgrade to 2.3.3 is recommended!