2003 – 2026

Scala Versions

Every public release of Scala — from Martin Odersky's first release at EPFL through Scala 3.9, the new LTS and currently the head of the Next line too, and the Scala 3.3 LTS it succeeds — with ship dates, headline changes, the support state of each line, and the minimum JVM each one needs. I keep the Scala 2-vs-Scala 3 split clear so you can tell which one you're on, and why the migration is far smoother than Python's 2→3.

Era & support

Era

Scala 3 — 2021 onward, the “Dotty” redesign, split into LTS and Next lines
Scala 2 — 2006–2019 majors; 2.13 and 2.12 are still maintained
Early — the 2003 first release through 2.10, kept for historical record

Support state

Next — the rolling Scala 3 feature line, and the line Scala recommends by default; newest features land here first. No row carries this badge at the moment: the newest Scala 3 is 3.9, which is also the new LTS, until 3.10 ships
LTS — the long-term-support Scala 3 line; bug fixes only, supported for years, and the advised target for published libraries
Maintenance — an older Scala 2 line still receiving fixes
EOL — superseded; no further updates

The small line under each support badge is the minimum JVM that release targets. Scala runs on the Java Virtual Machine; the canonical compatibility matrix is the JDK compatibility overview. The 3.3 LTS line stays JDK 8-compatible; every release from Scala 3.8 on, including the 3.9 LTS, requires JDK 17. If you also track the JVM itself, see the Java and Kotlin version pages — the three JVM languages share the same Java-version-requirement story.

Scala 2 vs Scala 3

Both lines are in production — and the migration is smoother than Python 2→3.

Scala 3.0 (May 2021) was a ground-up redesign — the “Dotty” compiler — not a routine bump: new optional-braces syntax, given/using in place of implicits, enum, union (A | B) and intersection (A & B) types, and a new metaprogramming model. But unlike Python's 2→3 break, both lines are still live. Scala 2.13 remains maintained and widely deployed, and the TASTy typed-AST format lets Scala 3 consume Scala 2.13 libraries — so moving from 2 to 3 is incremental, not a hard cutover. The primary reference is the official Scala 2-to-3 migration guide.

Which Scala 3 — LTS or Next?

Next is the default for most projects. LTS is what you target when you publish libraries.

Since Scala 3.3, the Scala 3 line splits in two — and Scala's own recommendation is the opposite of what the “LTS” label usually implies. Next is the default line for most users: upstream calls it the preferred target for any project whose API is not consumed by other Scala projects, and states plainly that nothing about it is experimental or unstable. Only the latest Next minor is maintained. LTS is the line to target when you publish libraries — it buys extended support and source-compatibility guarantees, and takes backported bug fixes and quality-of-life changes only. Especially conservative teams do choose it for applications as well. An LTS ships roughly every two years and keeps receiving patches for at least a year past the following LTS — more than three years in all. Scala 3.9.0 shipped on Sep 3, 2026 as the new LTS, succeeding Scala 3.3 after more than three years (release announcement). It is both a new LTS baseline and an ordinary Scala release, so for the moment scala-lang.org names 3.9.0 for both lines — it is the newest Scala 3 and the LTS at the same time. Unlike 3.3, it requires JDK 17. Scala 3.3 does not go away: upstream will keep it actively maintained for one year past 3.9.0, and that next patch is already in testing — 3.3.9-RC1 was announced on Sep 11, 2026. Note the one-way door — artifacts built with 3.9 cannot be consumed by 3.3 projects, so for a library author the move is a publishing decision, not just a version bump. Behind 3.9, Scala 3.10 opens as the new Next line, and its release candidates are already running: 3.10.0-RC1 was announced for public testing on Sep 3, 2026, the same day 3.9.0 shipped, and 3.10.0-RC2 followed on Sep 11 (see the development guarantees).

Scala version table

