Scala standard library implementation for Scala.js, providing core library functionality for Scala code compiled to JavaScript
npx @tessl/cli install tessl/maven-org-scala-js--scalajs-scalalib-2-13@1.20.0The Scala.js Standard Library provides the core Scala standard library implementation specifically adapted for JavaScript compilation targets. It maintains full API compatibility with the JVM Scala standard library while providing optimized implementations for the JavaScript runtime environment, enabling seamless use of familiar Scala APIs in browser and Node.js environments.
libraryDependencies += "org.scala-js" %%% "scalalib" % "1.20.1"The scalalib is automatically available when using Scala.js compilation. Standard Scala imports work as expected:
import scala.App
import scala.Array
import scala.Console
import scala.concurrent.ExecutionContext
import scala.util.DynamicVariable
import scala.collection._// Using App trait for main program
object Main extends App {
Console.println("Hello World: " + (args mkString ", "))
}
// Array operations
val numbers = Array(1, 2, 3, 4, 5)
val doubled = numbers.map(_ * 2)
val filtered = Array.range(1, 10).filter(_ % 2 == 0)
// Concurrent operations
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
val future = Future {
"Hello from JavaScript!"
}The Scala.js Standard Library is organized around JavaScript-specific adaptations:
Essential Scala language constructs and basic functionality adapted for JavaScript execution.
trait App extends DelayedInit {
val args: Array[String]
val executionStart: Long
}
object Array {
def apply[T](xs: T*): Array[T]
def ofDim[T: ClassTag](n1: Int): Array[T]
def empty[T: ClassTag]: Array[T]
def fill[T: ClassTag](n: Int)(elem: => T): Array[T]
def tabulate[T: ClassTag](n: Int)(f: Int => T): Array[T]
def range(start: Int, end: Int): Array[Int]
def concat[T: ClassTag](xss: Array[T]*): Array[T]
}
object Console {
def print(obj: Any): Unit
def println(obj: Any): Unit
def println(): Unit
def printf(text: String, args: Any*): Unit
def readLine(): String
def readLine(text: String): String
}Asynchronous programming utilities adapted for JavaScript's event loop and single-threaded execution model.
trait ExecutionContext {
def execute(runnable: Runnable): Unit
def reportFailure(cause: Throwable): Unit
}
object ExecutionContext {
def global: ExecutionContext
def fromExecutor(executor: Executor): ExecutionContext
}Scala's collections library adapted for JavaScript with optimized implementations and JavaScript-specific performance characteristics.
// Collection operations and utilities
// (Detailed APIs available in collections sub-doc)General-purpose utility classes for common programming tasks, adapted for JavaScript environment constraints.
class DynamicVariable[T](init: T) {
def value: T
def value_=(newval: T): Unit
def withValue[S](newval: T)(thunk: => S): S
}
class Enumeration {
protected final def Value: Value
protected final def Value(i: Int): Value
protected final def Value(name: String): Value
protected final def Value(i: Int, name: String): Value
}
case class Symbol private (name: String) {
override def toString: String = "'" + name
}Mathematical functions and numeric utilities optimized for JavaScript's number system and Math object.
// Math utility functions and constants
// (Detailed APIs available in math sub-doc)Low-level runtime support classes and utilities that provide the foundation for Scala.js execution.
// Runtime support APIs
// (Detailed APIs available in runtime sub-doc)The scalalib implementations are specifically optimized for JavaScript execution:
The library provides three levels of compatibility:
overrides/scala/) - Core APIs compatible with all Scala versionsoverrides-2.12/scala/) - Scala 2.12 version-specific implementationsoverrides-2.13/scala/) - Scala 2.13 version-specific implementationsStandard Scala exception handling works as expected. Common JavaScript-specific considerations: