Skip to content
CAI
Software that uses CAICheck a score

vmunier/sbt-web-scalajs

61.6

Adequate · 20 September 2026

251

lines of production code

Scala

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is an sbt plugin that integrates Scala.js with the sbt-web build toolchain, enabling JavaScript asset compilation and serving for various web servers. It provides generic support for frameworks like Play, Akka HTTP, and Spray, handling JavaScript pipeline stages, file watching, and source map generation. The plugin ensures compatibility with modern Scala versions and SBT 2, allowing developers to manage client-side assets independently of the server framework.

Removals

Removal of Play-specific Scala.js plugin

The \PlayScalaJS\ plugin, which previously provided tight integration between Play and Scala.js (including cross-project support, JS output copying, and source map handling), has been removed. This change reflects the plugin's decoupling from the Play framework to become a generic \sbt-web-scalajs\ plugin compatible with any sbt-web server, meaning users must now rely on the new generic plugin or other integrations for Scala.js support.

src/main/scala/playscalajs · high confidence

Behavioural changes

Introduce sbt-web integration for Scala.js with source map support

The plugin has been refactored to decouple Scala.js support from the Play framework, now providing a generic integration with any sbt-web server (such as Play, Akka HTTP, or Spray). This change introduces new auto-plugins (ScalaJSWeb and WebScalaJS) that handle JavaScript pipeline stages, file watching, and source map generation. Users benefit from improved source map handling that works across different Scala versions (including Scala 3) and ensures that Scala.js output files are correctly copied to the web assets directory for serving.

src/main/scala/webscalajs · high confidence

Plugin renamed to sbt-web-scalajs with expanded server support

The plugin has been renamed from sbt-play-scalajs to sbt-web-scalajs to reflect that it now supports any sbt-web server (such as Akka HTTP or Spray), not just Play Framework. The README has been updated to document the new setup for sbt 1.x and 2.x, including specific instructions for configuring the \scalaJSProjects\ and \pipelineStages\ settings, and clarifying that the plugin no longer depends on Play but relies on sbt-web and Scala.js. Additionally, a LICENSE file (Apache 2.0) and a .scalafmt.conf configuration file have been added to the project.

(repo-wide) · high confidence

Test coverage

Add scripted tests for Akka HTTP and Play integration with Scala.js

Added new scripted tests for the \sbt-web-scalajs\ plugin covering integration with Akka HTTP and Play Framework. The Akka HTTP test verifies that Scala and source map files are correctly included in the universal package under various \scalaJSStage\ and \sourceMappings\ configurations. The Play test validates that the server reloads only when server-side Scala files change (ignoring client-side changes) and confirms the correct presence of Scala and source map files in the packaged archive.

src/sbt-test · high confidence

Dependencies

Rename plugin to sbt-web-scalajs and upgrade to SBT 2 compatibility

The plugin has been renamed from sbt-play-scalajs to sbt-web-scalajs to reflect its decoupling from the Play framework, allowing it to integrate with any sbt-web server such as Akka HTTP or Spray. The build has been upgraded to support SBT 2 (via sbt2-compat) and Scala 3, with sbt-scalajs updated to 1.22.0 and sbt-web to 1.6.0-M4. Additionally, new scripted tests have been added for Akka HTTP and Play integrations to verify the plugin's functionality in these environments.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 62.

Lenses

  • Code Health 100
  • Architecture 100
  • Maturity 69
  • Readiness 44
  • Security 75

Changes since last survey

  • 209 commits — 202 feature/other, 7 fixes

By area

  • (root) — 142 commits
  • src/main — 30 commits
  • src/sbt-test — 16 commits
  • project/build.properties — 9 commits
  • (repo) — 7 commits
  • project/plugins.sbt — 3 commits
  • .github/workflows — 2 commits

Notable commits

  • fix: Fix Travis build by using xenial dist. (#51)
  • fix: Fix release workflow: use JDK 21 for sbt 2
  • fix: Fixes #14: Use unmanagedResourceDirectories in Compile to watch the client Scala files during development while excluding them from the final jar. @see externalizedSettings, which is used in Play to create a jar that excludes the unmanagedResources https://github.com/playframework/playframework/blob/9ffaf72367e99b35b08e03d6199eb7bf17eaea4b/framework/src/sbt-plugin/src/main/scala/play/sbt/PlaySettings.scala#L248. The Compile scope is used and not the Assets scope because using the Assets scope would have included the client Scala files with their package path (e.g. public/example/ScalaJSExample.scala).
  • fix: Fixes #26: Run scalaJSDev when a user executes a dev command with arguments.
  • fix: Fixes #27: get the command key from user's input to know if it's a dev command. Example: 'run' is the command key in 'server/compile:run'.
  • fix: Fixes #55: Use correct scope with scalaJSLinkerConfig. (#56)
  • fix: Fixes #9: the plugin is now compatible with Play 2.4. Play 2.4 monitors directories in unmanagedSourceDirectories during Play run. So Scala.js projects are now added to unmanagedSourceDirectories in Assets to be part of the directories monitored by Play. @see playMonitoredFilesTask in Play, which creates the list of monitored directories https://github.com/playframework/playframework/blob/c75ed44baf4433f6b56ec5fdc30993405e8ad178/framework/src/sbt-plugin/src/main/scala/play/sbt/PlayCommands.scala#L85
  • change: - Several Scala.js projects can be attached to a single Play! project. - sbt-play-scalajs does not depend on Play anymore. It depends on sbt-web instead which is also used by the Play framework. - Scala files for Source Maps are copied into the assets folder and Source Maps paths are rewritten. There is no need for a SourceMaps controller to serve the Scala files anymore. - Source Maps are disabled in production by default (i.e. when running play start, stage, dist). To enable Source Maps in production, (emitSourceMaps in fullOptJS) := true should be set in the Scala.js projects.
  • change: <<= is deprecated in 0.13.13
  • change: Adapt mapSourceURI parameter to Scala 3 (#116)
  • change: Add 'License' and 'Download' badges
  • change: Add Typesafe resolver
  • change: Add akka-http-with-scalajs scripted test.
  • change: Add implicit conversion from Seq[Project] to Seq[ProjectReference].
  • change: Add play-scalajs as an sbt-test (#66)
  • change: Add runAll to the devCommands. runAll is used in Lagom projects.
  • change: Added Gitter badge
  • change: Change mapSourceURI type to Option[String].
  • change: Create ci.yml
  • change: Cross build to SBT v1.0.0 and v0.13.16. (#38)
  • …and 189 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

vmunier/sbt-web-scalajs was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 20 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 8704a50c4e7845a1c3e99e2ef0829b0984e76e73 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-b51f968c9b10.