# Scala 3.9.0-RC1 - Product: Scala (https://whatsnew.fyi/product/scala) - Vendor: Scala Center - Date: 2026-06-10 - Version: 3.9.0-RC1 - Original notes: https://github.com/scala/scala3/releases/tag/3.9.0-RC1 - Permalink: https://whatsnew.fyi/product/scala/releases/3.9.0-rc1 - Labels: Pre-release What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **added** — Support expectations in snippets in Scaladoc - **changed** — Make `into` type and modifier stable - **changed** — Unify annotation handling for thread-safe and -unsafe lazy vals - **changed** — Emit acceptable Java generic signatures for higher-kinded types - **changed** — Unwrap refined types for Java generic signatures - **changed** — Emit nested module classes as static inner classes - **fixed** — Use `IndexOutOfBoundsException` constructor with `Int` - **fixed** — Fix Java signatures for arrays of value classes - **fixed** — Fix Java generic signatures for context functions - **fixed** — Handle HKT bounds in Java generic signatures - **fixed** — Lambda-owned param ref in constructor incurs no field - **fixed** — Fix Scoverage and separation checking failures - **fixed** — Scoverage: do not instrument methods that have too large bodies - **fixed** — Scoverage & CC interaction: exempt CC nested symbols from @experimental check - **fixed** — Fix Coverage + Experimental nested match cases interaction - **fixed** — Scoverage: fix broken warnings related to tail recursion and infinite loop detection - **fixed** — Scoverage: correctly detect curried constructor applications - **fixed** — Scoverage: correctly lift wildcard and singleton types - **removed** — Remove automatic collection of entry points - **fixed** — Restore `Automatic-Module-Name` in standard library's manifest #### Highlights of the release - [Long Term Support](https://www.scala-lang.org/blog/2022/08/17/long-term-compatibility-plans.html) - Make `into` type and modifier stable [#26184](https://github.com/scala/scala3/pull/26184) - Remove automatic collection of entry points [#25215](https://github.com/scala/scala3/pull/25215) - Scaladoc: support expectations in snippets [#25713](https://github.com/scala/scala3/pull/25713) - Restore `Automatic-Module-Name` in standard library's manifest [#26218](https://github.com/scala/scala3/pull/26218) #### Other changes and fixes ##### Annotations - Unify annotation handling for thread-safe & -unsafe lazy vals [#24907](https://github.com/scala/scala3/pull/24907) ##### Backend - Use `IndexOutOfBoundsException` constructor with `Int` [#24764](https://github.com/scala/scala3/pull/24764) - Emit acceptable Java generic signatures for HKTs [#25540](https://github.com/scala/scala3/pull/25540) - Unwrap refined types for Java generic signatures [#25626](https://github.com/scala/scala3/pull/25626) - Fix Java signatures for arrays of value classes [#25631](https://github.com/scala/scala3/pull/25631) - Fix Java generic signatures for context functions [#25632](https://github.com/scala/scala3/pull/25632) - Handle HKT bounds in Java generic signatures [#25744](https://github.com/scala/scala3/pull/25744) - Emit nested module classes as static inner classes [#26137](https://github.com/scala/scala3/pull/26137) ##### Constructors - Lambda-owned param ref in ctor incurs no field [#23286](https://github.com/scala/scala3/pull/23286) ##### Coverage - Fix #25624: Scoverage and separation checking failures [#25625](https://github.com/scala/scala3/pull/25625) - Scoverage: do not instrument methods that have too large bodies [#25629](https://github.com/scala/scala3/pull/25629) - Scoverage & CC interaction: exempt CC nested symbols from @experimental check [#25687](https://github.com/scala/scala3/pull/25687) - Coverage + Experimental nested match cases interaction fix [#25913](https://github.com/scala/scala3/pull/25913) - Scoverage: fix broken warnings related to tail recursion and infinite loop detection [#25941](https://github.com/scala/scala3/pull/25941) - Scoverage: correctly detect curried constructor applications [#26048](https://github.com/scala/scala3/pull/26048) - Scoverage: correctly lift wildcard and singleton types [#26049](https://github.com/scala/scala3/pull/26049) - Scoverage: refrain from lifting closures for capture calculus compatibility [#26067](https://github.com/scala/scala3/pull/26067) - Scoverage: fix lifted type computation for parameterless methods [#26069](https://github.com/scala/scala3/pull/26069) - Scoverage: Fix coverage parameterless select qualifier casts [#26087](https://github.com/scala/scala3/pull/26087) ##### Documentation - Sys, concurrent, runtime (1): fill in missing @param, @tparam, and @return tags in Scaladoc comments [#25371](https://github.com/scala/scala3/pull/25371) - Collection mutable (2): fill in missing @param, @tparam, and @return tags in Scaladoc comments [#25372](https://github.com/scala/scala3/pull/25372) - Collection immutable (3): fill in missing @param, @tparam, and @return tags in Scaladoc comments [#25373](https://github.com/scala/scala3/pull/25373) - Collection core (4): fill in missing @param, @tparam, and @return tags in Scaladoc comments [#25374](https://github.com/scala/scala3/pull/25374) - Numeric types (5): fill in missing @param, @tparam, and @return tags in Scaladoc comments [#25375](https://github.com/scala/scala3/pull/25375) - Array, IArray, Predef, Option (6): fill in missing @param, @tparam, and @return tags in Scaladoc comments [#25376](https://github.com/scala/scala3/pull/25376) - Math (7): fill in missing @param, @tparam, and @return tags in Scaladoc comments [#25377](https://github.com/scala/scala3/pull/25377) - Quoted, compiletime (8): fill in missing @param, @tparam, and @return tags in _[Truncated at 4000 characters — full notes: https://github.com/scala/scala3/releases/tag/3.9.0-RC1]_