Version
Scala 3.9 (LTS)
Scala 3
LTS
Java 17+
Sep 3, 2026
The new long-term-support line, succeeding the 3.3 LTS — and, until Scala 3.10 ships, the newest Scala 3 as well. into implicit conversions stabilized; Scala.js 1.22 with a stable WebAssembly backend; Scaladoc snippets can assert their own errors; JDK 17 required.
  • The second Scala 3 LTS — the recommended baseline for library authors and conservative production users, replacing 3.3 in that role. It is simultaneously an ordinary Scala release, consolidating everything since 3.8. Watch the compatibility direction: artifacts built with Scala 3.9 cannot be consumed by Scala 3.3 projects, so republishing a library against 3.9 is a minor-version decision for its own users.
  • into is now stable (SIP-71) — an API author can mark selected parameters or types as accepting implicit conversions, without asking every caller to enable implicit conversions globally. It arrived as a preview feature in 3.8.
  • Scala.js 1.22, with a stable WebAssembly backend — the Wasm output targets a JavaScript host (Node, Deno, Bun, a browser) rather than a standalone Wasm runtime, and needs ECMAScript 2022, an engine implementing Wasm 3.0, and ES modules. Because the Scala.js backend lives in the compiler rather than a plugin, this Scala.js minor is fixed for the whole 3.9 LTS line.
  • Scaladoc snippets can declare the diagnostics they expect — an // error or // warn marker pins an expected failure to an exact line, so documentation that deliberately shows non-compiling code stops rotting silently.
  • Scala CLI 1.16 brings JShell in the REPL, JUnit 5, and export to sbt 2.x. The consequential piece is experimental Sloth, which rewrites the sun.misc.Unsafe-based lazy-val bytecode of dependencies built with Scala 3.0–3.7 to the VarHandle implementation introduced in 3.8 — the escape hatch when an old dependency, not your own code, is what blocks a newer JDK.
  • A deprecation worth acting on early — an implicit found in a companion object that is not accessible at the call site now warns under -deprecation, and stops being found in Scala 3.10. The fix usually belongs to the library, not the consumer, so compile with -deprecation now. Requires JDK 17+, as does every release from 3.8 on. See the 3.9 release notes.
Version
Scala 3.8
Scala 3
EOL
Java 17+
Jan 22, 2026
The Next minor that set up the 3.9 LTS, superseded by it in September 2026. The standard library became compiled by Scala 3 itself; Better Fors and runtimeChecked stabilized; the REPL became a separate artifact; JDK 17 became the minimum and JDK 26 bytecode gained support.
  • JDK 17 now required — for both compilation and execution. Driven by replacing sun.misc.Unsafe (being removed from future JDKs, per JEP 471) in the lazy val implementation with VarHandles, which also lets Scala emit and consume JDK 26 bytecode. The 3.3 LTS line stays JDK 8-compatible; every future release, including the 3.9 LTS, needs JDK 17+.
  • Standard library compiled with Scala 3 — historically the stdlib was built with Scala 2.13 and consumed by Scala 3 via binary compatibility; from 3.8 it is compiled by Scala 3. Binary-compatible, and the groundwork for a Scala-3-native stdlib (beginning in 3.10).
  • Better Fors (SIP-62) stabilizedfor-comprehensions can bind aliases before generators and skip unnecessary map calls. runtimeChecked (SIP-57) replaces the awkward : @unchecked ascription for deferring a check to runtime.
  • REPL split out — distributed as a separate scala3-repl artifact, with cleaner fansi/pprint-powered output.
  • New experimental work — strict-equality pattern matching (SIP-67), flexible/multi-spread varargs (SIP-70), fully-implicit into conversions (SIP-71, preview), and single-line lambdas after :.
  • 3.8 held the language in feature freeze ahead of the 3.9 LTS, and the line closed at 3.8.4 (Jun 5, 2026) when 3.9.0 superseded it — only the latest Next minor is maintained. If you are still on it, use 3.8.1 or later (3.8.0 carried a runtime regression). See the 3.8 release notes.
Version
Scala 3.7
Scala 3
EOL
Java 8+
May 7, 2025
Named tuples stabilized, and the Better Fors desugaring shipped in preview on its way to becoming the default in 3.8.
  • Named tuples stabilized (SIP-58)(name = "Ann", age = 30), with field access by name. Experimental since 3.5, a full stable feature from 3.7, and the headline addition; they also let you compute structural types without reaching for macros.
  • The Better Fors desugaring shipped in preview here before becoming the default in 3.8. Scala 3.7 also introduced the preview tier itself — SIP-approved and fully implemented, but still open to small changes before stabilizing — alongside stabilizing @publicInBinary (SIP-52).
  • Continued refinement of the experimental capture-checking and metaprogramming work. As a Next minor it is superseded once 3.8 ships; last patch 3.7.4 (Nov 11, 2025).
