The Scala 3 Tech Report >>Download

What is Scala?

Scala is a functional, strongly typed, general-purpose programming language.

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)


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.

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.


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

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!

Binge-watch Scala content

Reading, listening and ... watching! From tutorials, through live coding sessions to conference talks. Beginners and advanced users alike will find something for their viewing pleasure.

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.

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
Side-effects managementFuture (built-in)
Concurrent programmingAkka
Web frameworkplay
HTTP serverakka-http | tapir
HTTP clientsttp client
Database accessSlick
Data streamsakka-streams
Side-effects managementcats-effect | Monix | zio
Concurrent programmingdescribing processes using IO/Task/ZIO
Web framework-
HTTP serverhttp4s | tapir
HTTP clientsttp client
Database accessDoobie
Data streamsfs2 | Monix | zio-streams

Other useful libraries


Event sourcing using Cassandra


Connectors to multiple data sources


The best developer tool to load test your web applications

Prediction IO

Machine learning server for developers and ML engineers.

Kafka manager

Managing kafka


API for Apache Beam and Google Cloud Dataflow


Database Tools incl. ORM, Migrations and Admin UI


A better notebook for Scala (and more)


A fault tolerant, protocol-agnostic RPC system


Modify deeply nested case class fields


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.


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


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.