Scala 3.10.0, the First Scala Next Release, Makes A with B an Error and Stabilizes SIP-67; Maintainers Still Recommend Scala 3.9 LTS for Libraries
The Scala project announced 3.10.0 on 12 October 2026, removing legacy syntax, stabilizing SIP-67 and previewing three SIPs; its blog and GitHub notes differ on the strict-equality SIP.
Overview
Scala 3.10.0 was announced on 12 October 2026 as “the first release of the new Scala Next series”, according to the Scala project’s release post by Wojciech Mazur of VirtusLab. The post says the release stabilizes SIP-67, moves three SIPs into preview and starts dropping legacy language features that have been deprecated for several minor releases. The same post says that for library authors who want the longest support window, Scala 3.9 LTS remains the recommended version to build against.
What Changed
Removed legacy features. The release post says with as a type operator has warned since Scala 3.4 and is an error in 3.10, and that -source:3.4-migration -rewrite rewrites A with B to A & B. It also lists these removals and tightenings, each described in the release post:
- Top-level definitions that use
thisare now rejected. - The
runtime.RichIntclass and the otherRich*implicit classes are gone; operations such asuntil,to,absandmaxbecome extension methods on the primitive types’ companion objects. - The
a -> bpair syntax becomes an inline extension method, andPredef.ArrowAssocis deprecated and no longer an implicit conversion. - Implicit search no longer finds instances in a private companion object that are not accessible at the call site; the post says Scala 3.9 already reported this under
-deprecation.
The GitHub release notes for 3.10.0 list the same changes under “Breaking changes”, including “Make with type operator an error”, “Forbid this in top-level definitions” and “Make -> sugar an inline method”.
Compatibility. According to the release post, binary compatibility is preserved, so libraries compiled with earlier Scala 3 versions keep working, including those that used features now removed. Source that still uses the removed features must be updated to compile with 3.10. The post also says cross-compilation between Scala 2 and 3.10 is no longer supported, and that cross-compiled libraries are expected to remain on Scala 3.9 LTS indefinitely. For macros, the post says stronger constant folding during inlining makes compilation fail for macros that generate ill-typed code, and tells ZIO ecosystem users to upgrade libraries before upgrading the compiler, naming ZIO 2.1.26 among the fixed versions. It recommends MiMa 1.2.1 or later before checking a 3.10 artifact.
Recursion limit. The compiler no longer catches StackOverflowError to stop runaway type checking. Per the release post, recursive compiler work now spends “fuel”, controlled by -Xmax-fuel with a default of 550, and compilation stops with Recursion limit exceeded when the fuel runs out. The post says raising the limit usually also requires a larger stack via -Xss.
Stable, Preview and Experimental Features
The release post says SIP-67, which lets pattern matching under strictEquality work without a CanEqual instance, was experimental since Scala 3.8 and is now stable. It adds that strict equality itself remains opt-in.
The three features moved behind the -preview flag, according to the same post, are:
- SIP-61,
@unroll, which keeps older method signatures as forwarders so that adding a defaulted parameter does not break already-compiled clients. The post states that the compiler does not check that@unrollis placed at the right version boundary. - SIP-75, relaxed lambda syntax, which allows a lambda on the same line after a
:application. - SIP-68, referenceable package objects, which lets a package object such as
lib.jsonbe used as a value directly.
Experimental features described in the post include dedented string literals (SIP-72), enabled with -language:experimental.dedentedStringLiterals, and inline and specialized traits. Other additions named in the post are pattern matching on Java records, the \s space escape, REPL support for //> using dep directives, Scala CLI 1.17.1, and .deb and .rpm packages of the distribution.
Where the Two Sources Differ
The Scala blog and the GitHub release notes do not describe the strict-equality change identically. The blog post names it SIP-67 and says strict equality remains opt-in. The GitHub release notes list “SIP 71: strictEqualityPatternMatching is now enabled by default default” under their stabilized features. This article does not reconcile the two; the blog post carries the fuller description, and the GitHub entry is a one-line title.
The GitHub notes also list an experimental “Pre-SIP: Modular AGentic Interface Code: Spec strings” entry that the blog post does not mention, so that item rests on the GitHub notes alone.
What Comes Next
The post says the release branch for Scala 3.10.1 has already been cut, with its first release candidate to follow shortly, and that one further patch, 3.10.2, is planned a few weeks later. It says development then moves to Scala 3.11, expected around March or April 2027, and that Scala 3.9 LTS continues as the long-term publishing baseline.
Separately, a post on the same blog dated Wednesday 7 October 2026 announced that VirtusLab has assumed responsibility for maintenance of Scala 2. It says VirtusLab will maintain Scala 2.12 and 2.13 as long as necessary, and links release-planning threads for Scala 2.12.22 and 2.13.19.
What We Don’t Know
Neither the release post nor the GitHub notes report adoption figures, benchmark results or how many libraries are affected by the removals. The dates and plans above are the Scala team’s own statements as of 12 October 2026; the planned 3.10.1, 3.10.2 and 3.11 timing could change.