cats alternatives and similar packages
Based on the "Extensions" category.
Alternatively, view cats alternatives based on common mentions on social networks and blogs.
8.3 9.5 cats VS scala.metaLibrary to read, analyze, transform and generate Scala programs
7.9 6.8 cats VS Scala-LoggingConvenient and performant logging library for Scala wrapping SLF4J.
6.8 8.9 cats VS Scala GraphGraph for Scala is intended to provide basic graph functionality seamlessly fitting into the Scala Collection Library. Like the well known members of scala.collection, Graph for Scala is an in-memory graph library aiming at editing and traversing graphs, finding cycles etc. in a user-friendly way.
6.7 9.1 L2 cats VS tinylogtinylog is a lightweight logging framework for Java, Kotlin, Scala, and Android
6.0 8.7 cats VS scribeThe fastest logging library in the world. Built from scratch in Scala and programmatically configurable.
5.3 0.0 cats VS EachA macro library that converts native imperative syntax to scalaz's monadic expressions
4.8 0.0 cats VS Stateless FutureAsynchronous programming in fully featured Scala syntax.
4.7 0.0 cats VS Scala BlitzScala framework for efficient sequential and data-parallel collections -
4.3 0.0 cats VS Records for ScalaLabeled records for Scala based on structural refinement types and macros.
4.1 0.0 cats VS Play monadic actionsA simple scala DSL to allow clean and monadic style for Play! Actions
3.3 6.3 cats VS enableIf.scalaA library that toggles Scala code at compile-time, like #if in C/C++
2.1 0.0 cats VS FreedslPractical effect composition library based on abstract wrapping type and the free monad
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of cats or a related project?
Cats is a library which provides abstractions for functional programming in the Scala programming language.
Scala supports both object-oriented and functional programming, and this is reflected in the hybrid approach of the standard library. Cats strives to provide functional programming abstractions that are core, binary compatible, modular, approachable and efficient. A broader goal of Cats is to provide a foundation for an ecosystem of pure, typeful libraries to support functional programming in Scala applications.
For more detail about Cats' motivations, go here.
The name is a playful shortening of the word category, from "category theory".
Regardless, you do not need to know anything about category theory to use Cats.
This project exists thanks to all the people who contribute. We welcome contributions to Cats and would love for you to help build Cats. See our [contributor guide](CONTRIBUTING.md) for more information about how you can get involved as a developer. If you are looking for something to start with, here is a beginner friendly list.
Become a financial contributor and help us sustain our community. Donations directly support office hours for maintainers, better documentation and strategic initiatives.
Platinum Sponsors Platinum sponsorship starts at $950 USD/month. Platinum Sponsors appear here at https://typelevel.org/cats
Gold Sponsors Gold Sponsorship starts at $420 USD/month. Gold Sponsors appear here at https://typelevel.org/cats
Silver Sponsors Silver Sponsorship starts at $180 USD/month. Silver Sponsors appear here at https://typelevel.org/cats
Backers Become a Backer with a recurring donation of just $5 USD/month. Backers appear here at https://typelevel.org/cats
Other contributors We thankfully accept one-time and recurring contributions as well. Other contributors appear here at https://typelevel.org/cats
Cats relies on improved type inference via the fix for SI-2712, which is not enabled by default. For Scala 2.12 you should add the following to your
scalacOptions += "-Ypartial-unification"
(Partial unification is on by default since Scala 2.13, the compiler no longer accepts
And then create the Cats dependency, by adding the following to your
libraryDependencies += "org.typelevel" %% "cats-core" % "2.8.0"
This will pull in the cats-core module. If you require some other
functionality, you can pick-and-choose from amongst these modules
(used in place of
cats-kernel: Small set of basic type classes (required).
cats-core: Most core type classes and functionality (required).
cats-laws: Laws for testing type class instances.
cats-free: Free structures such as the free monad, and supporting type classes.
cats-testkit: lib for writing tests for type class instances using laws.
algebra: Type classes to represent algebraic structures.
alleycats-core: Cats instances and classes which are not lawful.
There are several other Cats modules that are in separate repos so that they can maintain independent release cycles.
IOtype together with
cats-mtl: transformer typeclasses for Cats' Monads, Applicatives and Functors.
mouse: a small companion to Cats that provides convenient syntax (aka extension methods)
kittens: automatic type class instance derivation for Cats and generic utility functions
cats-tagless: Utilities for tagless final encoded algebras
cats-collections: Data structures which facilitate pure functional programming
cats-testkit-scalatest: Cats testkit integration with Scalatest
Past release notes for Cats are available in CHANGES.md.
- Website: typelevel.org/cats/
- ScalaDoc: typelevel.org/cats/api/
- Type classes: typelevel.org/cats/typeclasses.html
- Data types: typelevel.org/cats/datatypes.html
- Algebra overview: typelevel.org/cats/algebra.html
- Glossary: typelevel.org/cats/nomenclature.html
- Resources for Learners: typelevel.org/cats/resources_for_learners.html
- FAQ: typelevel.org/cats/faq.html
- The Typelevel Ecosystem: typelevel.org/cats/typelevelEcosystem.html
Discussion around Cats is currently happening on GitHub issues, PR pages, and Discord:
The Typelevel Discord has #cats and #cats-dev channels, as well as community channels such as #beginners. Please join us!
People are expected to follow the Scala Code of Conduct when discussing Cats on GitHub, Discord, or other venues.
We hope that our community will be respectful, helpful, and kind. If you find yourself embroiled in a situation that becomes heated, or that fails to live up to our expectations, you should disengage and contact one of the project maintainers in private. We hope to avoid letting minor aggressions and misunderstandings escalate into larger problems.
If you are being harassed, please contact one of us immediately so that we can support you.
Binary compatibility and versioning
1.0.0 release, we decided
to use MAJOR.MINOR.PATCH Semantic Versioning 2.0.0
going forward, which is different from the EPOCH.MAJOR.MINOR scheme common among
Java and Scala libraries (including the Scala lang).
Cats strives to provide a solid and stable foundation for an ecosystem of
FP libraries. Thus, we treat backward binary compatibility maintenance with a high priority.
In semantic versioning, backward breaking change is ONLY allowed between MAJOR versions.
We will maintain backward binary compatibility between PATCH AND MINOR versions.
For example, when we release Cats
1.1.0, it will be backward binary compatible
with the previous
1.0.x versions. I.E. the new JAR will be a drop-in replacement for
the old one. This is critical when your application has a diamond
dependency on Cats - depending on two or more libraries that all depend on Cats.
If one library upgrades to the new
1.1.0 Cats before the other one does, your
application still runs thanks to this backward binary compatibility.
Also worth noting is that according to semantic versioning, MINOR version Y (x.Y.z | x > 0) MUST be incremented if new, backwards compatible functionality is introduced to the public API. It MUST be incremented if any public API functionality is marked as deprecated.
Any binary breaking changes will require a MAJOR version bump, which we will be very
cautious about. We will also consider using
organization and package name for major
versioning in the future. But that decision is yet to be made.
The current maintainers (people who can merge pull requests) are:
- rossabaker Ross Baker
- armanbilge Arman Bilge
- johnynek P. Oscar Boykin
- adelbertc Adelbert Chang
- danicheg Daniel Esik
- LukaJCB Luka Jacobowitz
- peterneyens Peter Neyens
- tpolecat Rob Norris
- non Erik Osheim
- barambani Filippo Mariotti
- mpilquist Michael Pilquist
- milessabin Miles Sabin
- djspiewak Daniel Spiewak
- fthomas Frank Thomas
- satorg Sergey Torgashov
- julien-truffaut Julien Truffaut
- kailuowang Kailuo Wang
Retired committers include:
We are currently following a practice of requiring at least two sign-offs to merge code PRs (and for large or contentious issues we may wait for more). For typos, documentation improvements or minor build fix we relax this to a single sign-off. More detail in the process document.
Copyright and License
All code is available to you under the MIT license, available at http://opensource.org/licenses/mit-license.php and also in the COPYING file. The design is informed by many other projects, in particular Scalaz.
Copyright the maintainers, 2015-2022.
*Note that all licence references and agreements mentioned in the cats README section above are relevant to that project's source code only.