2003 – 2026

Scala Versions

Every public release of Scala — from Martin Odersky's first release at EPFL through Scala 3.10, the current Next line, and the Scala 3.9 LTS (with 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, and only the latest Next minor is maintained
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. One new wrinkle: Scala 3.10 (October 2026) is the first release that stops supporting cross-compilation of one codebase for both Scala 2 and Scala 3 — upstream expects libraries that still cross-build to stay on the 3.9 LTS — while binary compatibility with artifacts built by earlier Scala 3 releases is preserved. 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. A new LTS comes no sooner than two years after the previous one, and each keeps receiving patches for at least a year past its successor — 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). Unlike 3.3, it requires JDK 17. For five weeks it was the newest Scala 3 as well; then Scala 3.10.0 shipped on Oct 12, 2026 as the first release of the new Next series (release announcement), and the two lines are distinct again: 3.10 is the default for most projects, 3.9 is the LTS to publish libraries against. Scala 3.3 does not go away: upstream will keep it actively maintained for one year past 3.9.0, and the first patch since the handover, 3.3.9, shipped on Oct 28, 2026, backporting most of the 3.9.0 bug fixes (release announcement). That announcement's support table puts end of service for 3.3.x at September 2027 and for 3.9.x at September 2029 or later. 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. Upstream's stated plan for the Next line, per the 3.10 announcement: a 3.10.1 patch, then a 3.10.2 a few weeks after it, and Scala 3.11 around March or April 2027. The first of those is in testing: 3.10.1-RC1 was announced on Oct 25, 2026, and the release manager put the stable release no earlier than Nov 11, 2026. Scala re-releases an RC as stable only once it has gone at least a week without regressions (see the development guarantees).

Scala version table

Version
Scala 3.10
Scala 3
Next
Java 17+
Oct 12, 2026
The first release of the new Next series after the 3.9 LTS. Strict-equality pattern matching (SIP-67) stabilized; @unroll, relaxed lambda syntax and referenceable package objects enter preview; long-deprecated Scala 2-era syntax such as A with B becomes an error; the first Scala release listed for JDK 27.
  • The Next line reopens — after five weeks in which 3.9 was both the LTS and the newest Scala 3, 3.10 is the rolling feature line again and 3.9 stays the LTS to publish libraries against. Binary compatibility is preserved (libraries built with earlier Scala 3 releases keep working), but source that still uses the removed legacy features must be updated, and cross-compiling one codebase for Scala 2 and 3.10 is no longer supported — upstream expects cross-built libraries to stay on the 3.9 LTS. Macros and compiler plugins are the most affected; MiMa 1.2.1 or later is needed to check 3.10 artifacts.
  • SIP-67 strict-equality pattern matching is stable — experimental since 3.8; matching on enums and ADTs under strictEquality no longer demands a CanEqual instance, while == stays strict (and strictEquality itself remains opt-in). Three SIPs move to preview behind -preview: SIP-61 @unroll default arguments (binary-compatible forwarders when a method grows parameters), SIP-75 relaxed lambda syntax (a same-line lambda after :), and SIP-68 referenceable package objects. New experimental work: SIP-72 dedented ''' string literals and a pre-SIP for inline / specialized traits, a Scala 3 answer to Scala 2's @specialized.
  • Legacy removals, nearly five years after 3.0 — A with B as a type operator is an error (it had warned since 3.4; -source:3.4-migration -rewrite converts it to A & B); this in a top-level definition is rejected; the Rich* primitive wrappers are replaced by extension methods and -> becomes an inline extension method; and an implicit in an inaccessible companion object, which 3.9 warned about, is no longer found. Java generic signatures also become more precise (boxed type arguments), which MiMa may report on republish.
  • Compiler and REPL — recursion is now fuel-limited: deep types fail with Recursion limit exceeded and a list of the recurring operations instead of a StackOverflowError (-Xmax-fuel, default 550). Java records work as extractor patterns; \s is a space escape in string literals; the REPL accepts //> using dep directives inline and gains :save / :replay, with -deprecation and -feature on by default.
  • Tooling and distribution — ships with Scala CLI 1.17.1, whose lts version tag now resolves to the 3.9 LTS series (3.3.lts stays on 3.3); Scala is also distributed as .deb and .rpm packages alongside the existing archives; bytecode generation uses stock ASM instead of the scala-asm fork. Requires JDK 17+, and the JDK compatibility matrix lists 3.10.0 as the minimum Scala for JDK 27 — the first Scala line to claim it. Upstream's plan, per the announcement: a 3.10.1 patch, 3.10.2 a few weeks later, and Scala 3.11 around March or April 2027. 3.10.1-RC1, announced Oct 25, 2026, bumps Scala CLI to 1.18.0 and adds SIP-77 method-block end markers as an experimental feature; the release manager put the stable no earlier than Nov 11, 2026. See the 3.10 release notes.
Version
Scala 3.9 (LTS)
Scala 3
LTS
Java 17+
Sep 3, 2026
The new long-term-support line, succeeding the 3.3 LTS; the Next line moved on to 3.10 in October 2026. 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 warns under -deprecation, and Scala 3.10 stops finding it. The fix usually belongs to the library, not the consumer, so compile with -deprecation before moving on. 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 — 3.10 began moving it onto Scala 3 features such as inline and extension methods.
  • Better Fors (SIP-62) stabilized — for-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, stabilized in 3.10), 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.9, Oct 28, 2026).
  • The first Scala 3 LTS under the LTS/Next model announced in 2022. A new LTS comes no sooner than two years after the last, and each is 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 (end of service September 2027, per the 3.3.9 announcement). The first patch under that commitment, 3.3.9 (Oct 28, 2026), backports most of the 3.9.0 bug fixes — more precise Java generic signatures, exhaustiveness checking for sealed abstract Java classes, a warning on dubious negative-literal syntax such as - 42, and a Scaladoc fix for JDK 25 — and the next 3.3 patch will take fixes up to the last 3.10.x, though the backport volume is expected to fall as the two codebases diverge. See the 3.3.9 release notes. 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; the first Scala release the compatibility matrix lists for it is Scala 3.10.0 (Oct 12, 2026) — no Scala 2 line, and neither Scala 3 LTS, claims it yet. A 2.13.19 milestone build (2.13.19-M1) reached Maven Central on Oct 17, 2026, unannounced.
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-10, #scala-3-9, #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. A new LTS comes no sooner than two years after the previous one, and each 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 advanced to Scala 3.10: its first release candidate was published to Maven Central on Aug 27 and announced for public testing on Sep 3, 2026, and the stable 3.10.0 followed on Oct 12, 2026 (artifacts on Maven Central from Oct 5, the same publish-then-announce gap as 3.9) — the first release, nearly five years after Scala 3.0, to start removing Scala 2-era legacy syntax rather than merely deprecating it.

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. At the other end, the JDK compatibility matrix lists Scala 3.10.0 as the first release for JDK 27; neither LTS line nor Scala 2 claims it yet. 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.10.0"

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

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

# Mill — build.mill
def scalaVersion = "3.10.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.10.0       # the current Next line
$ cs launch scala:3.9.0        # the current LTS
$ cs launch scala:3.3.9        # 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 October 2026.

Mungomash LLC · More software pages