Version
Scala 3.6
Scala 3
EOL
Java 8+
Dec 10, 2024
Revised given prioritization and resolution rules; a short Next minor between 3.5 and 3.7.
  • New given resolution rules — clearer prioritization for overlapping given instances, reducing surprising ambiguity errors.
  • A short-lived Next minor; the recommended patch was 3.6.2, and the line ends at 3.6.4 (Mar 7, 2025).
Version
Scala 3.5
Scala 3
EOL
Java 8+
Aug 22, 2024
Scala CLI becomes the default scala command runner.
  • Scala CLI is now the default scala runner — the scala command gained run / repl / test / package subcommands and single-file script support, replacing the old launcher.
  • Last patch 3.5.2 (Oct 22, 2024).
Version
Scala 3.4
Scala 3
EOL
Java 8+
Feb 29, 2024
The first Next minor after the 3.3 LTS branch point; TASTy and language refinements.
  • The first Next release after Scala 3.3 became the LTS, resuming the rolling feature line.
  • TASTy-version, tooling, and migration refinements; last patch 3.4.3 (Aug 23, 2024).
Version
Scala 3.3 (LTS)
Scala 3
LTS
Java 8+
May 30, 2023
The first Scala 3 LTS, succeeded by 3.9 in September 2026 but still actively maintained for a year past it — and still the JDK 8-compatible option. Bug fixes and quality-of-life only (latest 3.3.8, Jun 10, 2026; 3.3.9-RC1 in testing since Sep 11, 2026).
  • The first Scala 3 LTS under the LTS/Next model announced in 2022. LTS releases ship roughly every two years and are supported for at least three; 3.3 carried the ecosystem for more than three years, and at the time 3.9 shipped roughly 56% of Scala 3 libraries were still published against it.
  • Receives backported bug fixes from the Next series but no new language features — 43% of the pull requests merged into the main Scala 3 branch since 3.4.0 were backported here, so it was never a frozen branch. For a library you are publishing today, though, 3.9 is now the LTS to target.
  • Stays JDK 8-compatible — the reason to stay on it. Every release from Next 3.8 onward, including the 3.9 LTS, requires JDK 17. Scala 3.3.8 adds JDK 26 support and a -Yfuture-lazy-vals flag (needs JDK 9+) to ease the eventual lazy-vals migration.
  • With Scala 3.9.0 out on Sep 3, 2026, upstream committed to keeping 3.3 actively maintained for one year past it, and 3.3.9-RC1 went out for testing on Sep 11, 2026 — though the backport volume is expected to fall as the two codebases diverge. Artifacts built with 3.9 cannot be consumed by 3.3 projects, so library authors should treat the move as a publishing decision.
Version
Scala 3.2
Scala 3
EOL
Java 8+
Sep 5, 2022
Match-type and safe-initialization improvements; the last pre-LTS Next minor.
  • Match-type reduction and error-message improvements; refinements to the experimental safe-initialization checker.
  • The last Next minor before Scala 3.3 became the first LTS; last patch 3.2.2 (Jan 30, 2023).
Version
Scala 3.1
Scala 3
EOL
Java 8+
Oct 18, 2021
The first minor after the 3.0 rewrite — performance, stability, and toolchain hardening.
  • Consolidation after the big rewrite: compiler performance, diagnostics, and binary-compatibility guarantees within the 3.x line.
  • Last patch 3.1.3 (Jun 21, 2022).
Version
Scala 3.0
Scala 3
EOL
Java 8+
May 14, 2021
The “Dotty” rewrite — a ground-up redesign of the compiler and type system. Optional-braces syntax, given/using, enums, union & intersection types, the TASTy format, and a new metaprogramming model.
  • The result of the multi-year Dotty research project (Odersky / EPFL, started 2012) built on the DOT calculus — a sounder type-theoretic foundation for the whole language.
  • New syntax and features — significant-indentation / optional braces; given/using replacing implicit; enum; union (A | B) and intersection (A & B) types; opaque type aliases; extension methods; trait parameters; export clauses; and a new principled macro / metaprogramming system.
  • TASTy (Typed Abstract Syntax Trees) — the serialized typed-AST format that gives Scala 3 strong interop with Scala 2.13 and underpins separate compilation.
  • Source-incompatible with Scala 2 in places, but designed for incremental migration — far less painful than Python 2→3 thanks to TASTy and 2.13↔3 interop. Last patch 3.0.2 (Sep 1, 2021).

