Are you happy with your logging solution? Would you help us out by taking a 30-second survey? Click here


The Scala programming language

Subscribe to updates I use scala

Statistics on scala

Number of watchers on Github 9863
Number of open issues 109
Main language Scala
Average time to merge a PR 4 days
Open pull requests 479+
Closed pull requests 128+
Last commit over 1 year ago
Repo Created almost 8 years ago
Repo Last Updated over 1 year ago
Size 89.8 MB
Homepage http://www.scala-...
Organization / Authorscala
Latest Releasev2.11.12
Page Updated
Do you use scala? Leave a review!
View open issues (109)
View scala activity
View on github
Fresh, new opensource launches πŸš€πŸš€πŸš€
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating scala for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)


This is the official repository for the Scala Programming Language.

How to contribute

To contribute to the Scala standard library, Scala compiler, and Scala Language Specification, please send us a pull request from your fork of this repository.

We do have to ask you to sign the Scala CLA before we can merge any of your work into our code base, to protect its open source nature.

For more information on building and developing the core of Scala, make sure to read the rest of this README!

In order to get in touch with other Scala contributors, join scala/contributors (Gitter) or post on (Discourse).

Reporting issues

Please report bugs at the scala/bug issue tracker. We use the scala/scala-dev tracker for coordinating bigger work items.

Get in touch!

If you need some help with your PR at any time, please feel free to @-mention anyone from the list below, and we will do our best to help you out:

username talk to me about...
@adriaanm type checker, pattern matcher, infrastructure, language spec
@SethTisue build, developer docs, community build, Jenkins, library, the welcome-to-Scala experience
@retronym compiler performance, weird compiler bugs, Java 8 lambdas, REPL
@Ichoran collections library, performance
@lrytz optimizer, named & default arguments
@VladUreche specialization, Scaladoc tool
@densh quasiquotes, parser, string interpolators, macros in standard library
@xeno-by macros and reflection
@heathermiller documentation
@dragos specialization, back end
@axel22 collections, concurrency, specialization
@janekdb documentation

P.S.: If you have some spare time to help out around here, we would be delighted to add your name to this list!

Repository structure

+--build.sbt                 The main sbt build script
+--lib/                      Pre-compiled libraries for the build
+--src/                      All sources
   +---/library              Scala Standard Library
   +---/reflect              Scala Reflection
   +---/compiler             Scala Compiler
   +---/eclipse              Eclipse project files
   +---/intellij             IntelliJ project templates
+--spec/                     The Scala language specification
+--scripts/                  Scripts for the CI jobs (including building releases)
+--test/                     The Scala test suite
   +---/files                Partest tests
   +---/junit                JUnit tests
+--build/                    [Generated] Build output directory

Get ready to contribute


You need the following tools:

  • Java SDK. The baseline version is 8 for both 2.12.x and 2.13.x. It may be possible to use a later SDK for local development, but the CI will verify against the baseline version.
  • sbt. We recommend the sbt-extras runner script. It provides sensible default jvm options (stack and heap size).

Mac OS X and Linux work. Windows may work if you use Cygwin. Community help with keeping the build working on Windows is appreciated.

Tools we use

We are grateful for the following OSS licenses:

Build setup


During ordinary development, a new Scala build is built by the previously released version. For short we call the previous release starr: the stable reference Scala release. Building with starr is sufficient for most kinds of changes.

However, a full build of Scala (a bootstrap, as performed by our CI) requires two layers. This guarantees that every Scala version can build itself. If you change the code generation part of the Scala compiler, your changes will only show up in the bytecode of the library and compiler after a bootstrap. See below for how to do a bootstrap build locally.

For history on how the current scheme was arrived at, see

Using the sbt build

Once you've started an sbt session you can run one of the core commands:

  • compile compiles all sub-projects (library, reflect, compiler, scaladoc, etc)
  • scala / scalac run the REPL / compiler directly from sbt (accept options / arguments)
  • dist/mkBin generates runner scripts (scala, scalac, etc) in build/quick/bin
  • dist/mkPack creates a build in the Scala distribution format in build/pack
  • test runs the JUnit test, testOnly *immutable.ListTest runs a subset
  • partest runs partest tests (accepts options, try partest --help)
  • publishLocal publishes a distribution locally (can be used as scalaVersion in other sbt projects)
    • Optionally set baseVersionSuffix := "-bin-abcd123-SNAPSHOT" where abcd123 is the git hash of the revision being published. You can also use something custom like "-bin-mypatch". This changes the version number from 2.12.2-SNAPSHOT to something more stable (2.12.2-bin-abcd123-SNAPSHOT).
    • Note that the -bin string marks the version binary compatible. Using it in sbt will cause the scalaBinaryVersion to be 2.12. If the version is not binary compatible, we recommend using -pre, e.g., 2.13.0-pre-abcd123-SNAPSHOT.
    • Optionally set publishArtifact in (Compile, packageDoc) in ThisBuild := false to skip generating / publishing API docs (speeds up the process).

If a command results in an error message like a module is not authorized to depend on itself, it may be that a global SBT plugin (such as Ensime) is resulting in a cyclical dependency. Try disabling global SBT plugins (perhaps by temporarily commenting them out in ~/.sbt/0.13/plugins/plugins.sbt).


