Where Scala meets the industry
The Scala language is evolving, thanks to the dedicated efforts of individuals and organisations committed to its maintenance and development. The primary aim is to keep Scala at the cutting edge, offering its users useful programming tools while maintaining its demand in the market.
At VirtusLab and SoftwareMill, our mission is closely connected to joining and taking part in various initiatives within the Scala ecosystem. We're dedicated to collaborating with other Scala developers to make Scala the best option for business projects.
This blog post provides an overview of our contributions and talks about the groups and people behind Scala projects and what they're trying to achieve. Take a closer look and join us in our journey to make Scala programming an amazing experience! Your contributions are highly welcomed and valued.
Enriching the Scala experience
Scala 3 (Dotty), the latest version of Scala, both simplifies and extends Scala’s powerful static type system and advances its metaprogramming capabilities. It represents a significant update with some breaking changes compared to Scala 2. While migrating existing Scala 2 codebases to Scala 3 may require manual adjustments, continuous efforts have been made to make the migration process as smooth as possible. The newly introduced TASTy intermediate format allows not only for great backward compatibility forever, but also simplifies integrations with Scala 2.13 codebases
Our goal is to guide contributions to Scala tools and the broader ecosystem, ensuring that changes align with both the needs of the community and the industry. Following is the comprehensive list of projects that are instrumental in driving the Scala language development. Find out more about their purpose, teams, plans and objectives.
|Organizations||LAMP EPFL | VirtusLab | Scala Center |Lightbend|
|Lead||Martin Odersky, Paweł Marks|
The Scala 3 Team maintains the compiler, which involves more than just addressing reported bugs and regressions. While those are essential tasks, we also concentrate on other areas that might be less visible to language users.
Some of these areas include:
- Maintaining and enforcing all the compatibility guarantees. Read in detail how we provide backward output compatibility and make sure your code will work in future versions without changes in this blog post.
- Helping open-source libraries to migrate tricky parts to Scala 3
- Working on release engineering and ecosystem coordination.
- Maintaining the up-to-date doctool and language documentation.
- Maintaining the Open Community Build
- Working on the development of so-called best effort compilation - a compilation mode that allows tools, such as Metals, to extract partial information from not-compiling code.
Scala 3 Team members are also active in the tangent areas, such as Scala Native or Toolkit.
The most recent success of the compiler team was the release of Scala 3.3 LTS, which culminated months of planning and work. The team's next goal is to ship Scala CLI as a default Scala runner in the compiler distributions.
Visit Dotty on GitHub.
Open Community Build
Open Community Build is a proactive effort to enhance the reliability, performance, and compatibility of the Scala compiler and ecosystem. It is the last layer of Scala 3 source compatibility safety net. It runs weekly, building the entire Scala 3 open-source ecosystem. It tries to build every single open-source project ever released for Scala 3. Every failure here is investigated and treated as a high-priority bug.
Open Community Build currently tests over 1500 projects published with Scala 3. Thanks to its coverage the Scala Compiler Team was able to quickly detect and fix multiple regressions introduced to the compiler. This effort possibly saved hundreds of hours of multiple Scala developers work time, allowing them to focus on delivering products, with a safe and well tested programming language.
|Team||Wojciech Mazur, Rikito Taniguchi|
Scala Native provides an alternative, natively compiled, runtime for the Scala language. Its ahead-of-time compiler, powered by LLVM, allows it to execute Scala programs without JVM overheads - it allows for almost instant startup executing with its peak performance, and possibly using less resources at the same time. Scala Native provides a stable API for easy and efficient interoperability with native libraries written in C, Go or Rust using the C ABI.
Scala Native Team in the past was responsible for adding multiple important features for this project, like:
- Scala 2.13 and Scala 3 support
- building Windows native applications
- multithreading support compliant with the JVM model
- Adding support for debugging applications with 3rd party tools
The team is working with a close collaboration with the EPFL as part of Martin’s Odersky research for new applications for Scala Native, involving projects related to compile-safety of memory management, asynchronous computation model using coroutines or developing new more performant Garbage Collector implementations.
|Team||Adrien Piquerez, Arthur McGibbon, Chris Kipp, Kamil Podsiadło, Ólafur Páll Geirsson, Rikito Taniguch, Vadim Chelyshov, Katarzyna Marek, Jakub Cieśluk|
Scala Metals is a Scala language server that aids thousands of users in writing Scala within their favourite editors, providing a level of support equivalent to what you would expect from any IDE. The supported editors include Visual Studio Code, Emacs, Neovim, and Sublime Text, along with several others that are not officially supported.
Thanks to the LSP protocol, it can also be employed in various less common scenarios, such as connecting to workspaces via web interfaces."The work is being done in close cooperation with Scala Center and other companies together with a number of community contributors.
The features currently supported are:
- Hover with information about particular symbols
- Code navigation
- Code completion suggestions
- Running and debugging you code
- Organizing imports
- Method signature help
Visit Metals on GitHub
|Organisation||Scala Center | VirtusLab | JetBrains|
Bloop is a build server specifically designed for the Scala programming language. Its primary goal is to offer a hassle-free experience for Scala developers during the development process. Additionally, it is a solid platform for build tool authors to consume the Scala toolchain; to compile, test or run Scala code.
Visit Bloop on GitHub
Scala CLI is a command-line tool developed by VirtusLab. It lets you compile, run, test, and package your Scala code in a simple and intuitive manner. It is, or will soon be, the default Scala runner and available as “scala” in all the package managers. It also incorporates a number of experimental features, which allow users to further extend the usability of the tool.
Scala Toolkit docs is an ongoing effort by Scala Center and VirtusLab to compose a set of approachable libraries to address current software development problems. Rather than developing new libraries from scratch, the Scala Toolkit aims to collaborate with Scala Community maintainers of existing, battle-tested libraries.
The libraries are being selected upon the following criteria:
- API Usability: Consistency, abstraction level, visibility, language level etc.
- Responsiveness and availability of the maintainers
- Support for Scala.js and Scala Native
Currently in Scala Toolkit:
- MUnit for testing LINK
- Sttp for HTTP client LINK
- UPickle/UJson for reading, writing and operating on JSONs LINK
- OS-Lib for operating on files and the operating system LINK
“Let’s use simple code to solve simple problems!”. Why, as a developer, would you need a Scala Toolkit?
- to streamline your workflows,
- to solve everyday problems more effectively,
- and finally, to experience productive and enjoyable Scala development.
The collection of libraries supports both Scala 3 and Scala 2, as well as various platforms like JVM, Scala.js, and Scala Native.
Scala open-source tools
When speaking of programming libraries, developers appreciate and use tools that focus on getting things done with a minimum of effort. Among various open source projects, these are especially appreciated by developers and would serve as an inspiration you need for your next project!
A declarative, type-safe web endpoints library. The goal of tapir is to provide a programmer-friendly, reasonably type-safe API to expose, consume, and document HTTP endpoints. Tapir leverages Scala's possibilities in many ways:
- type-safety: compile-time guarantees, develop-time completions, read-time information
- declarative: separate the shape of the endpoint (the "what"), from the server logic (the "how")
- OpenAPI / Swagger integration: generate documentation from endpoint descriptions
- observability: leverage the metadata to report rich metrics and tracing information
- abstraction: re-use common endpoint definitions, as well as individual inputs/outputs
- library, not a framework: integrates with your stack
Explore the examples to see tapir in action.
Adopt a tapir, and generate your first tapir-based project today!
The sttp is an open-source library designed to offer a user-friendly API for defining HTTP requests and handling responses in a clean and efficient manner. To send requests, the library employs different backends that encapsulate various Scala or Java HTTP client implementations. Among the available backend implementations are those built on akka-http, async-http-client, http4s, OkHttp, and Java's built-in HTTP clients.
These backends seamlessly integrate with diverse Scala stacks, providing versatile interfaces that cater to both synchronous and asynchronous, procedural and functional approaches. Thus you can easily use your favourite effect system with sttp, it does not matter if you are fan of cats (link) or ZIO (link) sttp supports both of them, and even more. We also provide support for monix (link) and scalaz (link) if you prefer a more old-fashioned approach. Additionally, sttp supports multiple Scala versions - 2.11, 2.12, 2.13, and 3. This ensures compatibility and flexibility across different Scala environments.
The goal of Ox is to provide a developer-friendly concurrency library, utilising the latest features of Java’s Virtual Machine, specifically Virtual Threads and Structured Concurrency.
It provides a thin Scala wrapper on top of the threading and thread-scoping facilities provided by Java 21. Additionally, it provides an implementation of Go-like channels, bringing a fresh approach to stream processing, using the “direct” programming style.
A number of high-level concurrency and streaming combinators are available out-of-the-box, in most cases rendering it unnecessary to interact directly with threads.
An early release of Ox is available, so you can try it out or browse its source code.
Conferences and Events
Conferences and meetups are catalysts for knowledge sharing, networking, skill development, and fostering developer community belonging. Providing a vibrant space for people to connect and really get to know each other plays a vital role in building a strong community. That is why we organise and curate these amazing meeting places for Scala developers.
Scalar by SoftwareMill
Since 2014 Scalar has offered two days of immersive functional programming experience with the great community. By attending the conference you can learn from established IT experts and practitioners, and meet like-minded individuals in your field.
All Scalarians will tell you that the connections you can make at the conference are one of the most valuable aspects of attending Scalar. Join the 2024 edition, exchange ideas, and make friends! All of these while getting to know functional programming trends and use cases.
Visit Scalar website!
SUG Meetups by VirtusLab
Kraków Scala User Group and Wrocław Scala User Group are vibrant communities uniting Scala enthusiasts in and around Kraków and Wrocław cities. Members range from experienced professionals to newcomers embarking on their Scala journey.
Once a month, we explore a wide array of Scala-related interests, spanning the language, its features, future developments, open source contributions, functional concepts, libraries, frameworks, big data, reactive programming, and more.
Scala Times by SoftwareMill
Got a story/link/tip? Drop us a line: scalatimes (at) softwaremill (dot) com!
We are grateful for having such a vibrant community around Scala and having a chance to actively shape it. Engaging developers in various ways, fostering opportunities for learning, mutual teaching, and collaboration, pays off as the community itself becomes a valuable source of tools and ideas that make programming in Scala a world-class experience.
When our community members are genuinely and actively involved, that's when a true sense of community emerges.
Follow Scala Space to always be up to date with what’s happening with Scala language and Scala tooling.
DM us with your feedback and overall satisfaction with the Scala language.