The Scala 2 → Scala 3 boundary. Above this line: the Scala 3 line — the 2021 Dotty rewrite and its LTS / Next split. Below: the Scala 2 line, which is not a dead branch — 2.13 stays maintained and widely deployed, and TASTy lets the two interoperate. The full story is in the prose history below.

Version
Scala 2.13
Scala 2
Maintenance
Java 8+
Jun 11, 2019
The current, actively maintained Scala 2 line — still widely deployed. A major standard-library collections redesign; literal types; faster compiler. Latest 2.13.18 (Nov 2025).
  • Standard-library collections redesign — a simpler, more consistent, better-performing collections hierarchy; the main source of migration work from 2.12.
  • Literal-based singleton types; by-name implicits; scala.util.Using for resource management; a faster compiler.
  • The Scala 3 standard library was compiled with 2.13 until Scala 3.8. Still receives maintenance releases — the latest, 2.13.18 (Nov 2025), runs on JDK 8 through JDK 26. JDK 27 reached general availability on Sep 15, 2026; no Scala line claims support for it yet.
Version
Scala 2.12
Scala 2
Maintenance
Java 8
Nov 3, 2016
Recompiled to use Java 8's native lambdas and default methods — which is why it requires Java 8. Long the default Scala for Apache Spark; still maintained (latest 2.12.21, Dec 2025).
  • Re-architected backend — the compiler emits Java-8 lambdas and uses default methods for traits, which is why 2.12 requires Java 8 (it dropped Java 6/7).
  • Long the default Scala version for Apache Spark and much of the big-data ecosystem; still receives occasional maintenance releases (latest 2.12.21, Dec 11, 2025).
Version
Scala 2.11
Scala 2
EOL
Java 6–8
Apr 21, 2014
Modularized the standard library and focused on compiler performance and stability. End-of-line for the 2.11 series (final 2.11.12, 2017).
  • Split parts of the standard library into separate modules; large compiler performance and memory improvements.
  • The last widely deployed pre-2.12 line; final release 2.11.12 (Nov 9, 2017). Predates the Java-8-lambda backend, so it still ran on Java 6/7.
Version
1.0 – 2.10
Early
EOL
long EOL
2003 – 2013
The pre-2.11 lineage: the landmark 2.8 collections redesign, the early 2.x line, Scala 2.0, and the 2003 first release. Included for historical completeness.
  • Scala 2.10 (Jan 2013) — string interpolation, value classes, implicit classes, Futures & Promises, the (experimental) macro system, and Try. The final 2.10.7 shipped in 2017.
  • Scala 2.9 (2011) — introduced parallel collections.
  • Scala 2.8 (Jul 2010) — the landmark collections-library redesign, named & default arguments, package objects, and @tailrec. The release that defined modern Scala's standard library.
  • Scala 2.0 (2006) — a from-scratch compiler rewrite that matured Scala on the JVM.
  • Scala 1.0 (2003–2004) — Martin Odersky's first public release of Scala from EPFL, after the language's 2001 internal start.

The full per-version download archive, back to the earliest releases, is at scala-lang.org/download/all.html.

Click any row to expand. Each row has a stable id for sharing — e.g. /software/scala/versions/#scala-3-9, #scala-3-3, #scala-2-13. Live release and support state is documented at scala-lang.org/download/all.html and the Scala development guarantees.

The EPFL origin — Odersky, Pizza, and generic Java

Scala was created by Martin Odersky at the École Polytechnique Fédérale de Lausanne (EPFL) in Switzerland. Odersky's path to Scala ran straight through Java itself: in the late 1990s he co-designed Pizza and then GJ (Generic Java), and his javac-successor compiler became the reference Java compiler that shipped Java's generics in 2004. Scala was his answer to the question of what a language could look like if object-oriented and functional programming were unified from the ground up rather than bolted together.

Design work began in 2001; the first public release followed in 2003–2004. Scala kept full interoperability with Java and the JVM — it compiles to JVM bytecode and calls Java libraries directly — which is the practical reason it found a foothold in JVM shops that wanted functional programming without leaving their existing stacks.

