# Scala 3.3.8 — 3.3.8 LTS - Product: Scala (https://whatsnew.fyi/product/scala) - Vendor: Scala Center - 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 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 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]_