Skip to content

A community driven list of useful Scala libraries, frameworks and software.

License

Notifications You must be signed in to change notification settings

joecwu/awesome-scala

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 

Repository files navigation

Awesome Scala

A community driven list of useful Scala libraries, frameworks and software. This is not a catalog of all the libraries, just a starting point for your explorations. Inspired by awesome-python. Other amazingly awesome lists can be found in the awesome-awesomeness list.

Database

Database access libraries in Scala.

  • Activate — Pluggable object persistence in Scala.
  • Elastic4s - A scala DSL / reactive client for Elasticsearch
  • Phantom — Reactive type safe Scala driver for Apache Cassandra.
  • ReactiveNeo - Reactive type-safe Scala driver for Neo4J.
  • PostgreSQL and MySQL async — Async database drivers to talk to PostgreSQL and MySQL in Scala.
  • ReactiveCouchbase — Reactive Scala Driver for Couchbase. Also includes a Play plug-in. An official plug-in is also in development.
  • ReactiveMongo — Reactive Scala Driver for MongoDB.
  • Salat — ORM for MongoDB. A related Play-plugin is also available.
  • Scala ActiveRecord — ORM library for scala, inspired by ActiveRecord of Ruby on Rails.
  • ScalikeJDBC — A tidy SQL-based DB access library for Scala developers.
  • Slick — Modern database query and access library for Scala.
  • Sorm — A functional boilerplate-free Scala ORM.
  • Squeryl — A Scala DSL for talking with databases with minimum verbosity and maximum type safety.
  • doobie - Pure functional JDBC layer for Scala.
  • MapperDao - An ORM library for oracle, mysql, mssql, and postgresql
  • Tepkin — Reactive MongoDB Driver for Scala built on top of Akka IO and Akka Streams.
  • Casbah (repo) - Officially supported Scala driver for MongoDB
  • rediscala - Non-blocking, Reactive Redis driver for Scala (with Sentinel support)

Graphical User Interfaces

Libraries for creation of graphical user interfaces

  • ScalaFX - Scala DSL for creating Graphical User Interfaces that sits on top of JavaFX.

Web Frameworks

Scala frameworks for web development.

  • Play — Makes it easy to build scalable, fast and real-time web applications with Java & Scala.
  • Lift — Secure and powerful full stack web framework (discussion).
  • Skinny Framework — A full-stack web app framework upon Scalatra for rapid Development in Scala.
  • Scalatra — Tiny Scala high-performance, async web framework, inspired by Sinatra.
  • Spray — A suite of scala libraries for building and consuming RESTful web services on top of Akka.
  • Finatra — A sinatra-inspired web framework for scala, running on top of Finagle.
  • Reactive — FRP and web abstractions, which can be plugged into any web framework (currently only has bindings for Lift).
  • Chaos — A lightweight framework for writing REST services in Scala.
  • Xitrum — An async and clustered Scala web framework and HTTP(S) server fusion on top of Netty, Akka, and Hazelcast.
  • Unfiltered — A modular set of unopinionated primitives for servicing HTTP and WebSocket requests in Scala.
  • Colossus — lightweight framework for building high-performance applications in Scala that require non-blocking network I/O.
  • Socko — An embedded Scala web server powered by Netty networking and Akka processing.

i18n

Scala libraries for i18n.

  • Scaposer – GNU Gettext .po file loader for Scala.
  • scala-xgettext – A compiler plugin that acts like GNU xgettext command to extract i18n strings in Scala source code files to Gettext .po file.

Authentication

Libraries for implementing authentications schemes.

  • scala-oauth2-provider — OAuth 2.0 server-side implementation written in Scala.
  • SecureSocial — A module that provides OAuth, OAuth2 and OpenID authentication for Play Framework applications.
  • play2-auth — Play2.x Authentication and Authorization module.
  • play-pac4j — Profile & Authentication Client in Scala for CAS, OAuth, OpenID, SAML & HTTP protocols and Play 2.x framework.
  • play-silhouette — Authentication library for Play Framework applications that supports several authentication methods, including OAuth1, OAuth2, OpenID, Credentials or custom authentication schemes.