We recommend to keep local test files in the sandbox directory which is listed in the .gitignore of the Scala repo.

Incremental compilation

Note that sbt's incremental compilation is often too coarse for the Scala compiler codebase and re-compiles too many files, resulting in long build times (check sbt#1104 for progress on that front). In the meantime you can:

  • Enable Ant mode in which sbt only re-compiles source files that were modified. Create a file local.sbt containing the line antStyle := true.
  • Use IntelliJ IDEA for incremental compiles (see IDE Setup below) - its incremental compiler is a bit less conservative, but usually correct.

Bootstrapping locally

To perform a bootstrap using sbt

  • first a build is published either locally or on a temporary repository,
  • then a separate invocation of sbt (using the previously built version as starr) is used to build / publish the actual build.

Assume the current starr version is 2.12.0 (defined in and the current version is 2.12.0-SNAPSHOT (defined in build.sbt). To perform a local bootstrap:

  • Run publishLocal (you may want to specify a custom version suffix and skip generating API docs, see above).
  • Quit sbt and start a new sbt instance using sbt -Dstarr.version=<version> where <version> is the version number you published locally.
  • If the version number you published is not binary compatible with the current starr, set every scalaBinaryVersion := "2.12.0-M4". This is not required if the version you published locally is binary compatible, i.e., if the current starr is a 2.12.x release and not a milestone / RC.

The last step is required to resolve modules (scala-xml, scala-partest, etc). It assumes that the module releases for the current starr work (in terms of binary compatibility) with the local starr that you published locally. A full bootstrap requires re-building the all the modules. On our CI this is handled by the bootstrap script, but it (currently) cannot be easily executed locally.

IDE setup

You may use IntelliJ IDEA (see src/intellij/, the Scala IDE for Eclipse (see src/eclipse/, or ENSIME (see this page on the ENSIME site).

In order to use IntelliJ's incremental compiler:

  • run dist/mkBin in sbt to get a build and the runner scripts in build/quick/bin
  • run Build - Make Project in IntelliJ

Now you can edit and build in IntelliJ and use the scripts (compiler, REPL) to directly test your changes. You can also run the scala, scalac and partest commands in sbt. Enable Ant mode (explained above) to prevent sbt's incremental compiler from re-compiling (too many) files before each partest invocation.

Coding guidelines

Our guidelines for contributing are explained in It contains useful information on our coding standards, testing, documentation, how we use git and GitHub and how to get your code reviewed.

You may also want to check out the following resources:

Scala CI

Once you submit a PR your commits will be automatically tested by the Scala CI.

If you see a spurious build failure, you can post /rebuild as a PR comment. The scabot README lists all available commands.

If you'd like to test your patch before having everything polished for review, feel free to submit a PR and add the WIP label. In case your WIP branch contains a large number of commits (that you didn't clean up / squash yet for review), consider adding [ci: last-only] to the PR title. That way only the last commit will be tested, saving some energy and CI-resources. Note that inactive WIP PRs will be closed eventually, which does not mean the change is being rejected.

CI performs a full bootstrap. The first task, validate-publish-core, publishes a build of your commit to the temporary repository Note that this build is not yet bootstrapped, its bytecode is built using the current starr. The version number is 2.12.2-bin-abcd123-SNAPSHOT where abcd123 is the commit hash. For binary incompatible builds, the version number is 2.13.0-pre-abcd123-SNAPSHOT.

You can use Scala builds in the validation repository locally by adding a resolver and specifying the corresponding scalaVersion:

$ sbt
> set resolvers += "pr" at ""
> set scalaVersion := "2.12.2-bin-abcd123-SNAPSHOT"
> console

Note that the scala modules are currently not built/published against the tested version during CI validation.

Nightly builds

The Scala CI builds nightly download releases (including all modules) and publishes them to the following locations:

The CI also publishes nightly API docs:

Using a nightly build in sbt is explained in this Stack Overflow answer

Scala CI internals

The Scala CI runs as a Jenkins instance on, configured by a chef cookbook at scala/scala-jenkins-infra.

The build bot that watches PRs, triggers testing builds and applies the reviewed label after an LGTM comment is in the scala/scabot repo.

Community build

The Scala community build is a central element for testing Scala releases. A community build can be launched for any Scala commit, even before the commit's PR has been merged. That commit is then used to build a large number of open-source projects from source and run their test suites.

To request a community build run on your PR, just ask in a comment on the PR and a Scala team member will take care of it. (details)

Community builds run on the Scala Jenkins instance. The jobs are named ..-integrate-community-build. See the scala/community-builds repo.

scala open pull requests (View All Pulls)
  • Fix var spelling in WeakHashSet
  • Remove GIJ memory configuration advice from man pages.
  • SI-6886: Deprecate -expand-all-types
  • SI-9664 - Updating IntelliJ version reference.
  • Add package view to scaladoc
  • Block bidirectional conversions in Scaladoc for JavaConversions
  • [nomerge] Backport partest 1.0.13 support to 2.11.x
  • [Do not merge] More conservative optimization for unnecessary outer ref checks
  • WIP: INDY sammy [ci: last-only]
  • SI-9658 Fix crosstalk between partial fun. and GADT match
  • Remove -Y settings that are no longer used in 2.12
  • Use jarlister in build
  • Simplify TypeRef, `baseType` returns NoType, as needed for isSubtype
  • [DO NOT MERGE] upgrade from sbt 0.13.9 to 0.13.10 release candidate
  • Turn on sam conversion by default [ci: last-only]
  • SI-8044 Allow binding backquoted varid in patterns
  • Added Properties.isLinux to compliment the isWin and isMac methods
  • when running tests during PR validation, use sbt not ant [ci:last-only]
  • SI-5365 Enable exhaustivity analysis of matches with guards
  • SI-9560 Remove dependency on parser-combinators/json
  • Improve annotation support
  • SI-7916: ScriptEngine support
  • Compiler classpath : add file entries of URLClassLoader if available
  • SI-2823 Implicit in for expression
  • SI-9347 Efficient head/tail, if possible, for immutable maps & sets
  • WIP New traits lambda [ci: last-only]
  • WIP: Organise Predef methods into Scaladoc groups
  • Replace JoinIterator & improve ConcatIterator
  • SI-8308 Fix REPL tab completion after suspend/resume
  • Merge 2.11.x to 2.12.x [ci: last-only]
  • bundle a newer Akka actors jar
  • upgrade to latest scala-xml (namely 1.0.5)
  • Fix link description: `Target$` is `object Target`.
  • SI-3236 try to infer constant types for simple final static literal java expressions
  • Seal features that were annotated with deprecatedInheritance in 2.11.0
  • Skip module docs in bootstrap script when STARR_REF is used
  • Remove mention of deprecated I/O methods from Predef main comment
  • SI-9688 Make merge in immutable HashMap1 work with null kv.
  • Scaladoc: Fix elidable threshold off-by-one comment and link elidable
  • Fix var spelling in WeakHashSet
  • Format collection conversions Scaladoc as code blocks instead of bullets
  • Update sbt version to most recent that includes the compiler interface
  • ⚠ On-Hold: Depends on #5009: Remove Predef#error
  • WIP new trait encoding using default methods [ci: last-only]
  • SI-9656 Fix immutable Range toString method
  • SI-7898 Read user input during REPL warmup
  • SI-9666: Use inline group names in Regex
  • SI-9665 Backquoted vbar in extractor pattern
  • Delete unneccesary blank line
  • Fix erasure for classOf[Unit], don't erase to classOf[BoxedUnit]
  • [Build] Include missing web assets in scaladoc
  • Updating Eclipse version reference.
  • Automate Eclipse settings and update project files:
  • SI-9740 Repl import fix -Yrepl-class-based
  • Documents date fixed + tool for fixing
  • SI-3623 Reduce maxClassfileName default value to 128
  • SI-9735 REPL prefer standard escapes for code text
  • SD-98 don't emit unnecessary mixin forwarders
  • SI-9734 Narrow type when import REPL history
  • use Future#foreach instead of onSuccess in example code
  • WIP^2: Remove repl import wrappers
  • Improvements to deprecations related to `since` parameter
  • SI-9732 remove the use of Option from OpenHashMap
  • SI-9684 Deprecate JavaConversions
  • Add summary reporting to Scaladoc
  • JMH-based benchmark framework
  • Added applyOrElse to MapLike
  • SI-9539 Specify charset when reading ScalaSignatures, ...
  • fundamentals of base type sequences [ci:last-only]
  • Correct off-by-one error in Product documentation
  • SI-8667 Improve too-many-args message
  • SI-9045 Error on recursive ctor
  • Dates fixing tool
  • SI-5183, SI-7088 tests
  • WIP: Fields refactoring [ci: last-only]
  • Warn, drop @native annotation in traits
  • Add scala.concurrent.Done
  • Right-bias Either
  • Generate static forwarders for object members in companion interface
  • SD-129 Mark JFunctionN as serializable
  • Publish usable Scala distributions to Ivy repositories
  • BitSet{1,2} conversion
  • WIP: no more type slack for function literal [ci: last-only]
  • SI-9522 release key reference when deleting from OpenHashMap
  • SI-9121 test case (fixed in new optimizer), SI-9179 test case
  • [Dates fixing]
  • [Dates fixing]
  • Add support for multiple trailing implicit parameter lists.
  • SI-9760 Fix for higher-kinded GADT refinement
  • Improve performance and behavior of ListMap and ListSet
  • Add support for higher order unification. Fixes SI-2712.
  • Simplify TraversableLike.isEmpty?
  • SI-9390 Emit local defs that don't capture this as static
  • Merge 2.11.x to 2.12.x [ci: last-only]
  • SI-4625 Recognize App in script
  • Make Range.Partial a value class
  • SI 9766
  • SI-9778 - ant.Scalac should not set sourcepath by default
  • SI-9767 String->integer/float conversions now trim and throw consiste…
  • Improve Future documentation (+ minor code cleanups)
  • improve README
  • SI-9361 fixed assert allowing display of improved error message.
  • SI-9773 Fix doc for "".lines
  • Lambda impl methods static and more stably named
  • SI-5463 Check .jars before using them
  • SI-2458 Clarify spec for package syms
  • Keep line numbers when inlining from the same compilation unit
  • Make removing forkjoin dependant on the organization key
  • Privatize the deprecated members of `immutable.Range`.
  • SI-9104 Autodetect raw pastage
  • [Sync copyright dates]
  • [Sync copyright dates]
  • Topic/repl wrappers
  • Use sbt for PR validation [ci: last-only]
  • SI-9745 Ensure assignment transformation gets re-run in typedFunction
  • Emit trait method bodies in statics [ci: last-only]
  • Avoid triple-quoting triple quotes in printer
  • Generalize `Future.traverse` and `Future.sequence`
  • Escape triple quotes when printing multiline strings
  • SI-9585 hide auto-implicit conversions from scaladoc
  • Review/string plus any language import [ci:last-only]
  • Temporarily insource Scalacheck
  • SI-9817 immutable queue `forall` and `exists` implementations
  • Topic/sip 23 redux [ci: last-only]
  • If Range is sealed, it makes sense to have Range.Inclusive final.
  • Group math package functions
  • Add -Yno-string-plus-any to opt out of String.+(Any)
  • Introduce ReplPrinter as a hook for alternatives to replStringOf
  • SI-6623 Avoid $iw wrappers in REPL
  • SI-9806 Fix incorrect codegen with optimizer, constants, try/catch
  • SI-9793 Hard exit scaladoc if bad CLI arguments are given
  • [SI-6998] Implement variants of 'par' method that allow user to set number of threads or thread pool in-line
  • SI-9615 - -Ystatistics does not enable all possible statistics
  • SI-9834 Improve error on failed op=
  • wip SI-7187: first apply empty argument list to method value
  • SI-8339 remove deprecated rewrite of withFilter -> filter
  • Override `.slice` in ArrayOps to use arraycopy.
  • SI-9832 -Xlint:help shows default
  • Fix typo in test comment
  • Retain javadoc comments in scaladoc
  • SI-4986 The glorious return of Comma McTraily
  • SI-8739 Typecheck args on failed apply
  • SI-9336 Enable paste detect in jline
  • Doc: capitalize doesn't handle non-BMP characters
  • SI-5712 Support dependent argument types for constructor parameter lists
  • [nomerge] Avoid triple-quoting triple quotes
  • language.future.{noStringPlus,syntax}
  • SI-8774 Null link fields in mutable LinkedHashMap (and friends) on remove
  • Fields: the lazies [ci: last-only]
  • [DO NOT MERGE] Use sbt for CI on Windows [ci: last-only]
  • SD-20 Inlcude static methods in the InlineInfo in mixed compilation
  • SD-48 limit the lenght of inlined local variable names
  • Update to sbt 0.13.12
  • SI-9080 Replace Cloneable/Serializable traits with type aliases
  • Improve Scaladoc for Either:
  • Proof of concept fix for SI-7046
  • SD-182 compiler option -Xgen-mixin-forwarders
  • SD-128 fix override checks for default methods
  • Deprecate and rename Left#a/Right#b to Left#value/Right#value
  • SI-8079 Only expand local aliases during variance checks
  • SD-183 Make refinement classes ineligible as SAMs
  • SD-120 Non FunctionN lambdas should not be universally serializable
  • SI-9750 scala.util.Properties.isJavaAtLeast works with JDK9
  • SI-8829 Defaultly scala -feature -deprecation
  • SI-9750 scala.util.Properties.isJavaAtLeast will not work with JDK9
  • Remove eager warning when unneeded transitive dependencies are absent from the classpath
  • Deprecate @remote
  • SI-9847 Nuance pure expr statement warning
  • SI-5294 SI-6161 Hard graft in asSeenFrom, refinements, and existentials
  • SI-8786 fix generic signature for @varargs forwarder methods
  • SI-9068 Deprecate scala.collection.mutable.Stack
  • SI-6881 Detect reference equality when comparing streams
  • SI-9019 TraversableLike stringPrefix broken for inner classes
  • non symbolic method name equivalents for ProcessBuilder
  • Typo fix in scala.sys.process.ProcessBuilder.
  • SD-192 Change scheme for trait super accessors
  • SI-7838 Mark tail var in `::` as volatile
  • Fix race condition in lambda deserialization
  • SI-9813 Add Java 1.6. and 1.8 java.lang.Math methods into scala.math (reopened)
  • SI-8432 Make generic Set operations build the same kind of Set
  • Remove ant
  • SIP-23 Implementation of literal types
  • SI-7187 deprecate eta-expansion of zero-arg method values [ci: last-only]
  • WIP SI-3809 Avoid cycles during classfile parsing [ci: last-only]
  • Propagate overloaded function type to expected arg type
  • SI-8576 Minimal changes for `-Xcheckinit` compatibility
  • Fixes to javadoc [ci: last-only]
  • avoid boxing
  • Reduce deprecations and warnings
  • Italicize more defining occurrences of terms in Scala lang. spec.
  • SI-6407 Default to UTF-8 for text encoding
  • SI-9896 Join operations at `MapLike`
  • Deprecate scala.Enumeration, add @enum annotation
  • SI-9823 Rephrase builders for cache friendliness
  • Add flag -Ypredef to configure predef objects
  • SI-9841 Progression test for SO on init
  • SI-9841 Regression test for init SO
  • SI-6967 Primitive ClassTag unapply is deprecated
  • SIP-23 Implementation of literal types
  • Partial fix for SI-7046
  • SI-2712 Add support for higher order unification
  • Make SearchImpl a value class
  • SI-9760 Fix for higher-kinded GADT refinement
  • SI-8873: Annotations on case class constructor parameters
  • SI-2458 Import shadows def in other unit
  • SI-9717 Implicit class parameters in block in super class
  • SI-9888. Prevent OOM on ParRange. Improve toString.
  • SI-9885 Don't return offset past EOF
  • [SI-9881] Fix ImportHandler's reporting of importedNames and importedSymbols
  • rename toSet to toSetUp to highlight upcasting
  • SD-194 Tweak module initialization to comply with JVM spec
  • Update Sorting.scala
  • bump STARR to 2.12.0-RC1
  • remove outdated ENSIME info
  • Store in scala-compiler.jar
  • SI-9913 Lead span iterator finishes at state -1
  • Clean up of code guarded by bare -Xexperimental
  • SI-9909: corrected stream example so it does not give forward reference
  • SI-9906: override ListBuffer.last/lastOption to run in O(1) time
  • SI-9892 Avoid pointless list creations
  • Add methods for manual proof
  • SI-9380 Remove Regex.unapplySeq(Any)
  • Replace deprecated conforms
  • Repl prints '\n' as newline, not "^J"
  • SI-9953 Any Any aborts warn on equals
  • Optimize List.reverseIterator
  • Optimize Queue.toList and Queue.iterator
  • Optimize Vector.++:
  • Avoid tripping cyclic errors under -Ytyper-debug
  • SI-9943 sealed class does not yield SAM type
  • Change `...' to β€˜...’ (Unicode quotes) in ENBF (per intent per
  • SI-9944 Scan after interp expr keeps CR
  • Shorten fields phase description
  • Explicit set diff
  • Add support for -Dpartest.scalac_opts to the partest command
  • Default -Xmixin-force-forwarders to true
  • SI-4700 Add `@infix` annotation for type printing
  • upgrade to scala-xml 1.0.6
  • SI-9557 Backquoted id spec
  • SI-9924: Fix: Spec. refers to U+007F (DELETE) as printable character
  • SI-8040 Improve unused warnings
  • SI-4700 Add `@infix` annotation for type printing
  • Rewrite TraversableLike.stringPrefix not to blow up code size in Scala.js.
  • No warn when discarding r.f(): r.type
  • SI-6276 Exclude var from trivial recursion warning
  • bump versions on 2.12.x branch for eventual 2.12.1
  • Define the root sbt project's scalaVersion
  • Bump sbt.version to 0.13.12, without breaking
  • Preliminary support for Java 9
  • SI-9915 Utf8_info are modified UTF8
  • assorted cleanups
  • SI-9813: Add Java 1.6. and 1.8 java.lang.Math methods into scala.math.package
  • Workaround in backend for linkedClassOfClass returning a type alias
  • [backport] Replace println with log calls in BrowsingLoaders
  • Pattern Matching analysis improvements [Backport] #4919
  • intern some doubles when boxing [ci: last-only]
  • Change synshronization method in TwoWayCache for more parallelilizm
  • Improve hash code of Names
  • Keep comment scanning stack-friendly [ci: last-only]
  • SI-9967 External linking in scaladoc [WIP]
  • SI-6978 No linting of Java parens
  • SI-9834 Improve error on failed op=
  • SI-10037 ASR/LSR switched in ICodeReader
  • remove old, now-unused MANIFEST.MF file
  • Improved runtime speed for Vector, restoring previous performance.
  • SI-10033 First round of deprecation cleanups for 2.13
  • improve top-level compiler/reflect doc text
  • Add β€œtest”, β€œscaladoc” and β€œrepl” projects to scala-compiler docs
  • Avoid name table pollution with fresh existentials
  • Fix wrong description of deprecation policy
  • Spec: Fix 2 pairs of quotes in text.
  • Spec.: Add language code for some Markdown code blocks that had none.
  • SI-7960: add member keyword to the resultExtractionCode for ValHandler
  • SI-10023: third iteration using member.keyword and special handling for parameterless methods
  • Don’t include scala-asm.jar in scala-compiler.jar
  • Typo and spelling corrections
  • move to latest Akka 2.3.x release
  • SI-9705 Add <,<=,>,>= to Numeric.Ops
  • SI-9904 Add size/isEmpty/nonEmpty to VectorBuilder
  • SI-3236 constant types for literal final static java fields
  • Add support for args file to scala command
  • SI-10007 sys.process thread sync
  • SI-6412 remove flaky test
  • Remove deprecated -Y flags
  • [backport] SI-10071 and SI-8786
  • Override equals and hashCode for WrappedArray
  • SI-3772 Fix detection of term-owned companions
  • SI-9813: Add Java 1.6. and 1.8 java.lang.Math methods into scala.math.package
  • Use equal() instead of identity in read-only TNode
  • SI-9636 More precise error pos on apply inference
  • Minor Vector cleanup
  • SI-10069 Fix code gen errors with array updates, Nothing
  • SI-10066 Fix crash in erroneous code with implicits, dynamic
  • SI-10067 Avoid linkage errors with type patterns, Java inner classes
  • SI-10068 Only permit elidable methods
  • Providing minimalistic & controlled kind-polymorphism
  • SI-10060 Fixes NumricRange.max bug on empty ranges
  • String.replaceAllLiterally is String.replace
  • SI-9706 Add a fromString method to Numeric trait
  • SI-9507 Make Stream #:: and #::: allow type widening
  • WIP: Add prototype improving default args encoding
  • SI-9881 Fix ImportHandler's reporting of importedNames and importedSymbols
  • SI-10137 Correct Queue.enqueue(collection.Iterable)
  • SI-10113 mutable.TreeMap.range does not work
  • SI-9013 SI-1459 Inherit @varargs annotations
  • SI-10133 Require escaped single quote char lit
  • fix doc for walkfilter and walk
  • Do not instantiate TrieMap root updater for each instance
  • Update to scala-parser-combinators v1.0.5
  • Add substitute methods to <:< =:= making these Liskov/Leibniz
  • Improved error messages for identically named, differently prefixed types
  • Add message about contributing to scaladoc footer
  • [WIP] draft of switch annotation for Strings
  • Fix indent of ArrayOps.ofXxx
  • SI-5365 Exhaustivity of extractors, guards, and unsealed traits.
  • Change the signature of WrappedArray.newBuilder[T] to return WrappedArrayBuilder[T]
  • SI-10016 preserve annotation on existential
  • Common usage of finding random number in a range [ci: last-only]
  • [ci:last-only] Remove parallel collections from scala-library
  • Further small HashTable optimizations
  • Remove unnecessary methods in TraversableOnce
  • SI-9632 don't keep JarFile open in ZipArchive
  • SI-4700 The thrilling continuation to the infix type printing saga.
  • SI-10072 cast Function nodes to environment in specialization
  • SI-10097 Error if no non-implicit case class param
  • Improve Queue.++ when building another Queue
  • Optimize dealiasWiden
  • Optimize implicit search for extension methods
  • Precompute Setting.isScala211 etc
  • bundle newer scala-parser-combinators (1.0.5->1.0.6)
  • -Xlint:unused -Ywarn-unused is intuitive
  • Conditionally lint macros and expansions
  • Optimizations in Namer and Typer
  • Explicit return type on Option.toRight/toLeft
  • Enable -howtorun:repl -i -e
  • WIP: upgrade to sbt 0.13.16-M1
  • Move tuple[23]ToZippedOps to Tuple[23] companion objects. Fixes scala/bug#10293
  • Include the parts of a compound/refinement type in implicit scope.
  • Optimize symbol substitution
  • Make create a new Ordering for performance
  • SI-8935 valueOfTerm for repl-class-based
  • add per-phase profiling to scalac
  • SI-10260 better error messages for raw Java types
  • SI-10193 - returns ListMap on mapValues method
  • SI-7960 and SI-10023 Improve REPL Output for val/var and Method Definitions
  • Stricter type parameters of collection.mutable.HashEntry
  • Deal with undefined offset (#10255)
  • [WIP] Reestablish support for dependent types in TypeTags
  • reduce backend IO load
  • minor BTypes optimisations
  • optimise completeSilentlyAndCheckErroneous
  • optimise Btypes descriptor generation
  • SD-358 REPL power template more lint friendly
  • per run immutable settings
  • Compiler performance improvements around Symbols and Types
  • SI-9937 find nested java classes if InnnerClass entry is missing
  • Remove new modifier on case classes in compiler
  • Underscore is lower case
  • Fixes scala/bug#10328:PipedSource should join Source thread to wait for the exit value
  • fix @switch annotation positions
  • Fixes scala/bug#8529: Improve :kind by only accepting type expressions
  • Add "Xlint:implicit-no-annotation"
  • Fix rounding in corner cases
  • REPL: decouple the UI (shell) from the compiler [ci: last-only]
  • Pretty print symbolic names in the REPL [ci: last-only]
  • Don't attempt to publish if there's no private key.
  • Implement annotation parsing in JavaParsers.
  • Fix queue ++ (bug #10298)
  • Applicative desugaring in for comprehensions
  • comonadic comprehensions
  • Allow inlining into trait constructors
  • Prefer library string manipulation to local reimplementation
  • Named Arguments & Implicits
  • Optimize usage of builders in case when resulting collection is empty
  • Fix lookup of default getter in scope
  • provide hook for external profiler
  • Eta-expand methods passed as functions to overloaded methods
  • Better handling of clashes between subpackage and package object member
  • Check for error in qual of select in type
  • Speed up creation of [Abs]TypeErrors.
  • Don't emit a checkinit test for fields inherited from traits
  • fix typo. reifiee => reifier
  • Flesh out the interfaces of <:< and =:=
  • Avoid returning types containing ? from glb/lub
  • wip: upgrade build from sbt 0.13 -> 1.1
  • remove Ant support, remove Eclipse support
  • Add the sm"" interpolator to the standard library.
  • Improve error message when using a Java class as a value.
  • Make Typer#dyna.mkInvoke more accurate
  • Make updateDynamic work with context bounds
  • [SIWIP] Accept case guard without trivial underscore
  • Enforce maxerrs more robustly
  • Change "ns_per_<unit>" names in Duration.scala
  • Make MapWrapper.Entry's hashCode conform to the contract in java.util.Map.Entry's documentation
  • Tighten up check for List() to Nil rewrite
  • Experiment: don't consider prefix for implicit scope
  • Compare positions in tryTypedApply by focus.
  • Propagate fatal errors during macro expansion. Fixes #10552.
  • Import selector respects backquotes
  • Narrow scope of sensibility check for equals
  • WIP optimizations in the specialization phase [ci: last-only]
  • Assorted compiler optimizations
  • don't evaluate the head of a traversable twice in last
  • scala/bug#10033 Remove items deprecated in 2.12 or earlier
  • Warn when implicit is enclosing owner
  • Removed -Yliteral-types option and cleaned up docs
  • Reduce allocation and CPU usage in distinct
  • Deprecate scala.Predef.any2stringadd
  • Cache classloaders for compiler plugins and macros
  • Add a custom test listener for usable JUnit XML reports
  • [WIP] Record and emit multiple stabilizing definitions if needed
  • Test that ScriptEngine loads
  • Iterator.scanLeft is lazy at initial value
  • Partial unification unconditional; deprecate -Xexperimental
  • Don't leak sharpened bounds between implicit candidates
  • Warn also on mirror class clobbering.
  • Add `->` alias for `Tuple2` to Predef
  • Fix scaladoc links for Any{Ref,Val,} and Nothing.
  • Don't copy the OVERRIDE flag in refinement decls
  • Defer parameter alias computation until the end of typechecking
  • Stable names for lambda lifted method and fresh names
  • bundle scala-parser-combinators 1.0.7
  • Spot mistaken single-quote more broadly
  • Avoid creation of temporary Lists of imports during Context.lookup
  • Toggle comment if no text is selected, fixes scala/scala-lang/issues/553
  • simple classpath tidyups
  • Refactor typechecking of array instantiation for performance
  • Avoid allocation of ClassTags in hot code
  • Support output of -Ystatistics to console or file CSV
  • Allow statistics printing after arbitrary phases
  • Eagerly enter default getters into scope
  • Preserve order of decls through pickle/unpickle
  • Introduce Loan object, a Scala implementation of try-with-resources
  • Also augment assertion errors raised in reflect.
  • Don't add original attachment for constant folded trees
  • Support implicitNotFound on parameters
  • Don't abort on glb/lub of TypeVar
  • Adjust padding+margin on h4 below ToC, closes scala/bug/issues/10728
  • Right-associative arguments don't lose singleton type
  • Don't accept wildcard type bounds.
  • Adapt errors are emitted in patterns
  • Avoid constraints of the wrong kind between TypeVars
  • add Either.left and Either.right typed as Either
  • add Either.left and Either.right typed as Either
  • threadsafe simple stats
  • Deprecate procedure syntax without -Xfuture [ci: last-only]
  • Remove octal escape literals
  • bug#10511 Make Ordering methods consistent
  • Deeply focus the qualifier before using it as the RHS of the stabilizing val.
  • bug#10511 Add total orderings for Float and Double
  • Exclude ScalaJS sub-projects from scala-xml in boostrap build
  • bug#5674 Remove calls to System.exit/sys.exit
  • Fix scaladoc Try.fold example
  • Give better error message when function arity limit exceeded
  • Handle escaping characters in URL -> file
  • Fixes scala/bug#8150. inconsistent Float hashCode
  • thestuckster/Topic/t10253
  • Add Automatic-Module-Name attribute to library, reflect, compiler
  • Add description why -Ywarn-value-discard do not warn on this.type
  • Document scala.Singleton #9525
  • Speed up partest
  • use ScalaCheck built for M3
  • Bring back List filter/filterNot optimization to 2.13
  • No warn-unused:params for unimplemented method
  • Add flag -Ydisable-divergence-checking
  • Add a `completions` command to 2.13.x similar to the one found in sbt
  • Invalidate jar and zip classpath entries reliably
  • Add a `completions` command to 2.12.x similar to the one found in sbt
  • Compendium of several PRs for testing with the new collections before M4
  • Change flags from Int to Long, and remove hasFlag(flag: Int) method.
  • scala/bug#4364. Mention null in extractor pattern
  • WIP: Use INSIDE_EMACS to detect emacs
  • [WIP] Issue/#10508 Deprecated bit shifting by Long value
  • Document how to run tests
  • Test to close scala/bug#5651.
  • Test to close scala/bug#6528.
  • Test to close scala/bug#5075.
  • Compile from irregular files
  • [WIP] Improve performance of traversing functions
scala questions on Stackoverflow (View All Questions)
  • scala for if loop beginner example
  • Inherit Scala standard classes documentation in Scaladoc
  • Parse Data with Many Attributes in Scala
  • Scala : How to find types of values inside a scala nested collection
  • Scala+Slick 3: Inserting the result of one query into another table
  • Convert scala type to java
  • How to store different value types in scala
  • How do array updates with = work in Scala?
  • Can not use a variable inside method block in scala
  • Scala Await a expired Future doesn't see TimeoutException
  • Iterating files in scala/java in O(1) open file descriptors
  • Reassignment to a val in Scala
  • Scala example from a book related to trait
  • Recursively iterate through a Scala list
  • How to disable Intellij wrapping on @ in match statements in Scala?
  • Scala: change folder inside sbt
  • my configuration of scala-maven-plugin with multi-module project doesn't let me do 'mvn compile' in a sub directory
  • IntelliJ scala worksheet: Reduce debug logging
  • identify sequence of numbers in Scala
  • Scala: Can an object whose source I do not control be made to extend a trait?
  • Scala: Ordering[Int].lt invocation fails for reflective method call
  • What is the difference between Expressions and Statements in Scala
  • Scala Slick 3.1 simple column<->case class mapper
  • Spark performance for Scala vs Python
  • Scala: How do I use foldLeft with a generic array?
  • Pattern matching with specialized in Scala
  • How to filter on criteria based on tags in Scala
  • Scala: Dynamically generating match clauses for case classes
  • Scala-JS for real web project
  • Scala implicit conversion from parent trait
scala list of languages used
scala latest release notes
v2.13.0-M3 Scala 2.13.0-M3

Thanks to Miles Sabin's hard work (sponsored by Lightbend), this milestone adds support for literal types, as well as improving the compiler with better support for typelevel programming, to benefit libraries such as Shapeless. More of this is coming in M4.

The standard library now adheres to the compact1 profile, enabling a signification reduction of the deployment footprint of Scala applications.

Most importantly, this is the last 2.13 milestone with the old collection library! The next (and last) milestone of this series will integrate the new collections incubating at For the next few months, our focus will be on integrating, refining, optimizing the new implementation. Our foremost concern is to ensure a smooth upgrade experience, and we are eager to hear your feedback on this as you begin porting your projects. We will document how to try out the new collections as soon as binaries are available, so you don't have to wait until M4 (see M4 milestone for target date and open issues).

A special welcome to @joroKr21 and @japgolly, and a shoutout to the growing team of regulars who keep the PR queue filled with excellence and kindness: @som-snytt, @mkeskells and @hrhino! They authored several of the additional PRs we'd like to highlight for this milestone:

PS: -Xsource:2.13 is now enabled by default (we overlooked that in the previous milestones). To facilitate upgrading, -Xsource:2.12 allows opting out of a few breaking changes. Starting in 2.13, the source version will be the only option that influences language semantics, obsoleting -Xexperimental and the various -Y flags.

Scala.js compatibility

To use Scala 2.13.0-M3, Scala.js users must upgrade to Scala.js 0.6.22, 1.0.0-M3, or newer versions. Prior releases are not compatible.


A big thank you to everyone who's helped improve Scala by reporting bugs, improving our documentation, spreading kindness in discussions around Scala, and submitting and reviewing pull requests! You are all magnificent.

This release was brought to you by 46 contributors, according to git shortlog -sn --no-merges v2.13.0-M2..v2.13.0-M3. Thank you, Jason Zaugg, Lukas Rytz, Miles Sabin, Adriaan Moors, A. P. Marki, Harrison Houghton, Mike Skells, jvican, Philippus Baalman, Seth Tisue, Eyal Farago, Stefan Zeiger, Tomas Mikula, Martijn Hoekstra, Janek Bogucki, Jasper Moeys, Rex Kerr, Juliusz Sompolski, Ben Elliott, Markus Hauck, id.ilych, Steve Robinson, mkeskells, Georgi Krastev, Kenji Yoshida, Edin Dudojevi, Dhirendra Kumar Kashyap, Nafer Sanabria, Pavel Petlinsky, David Barri, (Yang Bo), Arnout Engelen, Teemu Lehtinen, Allison H, cong, ghik, Aaron S. Hawley, svatsan, Julien Richard-Foy, Kamil Kloch, Marconi Lanna, Edmund Noble, Martin Grotzke, Martynas Mickeviius, Matt Sicker, Mike!

Obtaining Scala

Scala releases are available through a variety of channels, including (but not limited to):

v2.11.12 Scala 2.11.12

Scala 2.11.12 is a maintenance release to allow running Scala 2.11 tooling on Java 9. Five pending backports were merged.

This release addresses (#6108) a privilege escalation vulnerability that was identified in the Scala compilation daemon CVE-2017-15288.

We strongly encourage you to upgrade to the latest stable version of Scala 2.12.x, as the 2.11.x series is no longer actively maintained.

There is a known bug on Java 9 involving the repl: the workaround is to launch it as scala -nobootcp.

More general information about the Scala 2.11 series is available in the release notes for Scala 2.11.1.

v2.10.7 Scala 2.10.7

Scala 2.10.7 is a maintenance release to bring (partial) Java 9 support to the sbt 0.13 series. A total of three pending backports were merged.

This release addresses (#6128) a privilege escalation vulnerability that was identified in the Scala compilation daemon CVE-2017-15288.

We strongly encourage you to upgrade to the latest stable version of Scala 2.12.x, as the 2.10.x series is no longer actively maintained.

There is a known bug on Java 9 involving the repl: the workaround is to launch it as scala -nobootcp.

More information about the Scala 2.10 series is available in the release notes for Scala 2.10.4. A few more bugs were fixed since then in 2.10.5.

Other projects in Scala