Skip to content
CAI
Software that uses CAICheck a score

webjars/webjars

57.9

Adequate · 20 September 2026

5.1k

lines of production code

Scala

with JavaScript

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is a WebJars service that manages the deployment and distribution of frontend libraries to Maven Central. It provides a modern web interface for searching and listing artifacts, alongside an administrative tool for triggering and monitoring deployments. The backend utilizes ZIO for concurrent, real-time deployment tracking with structured error handling and Redis-based state management.

Features

Initial project scaffolding and build configuration

The repository has been initialized with core project files, including an MIT License, README, and mission statement. The build system is configured with an sbt launcher (version 2.0.0) and a \.sbtopts\ file enabling specific JVM flags for native access and unsafe memory operations. Deployment is defined via a Procfile for web, deploy, and cleanup processes, while the runtime environment is pinned to Java 25. Additionally, a comprehensive set of integration tests has been added to validate HTTP endpoints, and developer documentation (DEV.md) outlines local setup using Valkey and Playwright for browser testing.

(repo-wide) · high confidence

Removals

Removal of legacy Application and WebJarAssets controllers

The legacy \Application\ controller (handling index, documentation, and examples pages) and the \WebJarAssets\ controller (serving WebJar static assets) have been removed from the application. This eliminates the manual routing and serving logic previously defined in these files, likely as part of a broader refactoring to use standard Play assets handling or a different architecture for serving static content and UI pages.

app/controllers · high confidence

Removal of legacy static documentation and example views

The application has removed the \documentation.scala.html\, \examples.scala.html\, \index.scala.html\, and \main.scala.html\ view templates. This eliminates the previous static UI structure that served hardcoded documentation sections (for Play 2, Servlet 3, Grails, Dropwizard, Spring MVC), a list of example applications, and the main layout wrapper including the Bootstrap 2.1.1 stylesheet and jQuery 1.8.1 script. Users will no longer see these specific legacy documentation pages or the associated basic layout in this view layer.

app/views · high confidence

Behavioural changes

1 commit (0 fixes) modifying resources

A change to existing behaviour in resources — 1 commit, 1 file.

resources · low confidence · unverified

Migration from Play 2.x to sbt 2.0 with updated plugin ecosystem

The build system has been significantly restructured: the legacy \project/Build.scala\ file defining the Play project has been removed, and the build tool version has been upgraded from sbt 0.11.3 to 2.0.8. The plugin configuration has shifted away from the Play sbt plugin to a set of modern plugins including \sbt-native-packager\, \sbt-webjars\, \sbt-sass\, \sbt-reload\, \skillsjars-sbt-plugin\, \sbt-mcp\, and \sbt-tdepver\, reflecting a move to a new build architecture and dependency management strategy.

project · high confidence

New ZIO-based deployment pipeline with structured error tracking and live progress updates

The repository has been rewritten to use the ZIO effect system, introducing a new deployment architecture that provides real-time progress streaming via Server-Sent Events (SSE) and structured error classification. Deployments are now tracked in Redis, allowing multiple clients to subscribe to the same job's log. The system automatically files GitHub issues for 'Systemic' failures (such as missing metadata or license errors) while suppressing 'Transient' network errors and 'UserInput' mistakes, preventing issue tracker spam. Additionally, the new \AppRoutes\ exposes a modern web UI and API endpoints for searching, listing, and deploying WebJars, with improved caching and ETag support for performance.

repository · high confidence

Removal of legacy application configuration and routing definitions

The default application configuration file (application.conf) and the routes file (routes) have been removed from the conf directory. This eliminates the hardcoded secret key, default logger settings, and the previous route mappings for the index, documentation, examples, and WebJar assets pages, indicating a shift in how the application's core configuration and request routing are managed.

conf · high confidence

WebJars site redesign with dark mode, crawler limits, and admin deployment

The WebJars website has been redesigned with a new user interface that includes a dark mode toggle (persisting user preference via localStorage) and a documentation page with framework-specific tabs. To protect backend resources, crawler traffic is now rate-limited on expensive endpoints like /listfiles, returning 429 responses to excessive bots. Additionally, an admin deployment tool has been added, allowing administrators to redeploy specific WebJars to Maven Central, and a one-time cleanup utility has been introduced to remove stale or invalid entries from the cache.