Testing

Libraries for code testing.

  • ScalaCheck — Property-based testing for Scala.
  • ScalaTest — A testing tool for Scala and Java developers.
  • ScalaMeter - Performance & memory footprint measuring, regression testing.
  • Specs2 — Software Specifications for Scala.
  • µTest — A tiny, portable testing library for Scala.
  • Scalive — Connect a Scala REPL to running JVM processes without any prior setup; this library is used for inspecting systems in production mode.
  • Gatling – Async Scala-Akka-Netty based Stress Tool.
  • ScalaMock – Scala native mocking framework

JSON Manipulation

Libraries for work with json.

  • json4s — Project aims to provide a single AST to be used by other scala json libraries.
  • spray-json — Lightweight, clean and efficient JSON implementation in Scala.
  • argonaut — Purely Functional JSON in Scala.
  • jackson-module-scala — Add-on module for Jackson to support Scala-specific datatypes.
  • play-json — Flexible and powerful JSON manipulation, validation and serialization, with no reflection at runtime.
  • scalajack - Fast 'n easy JSON serialization with optional MongoDB support. Uses Jackson under the hood.

Serialization

Libraries for serializing and deserializing data for storage or transport.

  • Pickling — Fast, customizable, boilerplate-free pickling support.
  • scodec — A combinator library for working with binary data.
  • Scrooge — An Apache Thrift code generator for Scala.
  • validation — Advanced validation & serialization for JSON, HTML form data, etc, with no reflection at runtime.
  • Chill — Extensions for the Kryo serialization library to ease configuration in systems like Hadoop and Storm.
  • µPickle — A lightweight serialization library for Scala that works in ScalaJS, allowing transfer of structured data between the JVM and JavaScript.
  • ScalaPB - A Protocol Buffer generator for Scala.
  • ScalaBuff - a Scala Protocol Buffers (protobuf) compiler

Science and Data Analysis

Libraries for scientific computing, data analysis and numerical processing.

  • Algebird — Abstract Algebra for Scala.
  • Axle — Spire-based DSL for scientific cloud computing.
  • Breeze — Breeze is a numerical processing library for Scala.
  • Chalk — Chalk is a natural language processing library.
  • FACTORIE — A toolkit for deployable probabilistic modeling, implemented as a software library in Scala.
  • Figaro - Figaro is a probabilistic programming language that supports development of very rich probabilistic models.
  • MGO — Modular multi-objective evolutionary algorithm optimization library enforcing immutability.
  • MLLib — Machine Learning framework for Spark
  • OpenMOLE — OpenMOLE (Open MOdeL Experiment) is a workflow engine designed to leverage the computing power of distributed execution environments for naturally parallel processes.
  • Saddle — A minimalist port of Pandas to Scala
  • Spire — Powerful new number types and numeric abstractions for Scala.
  • Squants — The Scala API for Quantities, Units of Measure and Dimensional Analysis.
  • PredictionIO - machine learning server for developers and data scientists. Built on Apache Spark, HBase and Spray
  • OscaR - a Scala toolkit for solving Operations Research problems

