What is Scala good for?
modeling complex domains
distributed systems
working with streaming data
data analytics
orchestrating concurrent processes
integration projects

Local setup & IDEs

As a prerequisite, to compile and run Scala code, you'll need to have the Java Development Kit installed. Then, you can use the Scala compiler directly from the command line; use the REPL; or use an IDE such as IntelliJ IDEA or Metals, with a supported text editor. A build tool, such as SBT, Maven or Gradle, will help you in managing dependencies and setting up the compilation pipeline. Below are a couple of guides, which provide a quick-start in various scenarios:

  • Official documentation on how to create a simple project!
  • IntelliJ bundle - 1-package with Java, IDE and the necessary plugins
  • Metals: VS Code / Vim / Emacs users: that’s for you!
  • Console REPL & the dominant Scala build tool (SBT)

DID YOU KNOW?

In 2012, we put our first commercial Scala project to production. Since then, we’ve delivered a number of Scala/Akka/Functional programming projects.

Starting with Scala

Scala’s syntax and semantics should feel familiar if you know other modern programming languages. If not, don’t worry: Scala is also a great language to start your programming adventure! Either way, getting to know the basics will allow you to start exploring on your own.

Books we've read

Programming In Scala

Programming in Scala: The definitive book Scala, written by its main architect, Martin Odersky, and long-time Scala experts, Lex Spoon and Bill Venners. Now in its 4th edition, the book guides you through the features of the Scala language, starting with the basics.

Functional programming simplified

This book makes the process of learning functional programming (FP) in Scala as simple as possible by breaking down complex topics into small, bite-size chunks that are easy to understand. The lessons are presented in a logical sequence — the order in which the author learned them — culminating in advanced topics like functional domain modeling, and how to write and use monads.

Functional programming in Scala

Functional Programming in Scala is a serious tutorial for programmers looking to learn FP and apply it to the everyday business of coding. The book guides readers from basic techniques to advanced topics in a logical, concise, and clear progression. In it, you'll find concrete examples and exercises that open up the world of functional programming.

Scala with Cats

The main goal of this book is to teach system architecture and design using the techniques of modern functional programming. This means designing systems as small composable units, expressing constraints and interactions via the type system, and using composition to guide the construction of large systems in a way that maintains the original architectural vision.

Reactive Design Patterns

Reactive Design Patterns is a clearly written guide for building message-driven distributed systems that are resilient, responsive, and elastic. In this book you'll find patterns for messaging, flow control, resource management, and concurrency, along with practical issues like test-friendly designs. All patterns include concrete examples using Scala and Akka.

Meet other Scala programmers

While meeting in-person is currently not possible in most places around the world, many of the meetups and conferences host online events - check them out as well!

Scala meetups

A number of cities host monthly meetups and introductory workshops, where you can not only meet fellow Scala programmers, but also share your work, research or what you’ve recently learned!

Scala conferences

Whatever the time of the year, chances are that there’s a Scala conference happening near you! A great occasion to spend a couple of days finding out what’s new in Scala, polishing your skills and getting to know the wider community.

Podcasts we listen to

There’s not only plenty of Scala-related material to read, but also some to listen to. Either when on the go, or when relaxing in the evening in front of a fireplace, you might enjoy listening to some of these!

Courses we’ve taken

Functional Programming in Scala Specialization

Discover how to write elegant code that works the first time it is run. This Specialization provides a hands-on introduction to functional programming using the widespread programming language, Scala. It begins from the basic building blocks of the functional paradigm, first showing how to use these blocks to solve small problems, before building up to combining these concepts to architect larger functional programs. You'll see how the functional paradigm facilitates parallel and distributed programming, and through a series of hands on examples and programming assignments, you'll learn how to analyze data sets small to large; from parallel programming on multicore architectures, to distributed programming on a cluster using Apache Spark. A final capstone project will allow you to apply the skills you learned by building a large data-intensive application using real-world data.

DID YOU KNOW?

On our technical blog , we write about a variety of programming and software-development related subjects, not only Scala! Follow us on or .

Application stacks & libraries

There are two main application stacks for Scala. The first is based on the Future abstraction, which models a running asynchronous computation, and the actor model. The second is based on functional programming, referential transparency and data structures which describe concurrently running processes.

The good news is they mostly cooperate! However, when writing an application, you’ll find it easier to pick tools from the same stack. Below is just a sample of some available libraries. The Scala ecosystem is quite rich, offering solutions for many everyday problems.

THE FUTURE STACKTHE FUNCTIONAL STACK
Future (built-in)Side-effects managementcats-effect | Monix | zio
AkkaConcurrent programmingdescribing processes using IO/Task/ZIO
playWeb framework-
akka-http | tapirHTTP serverhttp4s | tapir
SlickDatabase accessDoobie
akka-streamsData streamsfs2 | Monix | zio-streams
THE FUTURE STACK
Side-effects managementFuture (built-in)
Concurrent programmingAkka
Web frameworkplay
HTTP serverakka-http | tapir
HTTP clientsttp client
Database accessSlick
Configurationtypesafe-config
Data streamsakka-streams
GraphQLSangria
THE FUNCTIONAL STACK
Side-effects managementcats-effect | Monix | zio
Concurrent programmingdescribing processes using IO/Task/ZIO
Web framework-
HTTP serverhttp4s | tapir
HTTP clientsttp client
Database accessDoobie
Configurationpureconfig
Data streamsfs2 | Monix | zio-streams
GraphQLCaliban

Other useful libraries

Akka-Persistence

Event sourcing using Cassandra

Alpakka

Connectors to multiple data sources

Gatling

The best developer tool to load test your web applications

Prediction IO

Machine learning server for developers and ML engineers.

Kafka manager

Managing kafka

Scio

API for Apache Beam and Google Cloud Dataflow

Prisma

Database Tools incl. ORM, Migrations and Admin UI

Polynote

A better notebook for Scala (and more)

Finagle

A fault tolerant, protocol-agnostic RPC system

Quicklens

Modify deeply nested case class fields

Bootzooka

Bootzooka is our Scala microservice / web application template project. It allows you to quickly start development, skipping the boring parts and focusing on the real business value.

Bootzooka contains only the very basic features that almost any application needs, such as: user registration, password recovery, profile management. This comes along with necessary development infrastructure: error handling, integration with a database and email, packaging and deployment, unit and integration testing, tracing and metrics, and more.

These features are fully implemented both on server- and client- side. You can copy and customize Bootzooka’s code as whole, or pick only the parts that fit your use-case.

Big Data

Did you know these apps are written in Scala?

  • Kafka

    Kafka is a distributed messaging platform, with advanced streaming, real-time capabilities.

  • Spark

    Spark is a general-purpose cluster-computing data analysis engine. It is used for batch data processing, stream processing, machine learning. It offers Scala, Python and R interfaces, as well as an SQL-like query language.

DID YOU KNOW?

We offer: Scala development, consulting and training. Contact us!

Scala TimesWEEKLY SCALA NEWSPAPER EST. 2014

If you have a suggestion on how to improve this “Scala starting page”, let us know!
We can’t promise to implement every suggestion, but we’ll definitely take it into account.