The 2.8 collections redesign and the 2.x maturation

The defining release of early Scala was Scala 2.8 (2010), which rebuilt the collections library into the uniform, high-level hierarchy Scala developers still use — a single design with consistent operations across mutable, immutable, parallel, and lazy collections. The 2.x line that followed steadily added the features that made Scala productive at scale: string interpolation, value and implicit classes, futures and promises, and the (initially experimental) macro system in 2.10; then the modularized standard library of 2.11, the Java-8-lambda backend of 2.12, and the second collections redesign of 2.13. By the end of the 2.x line, Scala was a mature, widely deployed JVM language — and 2.13 remains maintained today.

Typesafe / Lightbend and the reactive ecosystem

In 2011, Odersky co-founded Typesafe (with Jonas Bonér and others) to provide commercial backing, training, and tooling for Scala and its ecosystem. The company anchored the “reactive” stack that defined enterprise Scala for a decade — the Akka actor toolkit (Bonér), the Play web framework, and the Slick database library. Typesafe renamed itself Lightbend in 2016 as its focus broadened to reactive microservices and streaming, and renamed again to Akka in November 2024, unifying the company behind its best-known product (Lightbend, Inc. now does business as Akka). The corporate stewardship gave Scala a stability and an enterprise on-ramp that few research-born languages get. That chapter has now closed. In August 2026 Akka came off Scala's maintainer and governance rosters, and responsibility for Scala 2 compiler and standard-library maintenance passed to the Scala team at VirtusLab — ending roughly fifteen years in which the Typesafe/Lightbend/Akka lineage was Scala's commercial anchor. The Akka libraries themselves carry on; it is the stewardship of the language that moved.

Scala in big data — Spark and the data-engineering footprint

Scala's single largest production footprint is in data engineering. Apache Spark — the dominant large-scale data-processing engine, created by Matei Zaharia at Berkeley's AMPLab — is written in Scala, and its native API is Scala-first. Apache Kafka was originally written in Scala, and Apache Flink and much of the surrounding streaming ecosystem are JVM/Scala projects. This is why “Scala” appears so often on data-engineering and JVM-backend job postings: a large share of the world's batch and streaming data pipelines runs on Scala-built infrastructure. Spark was long pinned to Scala 2.12; Spark 4 is pre-built with Scala 2.13 and dropped Scala 2.12 support outright, which has pulled a large slice of the data-engineering world onto 2.13 and JDK 17.

The Scala Center and open governance

In March 2016 the Scala Center was launched at EPFL as a not-for-profit foundation for Scala, stewarding the language's open-source development, education, and community process — including the Scala Improvement Process (SIP), the committee-reviewed route by which language changes are proposed and ratified. No single company owns Scala: the code belongs to EPFL, and development is a cooperative of three groups — the Scala Center, Odersky's LAMP lab at EPFL, and the Scala team at VirtusLab — with a weekly, cross-organization Scala Core Team as the main decision body. That list was four until August 2026, when Akka was dropped from it; VirtusLab now handles Scala 2 maintenance as well as Scala 3 infrastructure and tooling, and is the single vendor scala-lang.org names under commercial support for Scala. The release machinery, the LTS/Next policy, and the migration tooling all run through this open process.

Dotty becomes Scala 3 (2021)

Scala 3 began as Dotty, a research compiler Odersky and his EPFL group started around 2012 to rebuild Scala on a sounder type-theoretic foundation — the DOT calculus (Dependent Object Types). Over nearly a decade Dotty turned into a complete redesign: significant-indentation syntax, given/using in place of implicits, first-class enums, union and intersection types, opaque type aliases, a principled macro system, and the TASTy typed-AST format.

Dotty shipped as Scala 3.0 in May 2021. Crucially, TASTy and the shared 2.13 standard library gave Scala 3 real interoperability with Scala 2.13 — a Scala 3 project can depend on Scala 2.13 libraries — so the 2-to-3 transition has been incremental rather than the ecosystem-splitting cutover that Python's 2→3 became. Both lines remain in production years later, which is exactly the situation a version reference exists to disambiguate.

The LTS / Next model and the JDK-17 floor

