# Scala 3.9.0 — 3.9.0 LTS - Product: Scala (https://whatsnew.fyi/product/scala) - Vendor: Scala Center - Date: 2026-09-03 - Version: 3.9.0 - Original notes: https://github.com/scala/scala3/releases/tag/3.9.0 - Permalink: https://whatsnew.fyi/product/scala/releases/3.9.0 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** — SIP-71 - Allow fully implicit conversions in Scala 3 with `into` is now stable - **added** — Scaladoc support for expectations in snippets - **changed** — Remove automatic collection of entry points - **changed** — Restore `Automatic-Module-Name` in standard library's manifest - **changed** — Migrate Scala CLI's using directive parser to a compiler module - **changed** — Upgrade to Scala.js 1.22.0 with stable WebAssembly backend, sbt 2.x support, and WebAssembly configuration - **changed** — Bump Scala CLI to v1.16.0 with JShell support in repl, JUnit 5 support, SBT 2.x exports, WebAssembly support, and Sloth support for patching lazy vals on JDK 24+ - **fixed** — Unify annotation handling for thread-safe and unsafe lazy vals - **fixed** — Ignore `@throws` annotation on non-methods - **fixed** — Use `IndexOutOfBoundsException` constructor with `Int` - **fixed** — Emit acceptable Java generic signatures for HKTs - **fixed** — Unwrap refined types for Java generic signatures - **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** — Emit nested module classes as static inner classes - **fixed** — Emit inline info attribute - **fixed** — Box bounded arguments of HKT result types in Java generic signatures - **fixed** — Scoverage and separation checking failures #### Highlights of the release - [Long Term Support](https://www.scala-lang.org/blog/2022/08/17/long-term-compatibility-plans.html) - SIP-71 - Allow fully implicit conversions in Scala 3 with `into` is now 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) - Migrate Scala CLI's using directive parser to a compiler module [#26449](https://github.com/scala/scala3/pull/26449) - Upgrade to Scala.js 1.22.0. [#26389](https://github.com/scala/scala3/pull/26389) * Stable WebAssembly backend * sbt 2.x support * Configuration for WebAssembly * Refer to [Scala.js v1.22 release notes](https://www.scala-js.org/news/2026/06/20/announcing-scalajs-1.22.0/) for details - Bump Scala CLI to v1.16.0 [#26703](https://github.com/scala/scala3/pull/26703): * JShell support in repl * JUnit 5 (Jupiter) support * SBT 2.x exports * Dropped Ammonite support * WebAssembly support (experimental) * Sloth support - patch Scala 3.0-3.7 lazy vals on classpath using `sun.misc.Unsafe` to JDK 24+ compatible implementation (experimental) * Refer to Scala CLI [v1.15.0](https://github.com/VirtusLab/scala-cli/releases#release-v1.15.0) and [v1.16.0](https://github.com/VirtusLab/scala-cli/releases#release-v1.16.0) for details #### Other changes and fixes ##### Annotations - Unify annotation handling for thread-safe & -unsafe lazy vals [#24907](https://github.com/scala/scala3/pull/24907) - Ignore `@throws` annotation on non-methods [#26802](https://github.com/scala/scala3/pull/26802) ##### JVM 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) - Don't skip generic signature for constructors with generic `using` parameters [#26302](https://github.com/scala/scala3/pull/26302) - Fix generic signature of trait val setter [#26374](https://github.com/scala/scala3/pull/26374) - Reliably decide whether to generate static forwarders [#26510](https://github.com/scala/scala3/pull/26510) - Fix generic signatures for inherited inner classes [#26549](https://github.com/scala/scala3/pull/26549) - Fix regression #26374: generic signatures of mixed-in trait setters [#26542](https://github.com/scala/scala3/pull/26542) - Fix regression #26550: revert isPrimitiveValueType change [#26565](https://github.com/scala/scala3/pull/26565) - Emit inline info attribute [#26650](https://github.com/scala/scala3/pull/26650) - Stop hiding errors in `GenericSignatureVisitor` [#26632](https://github.com/scala/scala3/pull/26632) - Emit a super init call for primitives on the JVM [#26630](https://github.com/scala/scala3/pull/26630) - Box bounded arguments of HKT result types in Java generic signatures [#26787](https://github.com/scala/scala3/pull/26787) - Fix issue with reading legal java cyclic signatures [#26775](https://github.com/scala/scala3/pull/26775) - Do not emit Java generic signatures for trait private val setters [#26633](https://github.com/scala/scala3/pull/26633) ##### Constructors - Lambda-owned _[Truncated at 4000 characters — full notes: https://github.com/scala/scala3/releases/tag/3.9.0]_