This is a normal sbt project, you can compile code with sbt compile
and run it
with sbt run
, sbt console
will start a Scala 3 REPL.
If compiling this example project fails, you probably have a global sbt plugin
that does not work with Scala 3, try to disable all plugins in
~/.sbt/1.0/plugins
and ~/.sbt/1.0
.
Scala 3 comes built-in with IDE support, to try it out see IDE support for Scala 3
The fastest way to start a new Scala 3 project is to use one of the following templates:
You will need to make the following adjustments to your build:
addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "0.5.3")
Here, dotty is the project name for technologies that are considered for inclusion in Scala 3. Since the development of Scala 3 is not done, the word dotty and Dotty still can be seen in some names of Scala 3 related tools, sbt plugins, etc.
sbt.version=1.4.7
You must use sbt 1.4 or newer; older versions of sbt are not supported.
Set up the Scala 3 version:
scalaVersion := "3.0.0-RC1"
If the latest release of Scala 3 is missing a bugfix or feature you need, you may
wish to use a nightly build. Look at the bottom of the list of
releases
to find the version number for the latest nightly build. Alternatively, you can set
scalaVersion := dottyLatestNightlyBuild.get
to always use the latest nightly build of Scala 3.
When porting an existing project, it's a good idea to start out with the Scala 2
compatibility mode (note that this mode affects typechecking and thus may
prevent some valid Scala 3 code from compiling) by adding to your build.sbt
:
scalacOptions ++= { if (isDotty.value) Seq("-source:3.0-migration") else Nil }
Using the isDotty
setting ensures that this option will only be set when
compiling with Scala 3. For more information on the -source
flag, see
language versions;
for more information on migrating to Scala 3, see
the migration guide.
If your build contains dependencies that have only been published for Scala 2.x, you may be able to get them to work on Scala 3 by replacing:
libraryDependencies += "a" %% "b" % "c"
by:
libraryDependencies += ("a" %% "b" % "c").withDottyCompat(scalaVersion.value)
This will have no effect when compiling with Scala 2.x, but when compiling with Scala 3 this will change the cross-version to a Scala 2.x one. This works because Scala 3 is currently retro-compatible with Scala 2.x.
Alternatively, to set this setting on all your dependencies, you can use:
libraryDependencies := libraryDependencies.value.map(_.withDottyCompat(scalaVersion.value))
Feel free to come chat with us on the Scala 3 gitter!