# Scala changelog > A statically typed language fusing object-oriented and functional programming on the JVM. - Vendor: Scala Center - Category: Languages & Runtimes - Official site: https://scala-lang.org - Tracked by: What's New (https://whatsnew.fyi/product/scala) - Harvested from: GitHub (scala/scala3) - Entries below: 10 (newest first) 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'. ## Releases ### 3.9.0-RC4 - Date: 2026-07-23 - Version: 3.9.0-RC4 - Original notes: https://github.com/scala/scala3/releases/tag/3.9.0-RC4 - Permalink: https://whatsnew.fyi/product/scala/releases/3.9.0-rc4 - Labels: Pre-release - **fixed** — Fix generic signatures for inherited inner classes - **fixed** — Fix regression in generic signatures of mixed-in trait setters - **fixed** — Fix regression by reverting isPrimitiveValueType change - **fixed** — Skip unresolved annotation trees during TASTy loading #### Backported changes - 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) - Skip unresolved annotation trees (during TASTy loading) [#26520](https://github.com/scala/scala3/pull/26520) #### Contributors Thank you to all the contributors who made this release possible 🎉 According to `git shortlog -sn --no-merges 3.9.0-RC3..3.9.0-RC4` these are: ``` 4 Rikito Taniguchi 2 Wojciech Mazur ``` ### 3.9.0-RC3 - Date: 2026-07-23 - Version: 3.9.0-RC3 - Original notes: https://github.com/scala/scala3/releases/tag/3.9.0-RC3 - Permalink: https://whatsnew.fyi/product/scala/releases/3.9.0-rc3 - Labels: Pre-release - **fixed** — Reliably decide whether to generate static forwarders - **fixed** — REPL: attempt to detect user overridden toString for Product - **added** — Add missing directives-parser artifacts to the released artifacts #### Backported chnages - Reliably decide whether to generate static forwarders [#26510](https://github.com/scala/scala3/pull/26510) - REPL: attempt to detect user overridden toString for Product [#26451](https://github.com/scala/scala3/pull/26451) - Add missing directives-parser artifacts to the released artifacts [#26516](https://github.com/scala/scala3/pull/26516) #### Contributors Thank you to all the contributors who made this release possible 🎉 According to `git shortlog -sn --no-merges 3.9.0-RC2..3.9.0-RC3` these are: ``` 4 Jamie Thompson 4 Wojciech Mazur 2 Solal Pirelli 1 Arnout Engelen ``` ### 3.9.0-RC2 - Date: 2026-07-23 - Version: 3.9.0-RC2 - Original notes: https://github.com/scala/scala3/releases/tag/3.9.0-RC2 - Permalink: https://whatsnew.fyi/product/scala/releases/3.9.0-rc2 - Labels: Pre-release - **changed** — Upgrade to Scala.js 1.22.0 - **changed** — Stop using custom fonts for Scaladoc - **changed** — Bump Scala CLI to 1.15.0 and coursier to 2.1.25-M26 - **changed** — Vendor REPL dependencies - **deprecated** — Deprecate JPath use in Quotes - **changed** — Migrate Scala CLI's using directive parser to a compiler module - **changed** — Refactor directives-parser - **changed** — Improve using directives parser - **fixed** — Fix Scaladoc snippets Show all lines and Scastie popup theme bugs - **fixed** — Do not warn on dollars in Java names - **fixed** — Don't skip generic signature for constructors with generic using parameters - **fixed** — Don't eliminate var used by anonfun - **fixed** — Erase more aliases of Unit as result type to void - **fixed** — Reset dirty unimported state after findRef - **fixed** — Fix :help regressions - **fixed** — Fix generic signature of trait val setter - **fixed** — Preserve apply result type after beta reducing through opaque proxies - **fixed** — Fix memberType for constructor params - **fixed** — Fix match-alias subtyping and wildcard appliedTo #### Backported chnages - Upgrade to Scala.js 1.22.0. [#26389](https://github.com/scala/scala3/pull/26389) - Stop using custom fonts for Scaladoc [#26393](https://github.com/scala/scala3/pull/26393) - Bump Scala CLI to 1.15.0 (was 1.14.0) and `coursier` to 2.1.25-M26 (was 2.1.25-M25) [#26432](https://github.com/scala/scala3/pull/26432) - Vendor REPL dependencies [#26433](https://github.com/scala/scala3/pull/26433) - Deprecate JPath use in Quotes [#26446](https://github.com/scala/scala3/pull/26446) - Migrate Scala CLI's using directive parser to a compiler module [#26449](https://github.com/scala/scala3/pull/26449) - Refactor `directives-parser` [#26461](https://github.com/scala/scala3/pull/26461) - Minor using directives parser improvements [#26460](https://github.com/scala/scala3/pull/26460) - Scaladoc snippets: fix Show all lines & Scastie popup theme bugs [#26165](https://github.com/scala/scala3/pull/26165) - Do not warn on dollars in Java names [#26303](https://github.com/scala/scala3/pull/26303) - Don't skip generic signature for constructors with generic `using` parameters [#26302](https://github.com/scala/scala3/pull/26302) - Don't eliminate var used by anonfun [#26360](https://github.com/scala/scala3/pull/26360) - Erase more aliases of Unit as result type to void. [#26252](https://github.com/scala/scala3/pull/26252) - Reset dirty unimported state after findRef [#26412](https://github.com/scala/scala3/pull/26412) - Fix :help regressions [#26301](https://github.com/scala/scala3/pull/26301) - Fix generic signature of trait val setter [#26374](https://github.com/scala/scala3/pull/26374) - Fixes #25754: Preserve apply result type after beta reducing through opaque proxies [#25988](https://github.com/scala/scala3/pull/25988) - Fix memberType for constructor params [#25669](https://github.com/scala/scala3/pull/25669) - Fix #25866: match-alias subtyping and wildcard appliedTo [#25981](https://github.com/scala/scala3/pull/25981) #### Contributors Thank you to all the contributors who made this release possible 🎉 According to `git shortlog -sn --no-merges 3.9.0-RC1..3.9.0-RC2` these are: ``` 10 Solal Pirelli 7 Wojciech Mazur 6 Piotr Chabelski 3 Sébastien Doeraene 1 Jamie Thompson 1 Oliver Bračevac 1 Oron Port 1 Som Snytt 1 Zieliński Patryk ``` ### 3.3.8 — 3.3.8 LTS - Date: 2026-06-11 - Version: 3.3.8 - Original notes: https://github.com/scala/scala3/releases/tag/3.3.8 - Permalink: https://whatsnew.fyi/product/scala/releases/3.3.8 - **added** — Support for JDK 26 - **added** — New @uncheckedOverride annotation for definitions that may override - **added** — Trap Ctrl-C in the REPL to clear the prompt if no command is running or ask for confirmation before exiting - **added** — New '-Yfuture-lazy-vals' option to compile with new lazy val implementation compatible with all JDK 9+ - **added** — Support for local coverage on and off with // $COVERAGE-OFF$ and // $COVERAGE-ON$ markers - **changed** — Make coverage more similar to Scala 2 - **changed** — Make coverage support incremental compilation - **fixed** — Check protected parent constructor accesses only occurs in child constructors - **fixed** — Fix protected constructor access - **fixed** — Fix deprecation warnings when a symbol is annotated by a deprecated annotation - **fixed** — Fix Java leading annotation parsing - **fixed** — Do not allow @targetName on primary constructor - **fixed** — Cast inline call results to result type, not method type - **fixed** — Enforce JVM UTF-8 string limits in the backend - **fixed** — Do not simplify isInstanceOf if unrelated types might be subtypes at run-time - **fixed** — Fix generic signatures for mixin forwarders conflicting type parameter names - **fixed** — Fix infinite loop with bad section ends in TastyHeaderUnpickler - **fixed** — Skip module-info.class files during REPL tab-completion - **fixed** — Fix for empty ClassPath attribute in one or more classpath jars causing crash - **fixed** — Fix named arguments evaluation order with by-name parameters #### Highlights of the release - Support for JDK 26 [#24430](https://github.com/scala/scala3/pull/24430) - Multiple coverage improvement to make it on par with Scala 2 support including `// $COVERAGE-OFF$` and `// $COVERAGE-ON$` markers. - New @uncheckedOverride annotation for definitions that may override. [#24545](https://github.com/scala/scala3/pull/24545) - Trap Ctrl-C in the REPL: if no command is running clear the prompt, if some command is running ask for confirmation before exiting. [#24127](https://github.com/scala/scala3/pull/24127) - Numerous linting and presentation compiler improvements and fixes. - New '-Yfuture-lazy-vals' options that allows to compile with new lazy val implementation compatible with all JDK 9+ [#637](https://github.com/scala/scala3-lts/pull/637) #### Other changes and fixes ##### Access modifiers - Check protected parent constructor accesses only occurs in child constructors [#25511](https://github.com/scala/scala3/pull/25511) - Fix protected constructor access [#25523](https://github.com/scala/scala3/pull/25523) ##### Annotations - Improve ref check of constructors [#24342](https://github.com/scala/scala3/pull/24342) - Also copy param annots at mixin [#24916](https://github.com/scala/scala3/pull/24916) - Named arg may be deprecatedName [#21588](https://github.com/scala/scala3/pull/21588) - Fix: emit deprecation warnings when a symbol is annotated by a deprecated annotation [#23906](https://github.com/scala/scala3/pull/23906) - Fix #20063: Java leading annotation parsing [#25503](https://github.com/scala/scala3/pull/25503) - Accommodate adapted Scala 2 annotation value [#17516](https://github.com/scala/scala3/pull/17516) - Regression test for #3403 [#25521](https://github.com/scala/scala3/pull/25521) - Fix: do not allow `@targetName` on primary constructor too [#24682](https://github.com/scala/scala3/pull/24682) - Add `@uncheckedOverride` annotation for definitions that may override [#24545](https://github.com/scala/scala3/pull/24545) ##### Backend - Chore: add regression test for #4528 [#24663](https://github.com/scala/scala3/pull/24663) - Cast inline call results to result type, not method type [#25111](https://github.com/scala/scala3/pull/25111) - Regression tests for #25 [#25536](https://github.com/scala/scala3/pull/25536) - Enforce JVM UTF-8 string limits in the backend [#25300](https://github.com/scala/scala3/pull/25300) - Do not simplify isInstanceOf if unrelated types might be subtypes at run-time [#25535](https://github.com/scala/scala3/pull/25535) - Adjust purity of trait with lazy member [#23788](https://github.com/scala/scala3/pull/23788) - Use `Objects.equals` in translating `==` [#25314](https://github.com/scala/scala3/pull/25314) - Fix generic signatures for mixin forwarders conflicting type parameter names [#24567](https://github.com/scala/scala3/pull/24567) - No mixin forwarder when ancestor is sealed [#23482](https://github.com/scala/scala3/pull/23482) - Simplify JVM interface list emission, remove a mini-phase [#25203](https://github.com/scala/scala3/pull/25203) - Chore: optimize lazy val with power of two [#22428](https://github.com/scala/scala3/pull/22428) - Fix infinite loop with bad section ends in TastyHeaderUnpickler [#25676](https://github.com/scala/scala3/pull/25676) - Fix TastyPrinter's JAR-walking logic to include subdirectories [#25678](https://github.com/scala/scala3/pull/25678) ##### Classpath - Skip `module-info.class` files during REPL tab-completion [#24838](https://github.com/scala/scala3/pull/24838) - Fix for #22461 Empty ClassPath attribute in one or more classpath jars causes crash [#22462](https://github.com/scala/scala3/pull/22462) ##### Coverage - Make coverage more similar to the one in Scala 2 [#23722](https://github.com/scala/scala3/pull/23722) - Fix #25555: Preserve singleton precision during sc _[Truncated at 4000 characters — full notes: https://github.com/scala/scala3/releases/tag/3.3.8]_ ### 3.9.0-RC1 - 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 - **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]_ ### 3.8.4 - Date: 2026-06-05 - Version: 3.8.4 - Original notes: https://github.com/scala/scala3/releases/tag/3.8.4 - Permalink: https://whatsnew.fyi/product/scala/releases/3.8.4 - **added** — Allow :help syntax for all settings - **added** — Add logical package parsing for sourcepath - **changed** — Upgrade Scala CLI to 1.14.0 - **added** — Support for .test.java files in Scala CLI - **added** — Toggle to turn auto-IDE-setup off in Scala CLI - **added** — Cross support for run, package and doc sub-commands in Scala CLI (experimental) - **added** — Global --offline config key in Scala CLI - **added** — Local .m2 in publish local in Scala CLI (experimental) - **added** — Support for Scala.js 1.21.0 in Scala CLI - **added** — java-test-runner for pure Java tests in Scala CLI - **added** — GraalVM native-image packaging support with packaging.graalvmJvmId and packaging.graalvmArgs in Scala CLI - **deprecated** — Ammonite REPL in Scala CLI - **fixed** — Copy param annotations at mixin - **fixed** — Do not simplify isInstanceOf if unrelated types might be subtypes at run-time - **changed** — Use Objects.equals in translating == - **fixed** — Fix crash when processing path dependent context functions using HKTs - **fixed** — Preserve singleton precision during scoverage lifting - **fixed** — Ensure package transformation properly handles language imports in InstrumentCoverage - **changed** — Do not instrument erased values in scoverage - **fixed** — Fix named arguments evaluation order with by-name parameters #### Highlights of the release - Allow `:help` syntax for all settings [#26052](https://github.com/scala/scala3/pull/26052) - feature: Add logical package parsing for sourcepath [#25446](https://github.com/scala/scala3/pull/25446) - Upgrade Scala CLI to 1.14.0 * https://github.com/VirtusLab/scala-cli/releases/tag/v1.12.5 * `--cross` support for run, package and doc sub-commands (experimental) * Global `--offline` config key * Local .m2 in publish local (experimental) * https://github.com/VirtusLab/scala-cli/releases/tag/v1.13.0 * Support for Scala.js 1.21.0 * Ammonite REPL deprecated & scheduled for removal * `java-test-runner` for pure Java tests * GraalVM native-image packaging: `packaging.graalvmJvmId` and `packaging.graalvmArgs` * https://github.com/VirtusLab/scala-cli/releases/tag/v1.14.0 * Support for `.test.java` * A toggle to turn auto-IDE-setup off #### Other changes and fixes ##### Annotations - Also copy param annots at mixin [#24916](https://github.com/scala/scala3/pull/24916) - Named arg may be deprecatedName [#21588](https://github.com/scala/scala3/pull/21588) - Use `dealiasKeepRefiningAnnots` in `AvoidMap` [#25609](https://github.com/scala/scala3/pull/25609) ##### Backend - Do not simplify isInstanceOf if unrelated types might be subtypes at run-time [#25535](https://github.com/scala/scala3/pull/25535) - Port more Scala2 tests + some mixin improvements [#25573](https://github.com/scala/scala3/pull/25573) - Use `Objects.equals` in translating `==` [#25314](https://github.com/scala/scala3/pull/25314) ##### Compiler Phases - Harden Period creation and use of Run/PhaseId [#25484](https://github.com/scala/scala3/pull/25484) - Make Phase.run protected [#25366](https://github.com/scala/scala3/pull/25366) ##### Context Functions - Fix crash when processing path dependent context functions using HKTs [#25530](https://github.com/scala/scala3/pull/25530) ##### Coverage - Fix #25555: Preserve singleton precision during scoverage lifting [#25556](https://github.com/scala/scala3/pull/25556) - Fixes #25482: Ensure package transformation properly handles language imports in InstrumentCoverage [#25546](https://github.com/scala/scala3/pull/25546) - Scoverage: do not instrument erased values. [#25298](https://github.com/scala/scala3/pull/25298) ##### Default parameters - Fix named arguments evaluation order with by-name parameters [#25161](https://github.com/scala/scala3/pull/25161) - Typer: remove by-name lifting and replace default-getter args with fresh syms [#25502](https://github.com/scala/scala3/pull/25502) ##### Documentation - Error mentions bad _1 selector [#25616](https://github.com/scala/scala3/pull/25616) - Document Scala compiler error codes [#24734](https://github.com/scala/scala3/pull/24734) - Fix capture checking doc links in language.scala [#25498](https://github.com/scala/scala3/pull/25498) - Docs: apply snippet compiler on new types reference docs [#19513](https://github.com/scala/scala3/pull/19513) - Remove outdated comment in value classes [#25428](https://github.com/scala/scala3/pull/25428) - Update `IsIterable` scaladoc [#24692](https://github.com/scala/scala3/pull/24692) ##### Enums - Make enum apply ascriptions inferred types [#25562](https://github.com/scala/scala3/pull/25562) ##### Extension Methods - Accept using right associative parameters [#24766](https://github.com/scala/scala3/pull/24766) - Better handling of illegal trees in `extension` [#25368](https://github.com/scala/scala3/pull/25368) ##### GADTs - Also trust TypeTest when there is a Bind [#24568](https://github.com/scala/scala3/pull/24568) ##### Implicits - Deprecation when inferring implicit from non-accessible companion [#25516](https://github.com/scala/scala3/pull/25516) - Fix missing deprecation warning for implicit in non-accessible companion [#25608](http _[Truncated at 4000 characters — full notes: https://github.com/scala/scala3/releases/tag/3.8.4]_ ### 3.3.8-RC2 - Date: 2026-06-03 - Version: 3.3.8-RC2 - Original notes: https://github.com/scala/scala3/releases/tag/3.3.8-RC2 - Permalink: https://whatsnew.fyi/product/scala/releases/3.3.8-rc2 - Labels: Pre-release - **fixed** — Retry backporting #23665 - **fixed** — Do not overwrite the supertype of non-trait super in Erasure - **changed** — Improve the logical sources provider - **added** — Add logical package parsing for sourcepath - **fixed** — Don't lookahead from interpolation - **fixed** — Fix infinite loop with bad section ends in TastyHeaderUnpickler - **fixed** — Context bound always has a span - **fixed** — Parse HTML properly in Scaladoc - **fixed** — Don't pop outermost region when skipping - **fixed** — Fix TastyPrinter's JAR-walking logic to include subdirectories - **fixed** — Ensure mistakes in CI inputs are caught early - **removed** — Delete dead code in io/Path #### Backported fixes - Backport: Retry backporting #23665 ([#910](https://github.com/scala/scala3-lts/pull/910)) - Backport "Do not overwrite the supertype of non-trait super in Erasure" to 3.3 LTS ([#909](https://github.com/scala/scala3-lts/pull/909)) - Backport "feature: Improve the logical sources provider" to 3.3 LTS ([#908](https://github.com/scala/scala3-lts/pull/908)) - Backport "feature: Add logical package parsing for sourcepath" to 3.3 LTS ([#907](https://github.com/scala/scala3-lts/pull/907)) - Backport "Don't lookahead from interpolation" to 3.3 LTS ([#905](https://github.com/scala/scala3-lts/pull/905)) - Backport "Fix infinite loop with bad section ends in TastyHeaderUnpickler" to 3.3 LTS ([#904](https://github.com/scala/scala3-lts/pull/904)) - Backport "Context bound always has a span" to 3.3 LTS ([#903](https://github.com/scala/scala3-lts/pull/903)) - Backport "Parse HTML properly in Scaladoc" to 3.3 LTS ([#902](https://github.com/scala/scala3-lts/pull/902)) - Backport "Don't pop outermost region when skipping" to 3.3 LTS ([#901](https://github.com/scala/scala3-lts/pull/901)) - Backport "Fix TastyPrinter's JAR-walking logic to include subdirectories" to 3.3 LTS ([#900](https://github.com/scala/scala3-lts/pull/900)) - Backport "Ensure mistakes in CI inputs are caught early" to 3.3 LTS ([#899](https://github.com/scala/scala3-lts/pull/899)) - Backport "Delete dead code in io/Path" to 3.3 LTS ([#898](https://github.com/scala/scala3-lts/pull/898)) #### Contributors Thank you to all the contributors who made this release possible 🎉 According to `git shortlog -sn --no-merges 3.3.8-RC1..3.3.8-RC2` these are: ```bash 16 Tomasz Godzik 2 Solal Pirelli 2 Som Snytt ``` ### 3.8.4-RC3 - Date: 2026-05-26 - Version: 3.8.4-RC3 - Original notes: https://github.com/scala/scala3/releases/tag/3.8.4-RC3 - Permalink: https://whatsnew.fyi/product/scala/releases/3.8.4-rc3 - Labels: Pre-release - **changed** — Bump Scala CLI to v1.14.0 - **changed** — Bump coursier to 2.1.25-M25 - **added** — Allow :help syntax for all settings - **changed** — Improve the logical sources provider - **added** — Add ErrorMessageID to -Winfer-union warnings - **added** — Warn if for with many vals and overloaded map - **added** — Recognize Nullable annotations in explicit nulls - **fixed** — Fix false-positive pat mat unreachable case warning - **changed** — Make type arguments to default methods InferredTypeTrees - **fixed** — Do not overwrite the supertype of non-trait super in Erasure - **changed** — Move process parse exceptions to sys.error instead of a custom exception - **fixed** — Fix TastyPrinter's JAR-walking logic to include subdirectories - **fixed** — Don't pop outermost region when skipping - **fixed** — Parse HTML properly in Scaladoc - **fixed** — Context bound always has a span - **fixed** — Fix infinite loop with bad section ends in TastyHeaderUnpickler - **fixed** — Don't lookahead from interpolation #### Backported PRs - Bump Scala CLI to v1.14.0 (was v1.13.0) [#26065](https://github.com/scala/scala3/pull/26065) - Bump coursier to 2.1.25-M25 (was 2.1.25-M24) [#26057](https://github.com/scala/scala3/pull/26057) - Allow `:help` syntax for all settings [#26052](https://github.com/scala/scala3/pull/26052) - feature: Improve the logical sources provider [#26079](https://github.com/scala/scala3/pull/26079) - Add ErrorMessageID to -Winfer-union warnings (#25073) [#25249](https://github.com/scala/scala3/pull/25249) - Warn if for with many vals and overloaded map [#25090](https://github.com/scala/scala3/pull/25090) - Recognize Nullable annotations in explicit nulls [#25237](https://github.com/scala/scala3/pull/25237) - Fix false-positive pat mat unreachable case warning [#25978](https://github.com/scala/scala3/pull/25978) - Make type arguments to default methods InferredTypeTrees [#25852](https://github.com/scala/scala3/pull/25852) - Do not overwrite the supertype of non-trait super in Erasure [#26081](https://github.com/scala/scala3/pull/26081) - Move process parse exceptions to sys.error instead of a custom exception [#25675](https://github.com/scala/scala3/pull/25675) - Ensure mistakes in CI inputs are caught early [#25677](https://github.com/scala/scala3/pull/25677) - Fix TastyPrinter's JAR-walking logic to include subdirectories [#25678](https://github.com/scala/scala3/pull/25678) - Don't pop outermost region when skipping [#25738](https://github.com/scala/scala3/pull/25738) - Parse HTML properly in Scaladoc [#25681](https://github.com/scala/scala3/pull/25681) - Context bound always has a span [#25809](https://github.com/scala/scala3/pull/25809) - Fix infinite loop with bad section ends in TastyHeaderUnpickler [#25676](https://github.com/scala/scala3/pull/25676) - Don't lookahead from interpolation [#25834](https://github.com/scala/scala3/pull/25834) #### Contributors Thank you to all the contributors who made this release possible 🎉 According to `git shortlog -sn --no-merges 3.8.4-RC2..3.8.4-RC3` these are: ``` 8 Solal Pirelli 4 Wojciech Mazur 3 Som Snytt 2 Piotr Chabelski 1 Martin Odersky 1 Tomasz Godzik ``` ### 3.3.8-RC1 - Date: 2026-05-06 - Version: 3.3.8-RC1 - Original notes: https://github.com/scala/scala3/releases/tag/3.3.8-RC1 - Permalink: https://whatsnew.fyi/product/scala/releases/3.3.8-rc1 - Labels: Pre-release - **added** — Support for JDK 26 - **added** — New @uncheckedOverride annotation for definitions that may override - **added** — Support for // $COVERAGE-OFF$ and // $COVERAGE-ON$ markers for local coverage control - **added** — Trap Ctrl-C in the REPL: if no command is running clear the prompt, if some command is running ask for confirmation before exiting - **changed** — Make coverage more similar to the one in Scala 2 - **changed** — Make coverage support incremental compilation - **fixed** — Check protected parent constructor accesses only occurs in child constructors - **fixed** — Fix protected constructor access - **fixed** — Emit deprecation warnings when a symbol is annotated by a deprecated annotation - **fixed** — Fix Java leading annotation parsing - **fixed** — Do not allow @targetName on primary constructor - **fixed** — Cast inline call results to result type, not method type - **fixed** — Enforce JVM UTF-8 string limits in the backend - **fixed** — Do not simplify isInstanceOf if unrelated types might be subtypes at run-time - **fixed** — Fix generic signatures for mixin forwarders conflicting type parameter names - **fixed** — Skip module-info.class files during REPL tab-completion - **fixed** — Fix empty ClassPath attribute in one or more classpath jars causing crash - **fixed** — Preserve singleton precision during scoverage lifting - **fixed** — Ensure package transformation properly handles language imports in InstrumentCoverage - **fixed** — Fix named arguments evaluation order with by-name parameters #### Highlights of the release - Support for JDK 26 [#24430](https://github.com/scala/scala3/pull/24430) - Multiple coverage improvement to make it on par with Scala 2 support including `// $COVERAGE-OFF$` and `// $COVERAGE-ON$` markers - New @uncheckedOverride annotation for definitions that may override [#24545](https://github.com/scala/scala3/pull/24545) - Trap Ctrl-C in the REPL: if no command is running clear the prompt, if some command is running ask for confirmation before exiting [#24127](https://github.com/scala/scala3/pull/24127) - Numerous linting and presentation compiler improvements and fixes #### Other changes and fixes ##### Access modifiers - Check protected parent constructor accesses only occurs in child constructors [#25511](https://github.com/scala/scala3/pull/25511) - Fix protected constructor access [#25523](https://github.com/scala/scala3/pull/25523) ##### Annotations - Improve ref check of constructors [#24342](https://github.com/scala/scala3/pull/24342) - Also copy param annots at mixin [#24916](https://github.com/scala/scala3/pull/24916) - Named arg may be deprecatedName [#21588](https://github.com/scala/scala3/pull/21588) - Fix: emit deprecation warnings when a symbol is annotated by a deprecated annotation [#23906](https://github.com/scala/scala3/pull/23906) - Fix #20063: Java leading annotation parsing [#25503](https://github.com/scala/scala3/pull/25503) - Accommodate adapted Scala 2 annotation value [#17516](https://github.com/scala/scala3/pull/17516) - Regression test for #3403 [#25521](https://github.com/scala/scala3/pull/25521) - Fix: do not allow `@targetName` on primary constructor too [#24682](https://github.com/scala/scala3/pull/24682) - Add `@uncheckedOverride` annotation for definitions that may override [#24545](https://github.com/scala/scala3/pull/24545) ##### Backend - Chore: add regression test for #4528 [#24663](https://github.com/scala/scala3/pull/24663) - Cast inline call results to result type, not method type [#25111](https://github.com/scala/scala3/pull/25111) - Regression tests for #25 [#25536](https://github.com/scala/scala3/pull/25536) - Enforce JVM UTF-8 string limits in the backend [#25300](https://github.com/scala/scala3/pull/25300) - Do not simplify isInstanceOf if unrelated types might be subtypes at run-time [#25535](https://github.com/scala/scala3/pull/25535) - Adjust purity of trait with lazy member [#23788](https://github.com/scala/scala3/pull/23788) - Use `Objects.equals` in translating `==` [#25314](https://github.com/scala/scala3/pull/25314) - Fix generic signatures for mixin forwarders conflicting type parameter names [#24567](https://github.com/scala/scala3/pull/24567) - No mixin forwarder when ancestor is sealed [#23482](https://github.com/scala/scala3/pull/23482) - Simplify JVM interface list emission, remove a mini-phase [#25203](https://github.com/scala/scala3/pull/25203) - Chore: optimize lazy val with power of two [#22428](https://github.com/scala/scala3/pull/22428) ##### Classpath - Skip `module-info.class` files during REPL tab-completion [#24838](https://github.com/scala/scala3/pull/24838) - Fix for #22461 Empty ClassPath attribute in one or more classpath jars causes crash [#22462](https://github.com/scala/scala3/pull/22462) ##### Coverage - Make coverage more similar to the one in Scala 2 [#23722](https://github.com/scala/scala3/pull/23722) - Fix #25555: Preserve singleton precision during scoverage lifting [#25556](https://github.com/scala/scala3/pull/25556) - Fixes #25482: Ensure package transformation properly handles language imports in InstrumentCoverage [#25546](https://github.com/scala/scala3/pull/25546) - Bugfix: Fix issues with Scala JS and coverage [#24769](https://github.com/scala/scala3/pull/24769) - Make coverage support incremental compilation [#24773](https://github.com/scala/scala _[Truncated at 4000 characters — full notes: https://github.com/scala/scala3/releases/tag/3.3.8-RC1]_ ### 3.8.4-RC2 - Date: 2026-04-22 - Version: 3.8.4-RC2 - Original notes: https://github.com/scala/scala3/releases/tag/3.8.4-RC2 - Permalink: https://whatsnew.fyi/product/scala/releases/3.8.4-rc2 - Labels: Pre-release - **changed** — Bump Scala CLI to v1.13.0 - **changed** — Bump jackson-* to 3.1.2 - **fixed** — Reject scala.runtime's mutable refs in safe mode - **changed** — Tweak SafeRefs allow list for java.util classes - **changed** — Tune SafeRefs allow list for scala.util classes - **changed** — Require explicit types in assumeSafe definitions in the empty package - **fixed** — Skip checkSafeAnnots for synthetic symbols - **fixed** — Reject News with unsupported Java classes - **fixed** — Improve LambdaTypes handling in Quotes reflect memberType - **fixed** — Enforce isVarPattern for pat var - **fixed** — Do not warn for package object at the top level - **fixed** — Fix -Ymagic-offset-header for DoubleDefinition error and implicitNotFound errors, and remove global unmanaged cache - **fixed** — Fix scalaXml Elem rendering in repl - **fixed** — Fix Ctrl+C handling in the REPL - **fixed** — Fix covariant overrides with separate compilation causing AbstractMethodError at runtime - **added** — Add logical package parsing for sourcepath #### Backported changes - Revert #24431 [#25703](https://github.com/scala/scala3/pull/25703) - Bump Scala CLI to v1.13.0 (was v1.12.5) [#25810](https://github.com/scala/scala3/pull/25810) - Bump `jackson-*` to 3.1.2 (was 2.15.1) [#25785](https://github.com/scala/scala3/pull/25785) - Reject scala.runtime's mutable refs in safe mode [#25749](https://github.com/scala/scala3/pull/25749) - Tweak SafeRefs allow list for java.util classes [#25783](https://github.com/scala/scala3/pull/25783) - Tune SafeRefs allow list for scala.util classes [#25787](https://github.com/scala/scala3/pull/25787) - Require explicit types in assumeSafe definitions in the empty package [#25795](https://github.com/scala/scala3/pull/25795) - Skip checkSafeAnnots for synthetic symbols [#25773](https://github.com/scala/scala3/pull/25773) - Reject News with unsupported Java classes [#25761](https://github.com/scala/scala3/pull/25761) - Improve LambdaTypes handling in Quotes reflect memberType [#25786](https://github.com/scala/scala3/pull/25786) - Pat var must be isVarPattern [#25701](https://github.com/scala/scala3/pull/25701) - Do not warn for package object at the top level [#25826](https://github.com/scala/scala3/pull/25826) - Fix `-Ymagic-offset-header` for `DoubleDefinition` error and `implicitNotFound` errors, and remove global unmanaged cache [#25706](https://github.com/scala/scala3/pull/25706) - Fix #25691: scalaXml Elem rendering in repl [#25781](https://github.com/scala/scala3/pull/25781) - Fix Ctrl+C handling in the REPL [#25782](https://github.com/scala/scala3/pull/25782) - Fix "Scala 3.8.3 compiling covariant overrides with separate compilation causes AbstractMethodError at runtime" [#25659](https://github.com/scala/scala3/pull/25659) - Fix "Fix Ctrl-C Handling in the REPL" [#25835](https://github.com/scala/scala3/pull/25835) - Improve the test for creating protected method accessors for inlines [#25865](https://github.com/scala/scala3/pull/25865) - feature: Add logical package parsing for sourcepath [#25446](https://github.com/scala/scala3/pull/25446) #### Contributors Thank you to all the contributors who made this release possible 🎉 According to `git shortlog -sn --no-merges 3.8.4-RC1..3.8.4-RC2` these are: ``` 5 Wojciech Mazur 4 Martin Odersky 4 Piotr Chabelski 3 Matt Bovel 2 Jan Chyb 2 Li Haoyi 2 Solal Pirelli 2 noti0na1 1 Jakub Warchoł 1 Som Snytt 1 Tomasz Godzik 1 Yichen Xu ```