src/main · high confidence

Test coverage

Added comprehensive test coverage for core WebJar deployment and utility logic

This update introduces a suite of new tests in src/test/scala/webjars that verify critical deployment and utility behaviors. ArchiveCreatorSpec confirms that in-memory files are archived correctly, including support for paths exceeding standard tar header limits. CacheSpec validates the CacheLive implementation, ensuring values are cached, expired correctly, and that failures are not cached to allow retries. ClassicParseMetadataSpec tests the parsing of metadata for both standard and NPM-based WebJars, including handling of scoped NPM names and license overrides. ClassicSpec exercises the full Classic WebJar lifecycle, including metadata retrieval, version listing, and specifically verifying that license handling correctly treats GitHub's NOASSERTION response as UnresolvedLicense to allow fallbacks. DeployFailureSpec and DeployFailureTrackerSpec test the classification of deployment errors (Systemic, Transient, UserInput) and the tracker's logic for scrubbing sensitive data, redacting tokens, and filing GitHub issues for systemic failures. DeployHelpersSpec verifies GAV parsing and version bumping logic. Finally, DeployJobsSpec and DeployJobsIntegrationSpec test the streaming deployment job behavior, including late subscriber handling, concurrent deploy deduplication, and end-to-end deployment of an NPM package with dependencies.

src/test · high confidence

Dependencies

Initial build configuration for WebJars service

The project now uses a new build.sbt file to define the build structure, setting the Scala version to 3.9.0 and configuring the application to run on JDK 25 with specific JVM flags to allow restricted memory access. It introduces dependencies on the ZIO ecosystem (including zio-config, zio-redis, zio-cache, and zio-http-guard) and specifies published artifacts for zio-git (0.0.3) and zio-mavencentral (0.14.0), while also including WebJars for Bootstrap (5.3.8) and Highlight.js (11.11.1) for frontend assets.

(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 58.

Lenses

  • Code Health 94
  • Architecture 100
  • Maturity 43
  • Readiness 65
  • Security 63

Changes since last survey

  • 300 commits — 256 feature/other, 44 fixes

By area

  • (root) — 72 commits
  • (repo) — 56 commits
  • app/utils — 45 commits
  • project/build.properties — 35 commits
  • src/main — 23 commits
  • project/plugins.sbt — 13 commits
  • test/utils — 13 commits
  • .github/workflows — 11 commits
  • app/views — 10 commits
  • app/assets — 6 commits
  • .github/dependabot.yml — 2 commits
  • app-TO_DELETE/views — 2 commits
  • app/controllers — 2 commits
  • conf/application.conf — 2 commits
  • src/test — 2 commits
  • test/controllers — 2 commits
  • app/models — 1 commit
  • conf/logback.xml — 1 commit
  • project/sbt-sass — 1 commit
  • project/sbt-webjars — 1 commit

Notable commits

  • fix: Fix 501 HTTPS Required error by migrating from deprecated Sonatype OSS to Maven Central (#2170)
  • fix: Fix pre release ranges (#2051)
  • fix: Fix styles (#2103)
  • fix: Fix styles2 (#2108)
  • fix: Revert commit(s) 2a68696
  • fix: Revert commit(s) 35b628d
  • fix: Revert commit(s) 9011146
  • fix: Revert commit(s) 9c26b74
  • fix: Revert commit(s) f9d6b98
  • fix: add MANIFEST.MF and remove empty source and javadoc jars - fixes #2070 (#2071)
  • fix: add public key info - fixes #2257
  • fix: add support for exclicit license - fixes #2221
  • fix: better gradle fixes #2043
  • fix: better lookup of versions - fixes #2134
  • fix: cache overhaul - fixes #2185
  • fix: create valid manifest - fixes #2142 (#2147)
  • fix: fix classic npms with scoped names
  • fix: fix conf
  • fix: fix depGraph
  • fix: fix github redirs
  • …and 280 more

Architecture

  • 0 containers · 1 bounded contexts · 0 dependency edges (baseline)

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

Survey your own repository

webjars/webjars 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 b35adad4c10806512fff082041406ac5e679712f — 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.