Monix: Critical Bug Fix in Version 2.2.3 for Scala 2.12

Version 2.2.3 is out now.

It is a minor release that’s binary and source compatible with 2.2.x, fixing a critical bug that happens in Scala 2.12, due to changes to how flatMap is implemented in scala.concurrent.Future:

  • Bug #330: Ack.Continue.transformWith and Ack.Stop.transformWith are not stack-safe

Impact of this bug: it does NOT impact most (probably all) functionality in Monix, because Monix rarely flatMaps direct Continue references (due to batching and optimizations) and we have had extensive tests for long loops that could trigger this problem.

However this bug can be dangerous for people that have implemented the communication protocol (as described in the docs) by themselves. If you’re using Monix with Scala 2.12, then upgrade immediately.

Upgrade should be safe, being binary compatible with all previous 2.2.x versions.

Read more →

Monix: Version 2.2.2 Released

Version 2.2.2 is out now.

It is a minor release that’s binary and source compatible with 2.2.x.

In summary:

  • Implemented a circuit breaker for Task, for providing stability and preventing cascading failures in distributed systems
  • Added Task!.memoizeOnSuccess and Coeval!.memoizeOnSuccess operators that only caches the result (with idempotency guarantees) for successful results, while re-evaluating the source on failures
  • Added Task.deferFutureAction that helps with wrapping Future-enabled APIs without requiring ExecutionContext in the function signature, since Task can inject it for you
  • Added SingleAssignmentCancelable.plusOne for helping with building Consumer objects
  • Moved and redesigned exceptions in monix.execution
  • Task.sequence now has lazy behavior in evaluating the given sequence (previously we were doing a foldLeft on that sequence, which could have strict behavior, depending on the collection type)
  • Critical bugs fixed!

Details below!

Read more →

Monix: Version 2.2.1 Final Release

Version 2.2.1 is out now.

It is a major release that shouldn’t be considered binary compatible with 2.1.x, even though it is source compatible. This is due to several operators being changed in Observable and Task, but extension methods are provided for the older versions, therefore source compatibility is maintained.

As a summary: the new MVar synchronization primitive, performance improvements in Observable.concatMap and in the Task run-loop, new SchedulerService interface for shutting down schedulers, bug fixes and upgrade to Cats 0.9.0. See details below.

Read more →

Monix: Version 2.1.2


Version 2.1.2 is out now.

It is a minor release, binary compatible with 2.1.x, upgrading Scala to 2.12.1 and fixing a bug in Observable.bufferSliding. See Bug #275.

Read more →

Monix: Version 2.1.x


Version 2.1.1 is out now, while version 2.1.0 was out on Nov 9. The official announcement was then postponed because we waited to see if bug reports are going to happen. Today version 2.1.1 was released, fixing such a problem.

To use the new version, include this in your build.sbt (and use %%% for Scala.js):

libraryDependencies += "io.monix" %% "monix" % "2.1.1"

The new version supports:

  • Scala 2.10, 2.11 and 2.12
  • Scala.js 0.6.x
  • Cats 0.8.x
  • Scalaz 7.2.x
  • Java 6, 7, 8 and 9
  • Android, at least since 2.x

The theme of the 2.1 release has been performance optimizations, in some cases quite massive, improving Task and parallelizing work by means of the new Observable.mapAsync or by TaskSemaphore.

Read more →