Starting with Scala 3.3 (announced in 2022), Scala 3 development splits into two lines: Scala Next, the rolling series where new language features land, and Scala LTS, a long-term-support branch that gets only bug fixes and quality-of-life changes. The label misleads: Next is the line Scala recommends by default, and LTS exists chiefly so that library authors publishing to the wider ecosystem get extended support and source-compatibility guarantees. An LTS ships roughly every two years and is supported for at least three. Scala 3.3 held the role from May 2023 until Scala 3.9 — feature-frozen to match Scala 3.8, and requiring JDK 17 — was released on Sep 3, 2026 as the second LTS. The handover took a while to become official: release candidates ran from June 2026 through 3.9.0-RC6 on Aug 19, the stable 3.9.0 artifacts reached Maven Central on Aug 26, and the announcement followed eight days later — because Scala treats publishing the JARs as a step before the release rather than the release itself, leaving room to withdraw a build if a showstopper turns up. The 3.3 LTS stays actively maintained for a year past 3.9.0 to give the ecosystem time to migrate, and the rolling Next line now advances to Scala 3.10, whose first release candidate was published to Maven Central on Aug 27 and announced for public testing on Sep 3, 2026.

The other recent inflection is the minimum JVM. Scala had long supported JDK 8, but sun.misc.Unsafe — used in Scala's lazy val implementation — is being removed from future JDKs (JEP 471), and supporting JDK 26+ required replacing it. So from Scala 3.8 the Next line — and the 3.9 LTS behind it — requires JDK 17, while the 3.3 LTS line continues to produce JDK 8-compatible bytecode for teams that still need it. Scala 3.9 also ships an experimental tool, Sloth, that rewrites the old Unsafe-based lazy-val bytecode inside dependencies compiled by Scala 3.0–3.7, since a single stale dependency is enough to reintroduce the problem. The same JVM-version-floor pressure runs through the Java and Kotlin ecosystems — the three JVM languages move in step.

People who shaped Scala

Creator and language design: Martin Odersky (creator, EPFL; Pizza, GJ, and the original javac generics work that led to Scala), and the EPFL / Scala Center compiler team behind the Dotty / Scala 3 redesign (Guillaume Martres and the LAMP lab among them).

Ecosystem and tooling: Jonas Bonér (Akka, co-founder of Typesafe/Lightbend); Matei Zaharia (Apache Spark, which carried Scala into big data); Li Haoyi (a large independent tooling ecosystem — Mill, Ammonite, uPickle, and more); and VirtusLab's Scala team, which since August 2026 carries both the Scala 3 release and tooling work (Wojciech Mazur, the release officer) and Scala 2 maintenance (Lukas Rytz, the Scala 2 representative). Release engineering, the SIP process, and the LTS policy run through the weekly Scala Core Team and the Scala Center's open governance.

Find your version — in the terminal

The browser cannot detect what version of Scala is installed on your machine, or which version a given project pins. Run one of these in your terminal to see your real setup.

What's installed?

Print the active Scala and compiler versions. (The scala runner and the scalac compiler can differ.)

$ scala -version                       # the Scala runner / CLI version
$ scalac -version                      # the compiler version
$ java -version                        # the JVM Scala runs on (8, 17, 21, …)

Which Scala does this project use?

The project's build file is the source of truth — not whatever scala is on your PATH.

# sbt — build.sbt
scalaVersion := "3.9.0"

# sbt — print the resolved version
$ sbt "print scalaVersion"

# Scala CLI / single-file — a using directive
//> using scala 3.9.0

# Mill — build.mill
def scalaVersion = "3.9.0"

Install or pin a version with Coursier

cs (Coursier) is the recommended installer; it can launch any specific Scala without making it the default.

# Install the Scala toolchain (newest stable)
$ cs install scala scalac

# Launch a specific line without installing it globally
$ cs launch scala:3.9.0        # the current LTS — and the newest Scala 3
$ cs launch scala:3.3.8        # the previous LTS, still maintained

# macOS (Homebrew) installs the newest stable
$ brew install scala

Sources: scala-lang.org/download/all.html; github.com/scala/scala releases (2.x); github.com/scala/scala3 releases (3.x); scala-lang.org blog (per-release announcements); Scala 2-to-3 migration guide; JDK compatibility overview. Last updated September 2026.

Mungomash LLC · More software pages