All Versions
Latest Version
Avg Release Cycle
21 days
Latest Release

Changelog History
Page 1

  • v2.6.0 Changes

    2021 April 20

    ๐Ÿš€ Cats 2.6.0 is a binary-compatible release in the 2.x series. It provides support for Scala 2.12, 2.13, 3.0.0-RC2 and 3.0.0-RC3.

    โž• Additions

    • #3831 Add composition to Representable by @TimWSpence
    • #3832 Representable instance for Tuple2K by @TimWSpence
    • #3837 Provide instance of Alternative[Set] in alleycats by @rtyley
    • #3836 RepresentableStoreT by @TimWSpence

    ๐Ÿ”„ Changes

    • ๐Ÿ—„ #3847 Make deprecated catsDataInstancesForNonEmptyMap not implicit by @joroKr21 (source breaking)
    • #3720, #3852 fix show interpolation ambiguity with Seq/List by @tnielens
    • ๐Ÿšš #2254, #3856 Remove redundant Monad constraints from Parallel syntax by @joroKr21
    • โšก๏ธ #3851 Update 'Jump Start Guide' page to modern cats by @chaitanyawaikar
  • v2.5.0 Changes

    2021 March 29

    ๐Ÿš€ Cats 2.5.0 is a binary-compatible release in the 2.x series. It provides support for Scala 2.12, 2.13, 3.0.0-RC1 and 3.0.0-RC2.

    โž• Additions

    • #3808 Chain add fromOption factory method by @nikiforo
    • #3826, #3827 Add syntax for parProduct and parAp by @nigredo-tori
    • ๐Ÿ”€ #3804, #3805 Add Ior.mergeWith and AlignMergeWith by @nigredo-tori
    • #3806 Add Align instance for Nested by @nigredo-tori
    • #3643, #3823 Add sumAll & productAll by @phongngtuan, @larsrh

    ๐Ÿ”„ Changes

    • โšก๏ธ #3818 update Scala to 2.13.5 by @sh0hei
    • ๐Ÿ— #3825 Use -scalajs-mapSourceURI in Scala 3 builds by @fthomas
    • #3377, #3807 Replace Band instance for NonEmptyMap with a Semigroup instance consistent with SortedMap by @nigredo-tori
    • #3480, #3833 Rename master to main by @travisbrown, @larsrh

    ๐Ÿ“š Documentation

    • #3814 typo in ApplicativeError by @wibisono
  • v2.4.1 Changes

    2021 February 10

    ๐Ÿš€ This release fixes a problem in Cats 2.4.0. It is not binary compatible with Cats 2.4.0. We urge everyone to skip 2.4.0 and upgrade directly to 2.4.1.

    Cats 2.4.1 is a hotfix release in the 2.x series. It is binary compatible to every previous release in the 2.x series, except for Cats 2.4.0.

    ๐Ÿš€ The following release notes contain all cumulative changes since Cats 2.3.1.

    โž• Additions

    • #3220, #3222, #3773 Add Invariant instances for Numeric and Integral by @tmccarthy & @kubukoz
    • #3650, #3579 add grouped to NonEmptyCollection by @bbstilson & @larsrh
    • #3299, #3293 Generate Show instances for Tuple3 and higher by @barambani
    • #3727 .slidingN using tuples by @Slakah
    • ๐Ÿ‘ #3750, #1549 Support scala-native 0.4 by @arashi01
    • #3771 add NonEmptyChain.of by @larsrh
    • #3318 add syntax for unzip on functors by @yangzai
    • #3680 Add more group-like methods to NonEmptyList & Chain by @BalmungSan
    • #3748 Delimited continuations via shiftT/resetT for ContT by @TimWSpence
    • #3747 Add callCC to ContT by @TimWSpence
    • #3765 Add NonEmptyList.take by @saeltz
    • #2087, #3753 add Monoid[Comparison] for lexographical ordering by @adelbertc & @larsrh
    • #3759 Provide BoundedEnumerable[Byte] instance by @ashleymercer
    • #3699 Allow finding a list of maxiumum/minimum items for Foldable/Reducible by @Billzabob & @larsrh
    • #3730 Add by @saeltz
    • #3724 Trivial semigroup instances by @RaasAhsan
    • ๐Ÿ†“ #3707, #3710 Add missing Free.liftK and Free.liftId by @phongngtuan

    ๐Ÿ”„ Changes

    • ๐Ÿšš #3776, #3777 Removed and replaced inconsistent Parallel derivation for EitherT by @djspiewak
      • this change is potentially source-breaking: an existing implicit has been made un-implicit, but another implicit with a different semantics has been provided (core)
      • more discussion at typelevel/cats-effect#1645
      • this change emits new deprecation warnings
    • โœ… #3734, #3772 Cogen for (Finite)Duration to fix test failures by @larsrh
      • this change is only internal in tests
    • ๐Ÿ—„ #2207, #3758 deprecate Free.inject by @larsrh
      • this change emits new deprecation warnings
    • #3702 specialized EqOps by @YannMoisan
      • this change accidentally broke source compatibility, please upgrade to 2.4.1
      • reverted by #3784, #3785 by @larsrh
    • #3677 Added EmptyK instance for Map by @LMnet
      • this change marks a previously non-implicit method as implicit (alleycats)

    ๐Ÿ“š Documentation

    • #3722 Rename productM to mproduct in the glossary by @BenFradet
    • #3745 Adjust to GitHub Actions by @sh0hei
    • #3744 Improve scaladoc for EitherT.rethrowT by @majk-p
    • ๐Ÿ›  #3732 scaladoc fixes for PartialOrder by @martijnhoekstra
    • #3728 Fix a link in by @akiomik
    • โšก๏ธ #3726 update README by @gokyo
  • v2.4.0 Changes

    2021 February 9

    โฌ†๏ธ Cats 2.4.0 contains an unintended source-breaking change, please upgrade directly to 2.4.1.

  • v2.3.1 Changes

    2020 December 18

    ๐Ÿ‘ Cats 2.3.1 adds support for Scala 3.0.0-M3 and is published for Scala 2.12, 2.13, and 3.0.0-M2 as well.

    ๐Ÿ”„ Changes From 2.3.0

    • ๐Ÿ“ฆ #3696 Add ApplicativeThrow and MonadThrow to cats package object (from cats-effect) (@agustafson)
    • #3698 Add addLeft/addRight for Ior (@keirlawson)
    • ๐Ÿ“š #3639 Created documentation for monaderror, merged it with applicative error (@dhinojosa)
    • #3402 Simplify FunctionK.lift macro (@joroKr21)
    • #3708 Use as rather than map and discard (@johnynek)
  • v2.3.0 Changes

    November 26, 2020

    ๐Ÿš€ Welcome to the first stable release of Cats on Scala 3โ€ฆ milestone 2! We will continue releasing minor versions within the 2.3.x lineage against Scala 3.0.0 until it reaches a final stable release. The decision to push a stable release of Cats in advance of this date was made in order to simplify versioning within the downstream ecosystem.

    ๐Ÿ”„ Changes From 2.2.0

    • #3673 โ€“ tweak Band impl so it can more easily be combined with Monoid in a single instance (@Dwolla)
    • #3609 โ€“ A new dedicated cats ecosystem page (@benkio)
    • #3630 โ€“ FunctionK: methods to narrow input / widen output types (@bplommer)
    • #3620, #3624 โ€“ Typeclass instances for immutable.Seq (@JosephMoniz)
    • #3603 โ€“ Add method distinct to TraverseFilter (@takayahilton)
  • v2.3.0-M2 Changes

    November 07, 2020

    ๐Ÿš€ The Dotty release train is running full steam ahead: this Cats milestone release is cross-built and released for Scala 2.12.x, 2.13.x, Dotty 0.27 and 3.0.0-M1.

    ๐Ÿš€ There are only minor changes since last since 2.3.0-M1:

  • v2.3.0-M1 Changes

    November 02, 2020

    ๐Ÿš€ We are proud to announce the first Dotty release of Cats! All modules of Cats are cross-built and released for Scala 2.12.x, 2.13.x, and Dotty 0.27. Other than that, this release contains relatively few new features.


    ๐Ÿš€ The purpose of this milestone is that adventurous users can try out first-class Dotty support before we cut a final 2.3.0 release. Note that for the Dotty builds, binary compatibility between this milestone release and 2.3.0 may break in some situations. Also, if you are using the laws, sbt may complain about conflicting Scala version suffixes. This will be fixed in time for the final release.

    Binary compatibility (Scala 2)

    ๐Ÿš€ As usual, the 2.3.x series is backward binary-compatible with all previous 2.x releases (and with 1.x for the non-laws modules).

    ๐Ÿ”„ Changes & additions

    Other improvements

  • v2.2.0 Changes

    September 03, 2020

    ๐Ÿš€ The most significant change in the 2.2.0 release is that all Cats type class instances for standard library types are now available in implicit scope, and no longer have to be imported. This has a number of benefits, including faster compile times and fewer things to think about. Please see this pull request, this blog post, the 2.2.0-M1 release notes, and the migration guide below for more detailed information about this change.

    ๐Ÿš€ This release is verified to be backward binary compatible with all 2.1.x and 2.0.x releases (and with 1.x for the non-laws modules). It is also binary compatible with the last two 2.2.0 release candidates (RC3 and RC4), but has minor binary incompatibilities with the earlier release candidates.

    ๐Ÿš€ While this release is not guaranteed to be 100% source-compatible with previous release series, most updates should not require changes. You may want to adjust your imports in order to use the new implicit scope type class instances, but this is only an optimization (it may improve your compile times). If you are using Scala Steward these adjustments will be made for you.

    ๐Ÿš€ This is the first general-availability release that does not include cats-macros artifacts. This module has been empty since Cats 1.x, but if you explicitly depend on it for some reason, you'll have to remove it from your build.

    ๐Ÿš€ This release is published for Scala 2.12 and 2.13 and for Scala.js 1.x. We dropped support for Scala.js 0.6 in 2.2.0-M3.

    ๐Ÿš€ There have been 261 pull requests merged since the 2.1.0 release last December, and the list below only includes PRs that have been merged since the last release candidate.

    3 API / feature enhancements

    ๐Ÿ“š 3 documentation improvements

    ๐Ÿ— 5 build improvements

    ๐Ÿš€ For a complete record of changes since 2.1.0, please see the release notes for the pre-releases:


    In most cases all that's necessary to switch to using the new implicit scope instances is to replace cats.implicits._ imports with cats.syntax.all._ and delete any cats.instances imports. You don't have to make this change to use Cats 2.2.x, though, since this release doesn't remove anything. Importing cats.implicits._ will do exactly the same thing on Cats 2.1.x and 2.2.x, since imported instances have higher priority than implicit scope. You just won't see improvements in compile times.

    ๐Ÿ“ฆ There is one exception to this rule. The cats.implicits package provides implicit conversions from Cats's own Order and PartialOrder type classes to the standard library's Ordering and PartialOrdering. This conversion is not available in implicit scope, because it would be a bad idea for Cats to put instances of type classes it doesn't own into scope for types that it doesn't own (and also because it's not possible).

    For example the following code compiles on all Cats versions:

    import cats.instances.all.\_Ordering[List[Int]]

    The standard library doesn't provide an Ordering for List[Int] in implicit scope, but Cats provides both an Order[List[Int]] and an implicit conversion from cats.Order to scala.math.Ordering, so this code compiles.

    ๐Ÿšš In this case you can't simply remove the import, though, since while the Order instance will be available without it, the Ordering conversion won't be:

    scala\> cats.Order[List[Int]] res0: cats.kernel.Order[List[Int]] = [email protected] scala\> Ordering[List[Int]] ^ error: No implicit Ordering defined for List[Int].

    Instead you can either leave the import as it is, or change it to the more minimal cats.instances.order._.

  • v2.2.0-RC4 Changes

    August 21, 2020

    In previous Cats 2.2.0 pre-releases, all type class instances for Scala standard library types were available in implicit scope, except for the ones for Future. We made the decision to exclude those instances in part because putting them into implicit scope required duplicating some instances from cats-core in cats-kernel, which hadn't previously included any Future-related code. This release candidate reverses that decision and makes all type class instances available in implicit scope. It also includes a fix for one method on NonEmptyLazyList for Scala 2.13.

    ๐Ÿš€ This release candidate has the same binary compatibility guarantees as 2.2.0-RC3, and is backward binary-compatible with that release.

    2 API / feature enhancements

    ๐Ÿ“š 2 documentation improvements