Big Data

  • Spark — Lightning fast cluster computing — up to 100x faster than Hadoop for iterative algorithms (memory caching) and up to 10x faster than Hadoop for single-pass MapReduce jobs. Compatible with YARN-enabled Hadoop clusters, can run on Mesos and in stand-alone mode as well.
  • Scalding — A Scala binding for the Cascading abstraction of Hadoop MapReduce.
  • Summingbird — An implementation of the “lambda architecture” as a software abstraction — a single API for Hadoop and Storm.
  • Shadoop - A Scala DSL for Hadoop MapReduce.
  • Scrunch — A Scala wrapper for Apache Crunch which provides a framework for writing, testing, and running MapReduce pipelines.
  • GridScale — A Scala API for computing clusters and grids.
  • BIDMach - CPU and GPU machine learning library, using JNI for GPU computation.
  • scoozie — Scala DSL on top of Oozie XML.
  • [Scoobi] (https://github.com/nicta/scoobi) - Write type-safe Hadoop programs in idiomatic Scala way
  • Gearpump - Lightweight real-time big data streaming engine
  • Scoozie - Scala DSL on top of Oozie XML

Image processing and image analysis

2D and 3D image processing and image analysis

  • scalismo - Shape modelling and model-based image analysis.

Functional Reactive Programming

Event streams, signals, observables, etc.

  • Scala.Rx — An experimental library for Functional Reactive Programming in Scala (reactive variables). Scala.js compatible.
  • scala.frp — Functional Reactive Programming for Scala (event streams).
  • RxScala — Reactive Extensions for Scala – a library for composing asynchronous and event-based programs using observable sequences
  • Reactive Collections – A library that incorporates event streams and signals with specialized collections called reactive containers, and expresses concurrency using isolates and channels.
  • Vertx.io – A polyglot reactive application platform for the JVM which aims to be an alternative to node.js. Its concurrency model resembles actors. It supports Scala, Clojure, Java, Javascript, Ruby, Groovy and Python.
  • Monifu — Extensions to Scala’s standard library for multi-threading primitives and functional reactive programming. Scala.js compatible.

Modularization and Dependency Injection

Modularization of applications, dependency injection, etc.

  • Domino — Write elegant OSGi bundle activators in Scala.
  • Sclasner - Scala classpath scanner.
  • Scaldi — Lightweight Scala Dependency Injection Library.
  • MacWire — Scala Macro to generate wiring code for class instantiation. DI container replacement.
  • SubCut — Scala Uniquely Bound Classes Under Traits.
  • Scala-Guice — Scala extensions for Google Guice

Distributed Systems

Libraries and frameworks for writing distributed applications.

  • Akka — A toolkit and runtime for building highly concurrent, distributed, and fault tolerant event-driven applications.
  • Finagle — An extensible, protocol-agnostic RPC system designed for high performance and concurrency.
  • Glokka - Library to register and lookup actors by names in an Akka cluster.
  • CurioDB - Distributed & Persistent Redis Clone built with Scala & Akka.

Extensions

Scala extensions.

  • Scalaz — An extension to the core Scala library for functional programming.
  • Shapeless — A type class and dependent type based generic programming library for Scala.
  • Twitter Util — General-purpose Scala libraries, including a future implementation and other concurrency tools.
  • Scala Async — An asynchronous programming facility for Scala.
  • Resolvable — A library to optimize fetching immutable data structures from several endpoints in several formats.
  • Scala Blitz – A library to speed up Scala collection operations by removing runtime overheads during compilation, and a custom data-parallel operation runtime.
  • Log4s - Fast, Scala-friendly logging bindings on top of SLF4J. Uses macros for extreme performance.
  • Lamma – A Scala date library for date and schedule generation.
  • Scala Graph – A Scala library with basic graph functionality that seamlessly fits into the Scala standard collections library.
  • Cassovary – A Scala library that is designed from the ground up for space efficiency, handling graphs with billions of nodes and edges.
  • Scalactic - Small library of utilities related to quality that helps keeping code clear and correct.
  • Monocle - An Optics/Lens library for purely functional manipulation of immutable objects.
  • Rapture (repo) - a collection of libraries for common, everyday programming tasks (I/O, JSON, i18n, etc.)

Misc

Projects that don't fit into any specific category.

  • REPLesent – A presentation tool built inside the Scala REPL. Runs code straight from your slides with a single keystroke.
  • ScalaSTM - Software Transaction Memory for Scala
  • scala-ssh - Remote shell access via SSH for your Scala applications

Android

Scala libraries and wrappers for Android development.

HTTP

Scala libraries and wrappers for HTTP clients.

  • Dispatch — Library for asynchronous HTTP interaction. It provides a Scala vocabulary for Java’s async-http-client.
  • Netcaty - Simple net test client/server for Netty and Scala lovers.
  • Scalaxb — An XML data-binding tool for Scala that supports W3C XML Schema (xsd) and Web Services Description Language (wsdl) as the input file.
  • Spray — Actor-based library for http interaction.
  • Tubesocks — Library supporting bi-directional communication with websocket servers.
  • scalaj-http – Simple scala wrapper for HttpURLConnection (including OAuth support).
  • Finch.io — Purely Functional REST API atop of Finagle.
  • Newman — A REST DSL that tries to take the best from Dispatch, Finagle and Apache HttpClient. See here for rationale.

Semantic Web

Scala libraries for interactions with the Web of Data, and other RDF tools.

  • Banana-RDF – Scala-friendly abstractions for RDF and Linked Data technologies. Supports Jena, Sesame and native Scala.

Metrics and Monitoring

Scala libraries for gathering metrics and monitoring applications.

  • Kamon - Gathering metrics from applications built with Akka, Spray and Play! with support for user metrics as well.

Parsing

Scala libraries for creating parsers.

  • Scala Parser Combinators – Scala Standard Parser Combinator Library.
  • Parboiled2 – A Fast Parser Generator for Scala 2.10.3+.
  • atto - Pure functional incremental text parsing library for Scala, based on Attoparsec.

Sbt plugins

Sbt plugins to make your life easier.

  • Sbt-Revolver – Fork & Stop processes from sbt.
  • Sbt-Eclipse – Create Eclipse project definitions from sbt builds.
  • Sbt-Idea – Create IntelliJ IDEA project definitions from sbt builds (not needed from IntelliJ 14, it supports sbt/scala projects through the Scala plugin).
  • Sbt-Native-Packager – Bundle up Scala software for native packaging systems, like deb, rpm, homebrew, msi..
  • Sbt-Dependency-Graph – Create a dependency graph for your project.
  • Sbt-Versions - Plugin that checks for updated versions of your project's dependencies.
  • Sbt-One-Jar – Packages your project using One-JAR™.
  • Sbt-Start-Script – Create a "start" script to run the program.
  • Sbt-Sublime – Create Sublime Text projects with library dependencies sources
  • ScalaKata2 – Scala playground & Documentation tool.
  • Zeppelin - Scala and Spark Notebook (like IPython Notebook)
  • xsbt-web-plugin – Build enterprise J2EE Web applications in Scala.
  • tut - Tool for writing documentation with typechecked examples.
  • sbt-ide-settings - SBT plugin for tweaking various IDE settings
  • Sbt-BuildInfo – Generates Scala source from build definition.
  • Sbt-Updates – Shows sbt project's dependency updates.
  • sbt-pack - A sbt plugin for creating distributable Scala packages.
  • Ammonite - Ammonite is a collection of Scala libraries intended to improve the experience of using Scala as an system shell.
  • sbt-robovm - An sbt plugin for iOS development in Scala

XML / HTML

Xml and Html generation and processing

  • Scalatags - Write html as scala code and have your ide syntax check it.

Learning Scala

Nice books, blogs and other resources to learn Scala

JavaScript

JavaScript generation and interop libraries.

Tools

  • sbt (repo) - The interactive build tool for Scala
  • Scalastyle – Scala style checker.
  • Codacy - Automated Code Reviews for Scala
  • Wartremover - Wartremover a flexible Scala code linting tool
  • Abide - Library for quick scala code checking and validation
  • Scoverage - Scala Code Coverage tool
  • Gitbucket - The easily installable GitHub clone powered by Scala
  • Scapegoat - Scala compiler plugin for static code analysis
  • Scalariform - Scala source code formatter

Contributing

Your contributions are always welcome! Please submit a pull request or create an issue to add a new framework, library or software to the list. Do not submit a project that hasn’t been updated in the past 6 months or is not awesome.

About

A community driven list of useful Scala libraries, frameworks and software.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published