Scala 3.9.0 release thread

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 into type 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 AnyRef is disallowed again #26210.

Tooling and developer experience

  • Scaladoc snippet testing — snippets can use compiler-style // error and // warn expectations in compile+test mode (via -snippet-compiler / snippetCompiler config). Example: some-doc.md=compile+test #25713

  • No automatic Main-Class detection — when compiling directly to a JAR, the compiler no longer scans for and auto-selects a main class for MANIFEST.MF. Use -Xmain-class explicitly if you need a Main-Class entry. Build tools (sbt, Scala CLI, etc.) typically set this themselves; this mainly affects direct -d out.jar workflows and incremental JAR compilation edge cases #25215

  • Automatic-Module-Name restored 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!

4 Likes

Will the new Scala cli ships with a kind of GitHub - colbymchenry/codegraph: Pre-indexed code knowledge graph, auto syncs on code changes, for Claude Code, Codex, Gemini, Cursor, OpenCode, AntiGravity, Kiro, and Hermes Agent — fewer tokens, fewer tool calls, 100% local · GitHub

I’d like to ask: for libraries like Akka, Pekko, Play, Cats, Kyo, and Zio—which currently support only Java 17—if a new LTS version is released, should the Scala 3 version be published using the 3.9.0 series or the 3.3.x series?