2003 – 2026

Scala Versions

Every public release of Scala — from Martin Odersky's first release at EPFL through the current Scala 3.8 Next line and the Scala 3.3 LTS — 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; newest features land here first
LTS — the production-recommended Scala 3 line; bug fixes only, supported for years
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; Scala 3.8 and the coming 3.9 LTS require 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?

For production, pick LTS. For the newest features, pick Next.

Since Scala 3.3, the Scala 3 line splits in two. LTS (currently 3.3.x) is the production-recommended branch — bug fixes and quality-of-life only, no new language features, supported for years, and still JDK 8-compatible. Next (currently 3.8.x) is the rolling line where new features land first; only the latest Next minor is maintained, and from Scala 3.8 it requires JDK 17. An LTS ships roughly every two years and is supported for at least three. The next LTS, Scala 3.9, is feature-frozen to match Scala 3.8 (see the development guarantees).

Scala version table

Version
Scala 3.8
Scala 3
Next
Java 17+
Jan 22, 2026
Current Scala 3 Next line. The standard library is now compiled by Scala 3 itself; Better Fors and runtimeChecked stabilized; the REPL becomes a separate artifact; JDK 17 becomes the minimum and JDK 26 bytecode is supported.
  • 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 :.
  • The language is in feature freeze ahead of the Scala 3.9 LTS. Use 3.8.1 or later (3.8.0 carried a runtime regression). Latest patch as of this writing: Scala 3.8.4 (Jun 5, 2026). See the 3.8 release notes.
Version
Scala 3.7
Scala 3
EOL
Java 8+
May 7, 2025
Named tuples (preview) and the Better Fors desugaring in preview, on the road to their stabilization in 3.8.
  • Named tuples (preview) — (name = "Ann", age = 30), with field access by name; the headline 3.7 addition.
  • The Better Fors desugaring shipped in preview here before becoming the default in 3.8.
  • 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 14, 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 23, 2023
The current long-term-support line — the production-recommended Scala 3. Bug fixes and quality-of-life only; stays JDK 8-compatible. Patched regularly (latest 3.3.8, Jun 10, 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.
  • Receives backported bug fixes from the Next series but no new language features — target this line for production unless you specifically need a Next-only feature.
  • Stays JDK 8-compatible (unlike Next 3.8+, which requires JDK 17). Scala 3.3.8 adds a -Yfuture-lazy-vals flag (needs JDK 9+) to ease the eventual lazy-vals migration.
  • The 3.3 LTS will be supported for at least a year after the Scala 3.9 LTS ships, giving the ecosystem time to migrate.
Version
Scala 3.2
Scala 3
EOL
Java 8+
Aug 31, 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 13, 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 7, 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. Runs on JDK 8 through the current JDK; still receives maintenance releases (latest 2.13.18, Nov 2025).
Version
Scala 2.12
Scala 2
Maintenance
Java 8
Oct 28, 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 8, 2025).
Version
Scala 2.11
Scala 2
EOL
Java 6–8
Apr 16, 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-8, #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. The corporate stewardship gave Scala a stability and an enterprise on-ramp that few research-born languages get.

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, with Spark long pinned to Scala 2.12 and now moving to 2.13 / JDK 17 in Spark 4.

The Scala Center and open governance

In 2016 the Scala Center was established at EPFL as a non-profit to steward the language's open-source development, education, and community process — the home of the Scala Improvement Process (SIP) through which language changes are proposed and ratified. Governance of the language thus sits with an academic non-profit rather than a single company, with major ecosystem players (Lightbend, VirtusLab, and others) contributing engineering. The release machinery, the LTS/Next policy, and the migration tooling are 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. An LTS ships roughly every two years and is supported for at least three; Scala 3.3 is the current LTS, and Scala 3.9 — feature-frozen to match Scala 3.8 — is the next.

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 coming 3.9 LTS) requires JDK 17, while the 3.3 LTS line continues to produce JDK 8-compatible bytecode for teams that still need it. 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 now drives much of the Scala 3 release and tooling work (Wojciech Mazur and colleagues). Release engineering, the SIP process, and the LTS policy run through 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.3.8"

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

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

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

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.3.8        # the current LTS
$ cs launch scala:3.8.1        # the current Next

# 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 June 2026.

Mungomash LLC · More software pages

Shipped 2026-06-24 by Mimas — initial build; Scala 3.8 (Next, JDK 17) and Scala 3.3.8 (LTS) current, support states and ship dates verified against scala-lang.org, github.com/scala, and endoflife.date.