Monix: Version 3.0.0-RC1

The 3.0.0 release is near and it’s going to be huge. This is the first of the two release candidates planned, see below for the timeline.

The theme of the 3.x series are:

deep integration with Typelevel Cats deep integration with cats-effect a much improved Task , in concert with its cats-effect integration improvements across the board to Observable , CancelableFuture , etc. the introduction of monix.tail.Iterant , a purely functional, pull-based streaming alternative

Featured presentation:

This release candidate is the first of two release candidates to follow. The remaining milestones are these:

3.0.0-RC2 to be released on April 15, 2018 3.0.0 to be released on May 15, 2018

These dates are synchronized with the milestones of cats-effect:

1.0.0-RC on April 15, 2018 1.0.0 on May 15, 2018

On API compatibility, going forward we’ll try our best to keep it and to re-add symbols that were removed from 2.x to ease migration, but until RC2 that is a best effort, due to cats-effect planned API breakage in its 1.0.0 . But from RC2 onwards, you should expect both source and binary compatibility.

To use the new version, include this in your build.sbt :

libraryDependencies += "io.monix" %% "monix" % "3.0.0-RC1"

Note this depends on Cats 1.1.0 and cats-effect 0.10 !

We haven’t announced any milestones on the website, due to their instability, therefore here’s the full list of changes that happened since the currently stable 2.3.x :

Cats Effect integration:

Features for monix-execution :

Features for monix-eval :

Features for monix-reactive :

Features for monix-tail :

Bug fixes:

Chores:

PR #370: introduced Cats and cats-effect as direct dependencies

as direct dependencies PR #377: added Cats related conversions, along with naming changes for consistency (e.g. renamed Coeval.Attempt to Coeval.Eager )

to ) PR #387: updated Cats to 1.0.0-MF , removed deprecated functions and classes

, removed deprecated functions and classes PR #397: standardizes on Cats-related naming, removes Coeval ’s Comonad implementation

’s 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] :

Improvements for monix-execution and CancelableFuture :

PR #390: changes for flatMap on CancelableFuture to cancel all involved futures (thanks to @larsrh)

on 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

to get rid of memory leak, also adding utils like PR #432: further fixes to CancelableFuture , since describing a cancellable flatMap is a hard problem

, since describing a cancellable 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 )

and Cats consistency (make use of and type classes, add and , remove and ) PR #368: added the Observable.intersperse operator (thanks to @omainegra)

operator (thanks to @omainegra) PR #384: added contramap method to Callback (thanks to @Wogan)

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

and performance optimisations PR #422: adds Task.shift , an innovation inspired by cats.effect.IO

, an innovation inspired by PR #424: Task refactoring, gets rid of Task.OnFinish type alias

refactoring, gets rid of 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:

Special Thanks #

For this release I’d like to give warm thanks to:

They’ve been really active in solving issues, in providing feedback, but also in helping people on the Gitter channel ❤️

Enjoy!