Scala.js compiles Scala code to JavaScript, allowing you to write your Web application entirely in Scala!
Noteworthy features are:
- Support all of Scala (including macros!), modulo a few semantic differences
- Very good interoperability with JavaScript code. For example, use jQuery and HTML5 from your Scala.js code, either in a typed or untyped way. Or create Scala.js objects and call their methods from JavaScript.
- Integrated with sbt (including support for dependency management and incremental compilation)
- Can be used with your favorite IDE for Scala
- Generates Source Maps for a smooth debugging experience (step through your Scala code from within your browser supporting source maps)
- Integrates Google Closure Compiler for producing minimal code for production.
We provide a bootstrapping application which you can fork to kick off your own project. Its readme provides further explanations on how to do so.
Scala.js uses sbt for its build process. To compile your fork, simply run:
sbt> package
By default the sbt environment uses Scala 2.11.0. You can switch to any of the supported versions with, e.g.,
sbt> ++2.10.4
Compile and run the Scala.js-specific test suite with
sbt> scalajs-test/test
(you must have run package
before running the test suite)
To run the Scala test suite (aka partest), you have to use a 2.11 version, e.g., 2.11.0 or 2.11.1, and run:
sbt> scalajs-partest-suite/test
Beware, this takes a very long time. You may use the --fastOpt
and
--fullOpt
switches to run Scala.js DCE or the full Google Closure
Compiler:
sbt> scalajs-partest-suite/testOnly -- --fastOpt
A complete test session from scratch on 2.11.1 would then be
sbt> ++2.11.1
sbt> package
sbt> scalajs-test/test
sbt> scalajs-partest-suite/test
After having compiled Scala.js, you can compile the example applications with:
sbt> examples/fullOptJS
(you must have run package
before compiling the examples)
Then, you can "execute" them by opening their respective HTML files in your favorite browser. Since fully optimizing the JavaScript takes time (up to ten seconds, depending on your hardware), it is also possible to only partially optimize JS by doing instead:
sbt> examples/fastOptJS
In this case, you have to open the -fastopt
version of the HTML
files.
Currently, two examples are provided:
examples/helloworld/helloworld.html
, saying Hello World in four different ways (using DOM or jQuery, and using the untyped or typed interface to JavaScript).examples/reversi/reversi.html
, an implementation of a Reversi game. Note that it uses the HTML5 Canvas element, so it won't work with Internet Explorer 8 or below.
If both fastOptJS
and fullOptJS
break, you can try and use
packageJS
which doesn't perform any optimizations (use the -dev
version of the HTML files).
Simply publish it locally with:
sbt> publishLocal
sbt> scalajs-tools/publishLocal
sbt> scalajs-sbt-plugin/publishLocal
Scala.js is distributed under the Scala License.