Scala 3.9.0-RC1 is now available for public testing!
Scala 3.9 is the next Long Term Support (LTS) release line, succeeding Scala 3.3 LTS.
Highlights of the release
-
Long Term Support — Scala 3.9 becomes the new LTS line
-
Make
intotype and modifier stable #26184 (SIP-71, previously a preview feature in 3.8)
What’s new since 3.8
Language and compiler behavior
-
Improved Java generic signatures — a large set of backend and transform fixes improves emitted Java signatures for HKTs, context functions, value classes, trait fields, and related cases. This improves Java interop and tooling that reads generic signatures.
-
Better diagnostics — actionable messages for missing members #23572, improved multiline argument error spans, and assorted parser/lint warnings (e.g. dubious negative literals, trailing colons on empty templates, dollars in definition names unless backticked).
-
Implicit search — equivalent implicit candidates are now treated as divergent #25910; implicit conversion to
AnyRefis disallowed again #26210.
Tooling and developer experience
-
Scaladoc snippet testing — snippets can use compiler-style
// errorand// warnexpectations incompile+testmode (via-snippet-compiler/snippetCompilerconfig). Example:some-doc.md=compile+test#25713 -
No automatic
Main-Classdetection — when compiling directly to a JAR, the compiler no longer scans for and auto-selects a main class forMANIFEST.MF. Use-Xmain-classexplicitly if you need aMain-Classentry. Build tools (sbt, Scala CLI, etc.) typically set this themselves; this mainly affects direct-d out.jarworkflows and incremental JAR compilation edge cases #25215 -
Automatic-Module-Namerestored in the Scala 3 standard library JAR manifest — fixes JPMS module naming regressions from the 3.8 stdlib migration #26218 -
Scoverage — many fixes for interaction with capture checking, large methods, curried constructors, and related instrumentation issues.
We encourage trying out 3.9.0-RC1 and reporting found issues in the Scala 3 issue tracker.
Release schedule
- Stable 3.9.0 will ship no earlier than six weeks after RC1 — approximately July 22. We may delay further if stability requires it.
Once 3.9.0 is stable:
-
Scala 3.10.0 is the next Scala Next release —
main(and nightly releases) already targets 3.10.0. -
3.9.x patch releases continue on the 3.9 release branch, with selected fixes backported from Scala Next (3.10 and later) under the LTS backport policy.
See the full list off changes in the 3.9.0-RC1 changelog.
Please share feedback here or on GitHub issues. Happy testing!