{"adoption": {"forks": 408, "observed_at": "2026-08-28T04:08:57.388812+00:00", "stars": 4710}, "canonical_url": "https://ross.abutalabs.com/products/scala-js", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Scala.js, the Scala to JavaScript compiler", "domain": ["compilers", "programming-languages", "web-development", "frontend", "cross-platform"], "enriched": true, "function": ["compiler", "programming-language", "type-system", "developer-tools"], "health_score": 98, "homepage": "https://www.scala-js.org/", "language": "Scala", "license": "Apache-2.0", "license_family": "permissive", "maturity": "stable", "member_repos": ["scala-js/scala-js"], "name": "scala-js/scala-js", "platform": ["browser", "cross-platform", "jvm"], "pushed_at": "2026-08-15T18:05:40+00:00", "repo": "scala-js/scala-js", "stars": 4710, "tags": ["scala", "scala-to-javascript", "transpiler", "strong-typing", "javascript-interop", "compiler", "nodejs", "web-server"], "topics": ["scala", "javascript-compiler", "language", "compiler"], "urls": [], "use_cases": ["compile scala code to javascript", "build type-safe frontend apps in scala", "share code between jvm backend and browser frontend", "use react from scala with static typing", "develop serverless functions in scala", "avoid javascript type errors with strong typing"], "what_it_is": "Scala.js is a compiler that translates Scala code into efficient JavaScript, letting developers write type-safe applications for browsers, Node.js, and serverless environments. It provides full interoperability with JavaScript libraries and ecosystems while retaining Scala's strong static typing.", "when_to_avoid": ["your team is JavaScript/TypeScript-first with no Scala experience", "you need tiny bundle sizes below what optimized Scala.js output provides", "you rely on JS tooling or libraries without good interop needs"], "when_to_choose": ["your team knows Scala and wants to target the browser or Node.js", "you want strong static typing and editor tooling over JavaScript", "you need to share business logic between JVM and JavaScript codebases"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/scala-js", "repo": "scala-js/scala-js", "role": "main", "score": 91}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.388812+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T08:31:24.767728+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e83838e6eb84886815c8aadf756155e180c27f3adb852b4f1c5c42d78cea5cca", "fetched_at": "2026-08-28T04:08:57.388812+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scala-js/scala-js"}, {"content_hash": "8199892f27cab85bfb2d4ab01e9914ed3924089f23da03b1862e2016314c46fe", "fetched_at": "2026-08-29T09:03:00.216483+00:00", "kind": "homepage", "missing": false, "url": "https://www.scala-js.org/"}, {"content_hash": "58e6e6e4cf62da746245afc76aeca4c54bfc7e14cd01e4685eddd3c57aa7476d", "fetched_at": "2026-08-29T09:03:00.225545+00:00", "kind": "site_page", "missing": false, "url": "https://www.scala-js.org/doc"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.388812+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T08:31:24.767728+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e83838e6eb84886815c8aadf756155e180c27f3adb852b4f1c5c42d78cea5cca", "fetched_at": "2026-08-28T04:08:57.388812+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scala-js/scala-js"}, {"content_hash": "8199892f27cab85bfb2d4ab01e9914ed3924089f23da03b1862e2016314c46fe", "fetched_at": "2026-08-29T09:03:00.216483+00:00", "kind": "homepage", "missing": false, "url": "https://www.scala-js.org/"}, {"content_hash": "58e6e6e4cf62da746245afc76aeca4c54bfc7e14cd01e4685eddd3c57aa7476d", "fetched_at": "2026-08-29T09:03:00.225545+00:00", "kind": "site_page", "missing": false, "url": "https://www.scala-js.org/doc"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T08:31:24.767728+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e83838e6eb84886815c8aadf756155e180c27f3adb852b4f1c5c42d78cea5cca", "fetched_at": "2026-08-28T04:08:57.388812+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scala-js/scala-js"}, {"content_hash": "8199892f27cab85bfb2d4ab01e9914ed3924089f23da03b1862e2016314c46fe", "fetched_at": "2026-08-29T09:03:00.216483+00:00", "kind": "homepage", "missing": false, "url": "https://www.scala-js.org/"}, {"content_hash": "58e6e6e4cf62da746245afc76aeca4c54bfc7e14cd01e4685eddd3c57aa7476d", "fetched_at": "2026-08-29T09:03:00.225545+00:00", "kind": "site_page", "missing": false, "url": "https://www.scala-js.org/doc"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.388812+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.388812+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.388812+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T08:31:24.767728+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e83838e6eb84886815c8aadf756155e180c27f3adb852b4f1c5c42d78cea5cca", "fetched_at": "2026-08-28T04:08:57.388812+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scala-js/scala-js"}, {"content_hash": "8199892f27cab85bfb2d4ab01e9914ed3924089f23da03b1862e2016314c46fe", "fetched_at": "2026-08-29T09:03:00.216483+00:00", "kind": "homepage", "missing": false, "url": "https://www.scala-js.org/"}, {"content_hash": "58e6e6e4cf62da746245afc76aeca4c54bfc7e14cd01e4685eddd3c57aa7476d", "fetched_at": "2026-08-29T09:03:00.225545+00:00", "kind": "site_page", "missing": false, "url": "https://www.scala-js.org/doc"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.388812+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.388812+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T08:31:24.767728+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e83838e6eb84886815c8aadf756155e180c27f3adb852b4f1c5c42d78cea5cca", "fetched_at": "2026-08-28T04:08:57.388812+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scala-js/scala-js"}, {"content_hash": "8199892f27cab85bfb2d4ab01e9914ed3924089f23da03b1862e2016314c46fe", "fetched_at": "2026-08-29T09:03:00.216483+00:00", "kind": "homepage", "missing": false, "url": "https://www.scala-js.org/"}, {"content_hash": "58e6e6e4cf62da746245afc76aeca4c54bfc7e14cd01e4685eddd3c57aa7476d", "fetched_at": "2026-08-29T09:03:00.225545+00:00", "kind": "site_page", "missing": false, "url": "https://www.scala-js.org/doc"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.388812+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.388812+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.388812+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T08:31:24.767728+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e83838e6eb84886815c8aadf756155e180c27f3adb852b4f1c5c42d78cea5cca", "fetched_at": "2026-08-28T04:08:57.388812+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scala-js/scala-js"}, {"content_hash": "8199892f27cab85bfb2d4ab01e9914ed3924089f23da03b1862e2016314c46fe", "fetched_at": "2026-08-29T09:03:00.216483+00:00", "kind": "homepage", "missing": false, "url": "https://www.scala-js.org/"}, {"content_hash": "58e6e6e4cf62da746245afc76aeca4c54bfc7e14cd01e4685eddd3c57aa7476d", "fetched_at": "2026-08-29T09:03:00.225545+00:00", "kind": "site_page", "missing": false, "url": "https://www.scala-js.org/doc"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.388812+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.388812+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T08:31:24.767728+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e83838e6eb84886815c8aadf756155e180c27f3adb852b4f1c5c42d78cea5cca", "fetched_at": "2026-08-28T04:08:57.388812+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scala-js/scala-js"}, {"content_hash": "8199892f27cab85bfb2d4ab01e9914ed3924089f23da03b1862e2016314c46fe", "fetched_at": "2026-08-29T09:03:00.216483+00:00", "kind": "homepage", "missing": false, "url": "https://www.scala-js.org/"}, {"content_hash": "58e6e6e4cf62da746245afc76aeca4c54bfc7e14cd01e4685eddd3c57aa7476d", "fetched_at": "2026-08-29T09:03:00.225545+00:00", "kind": "site_page", "missing": false, "url": "https://www.scala-js.org/doc"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T08:31:24.767728+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e83838e6eb84886815c8aadf756155e180c27f3adb852b4f1c5c42d78cea5cca", "fetched_at": "2026-08-28T04:08:57.388812+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scala-js/scala-js"}, {"content_hash": "8199892f27cab85bfb2d4ab01e9914ed3924089f23da03b1862e2016314c46fe", "fetched_at": "2026-08-29T09:03:00.216483+00:00", "kind": "homepage", "missing": false, "url": "https://www.scala-js.org/"}, {"content_hash": "58e6e6e4cf62da746245afc76aeca4c54bfc7e14cd01e4685eddd3c57aa7476d", "fetched_at": "2026-08-29T09:03:00.225545+00:00", "kind": "site_page", "missing": false, "url": "https://www.scala-js.org/doc"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T08:31:24.767728+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e83838e6eb84886815c8aadf756155e180c27f3adb852b4f1c5c42d78cea5cca", "fetched_at": "2026-08-28T04:08:57.388812+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scala-js/scala-js"}, {"content_hash": "8199892f27cab85bfb2d4ab01e9914ed3924089f23da03b1862e2016314c46fe", "fetched_at": "2026-08-29T09:03:00.216483+00:00", "kind": "homepage", "missing": false, "url": "https://www.scala-js.org/"}, {"content_hash": "58e6e6e4cf62da746245afc76aeca4c54bfc7e14cd01e4685eddd3c57aa7476d", "fetched_at": "2026-08-29T09:03:00.225545+00:00", "kind": "site_page", "missing": false, "url": "https://www.scala-js.org/doc"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T08:31:24.767728+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e83838e6eb84886815c8aadf756155e180c27f3adb852b4f1c5c42d78cea5cca", "fetched_at": "2026-08-28T04:08:57.388812+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scala-js/scala-js"}, {"content_hash": "8199892f27cab85bfb2d4ab01e9914ed3924089f23da03b1862e2016314c46fe", "fetched_at": "2026-08-29T09:03:00.216483+00:00", "kind": "homepage", "missing": false, "url": "https://www.scala-js.org/"}, {"content_hash": "58e6e6e4cf62da746245afc76aeca4c54bfc7e14cd01e4685eddd3c57aa7476d", "fetched_at": "2026-08-29T09:03:00.225545+00:00", "kind": "site_page", "missing": false, "url": "https://www.scala-js.org/doc"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 97, "longevity": 100, "rhythm": 77}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4944, "days_push": 18, "days_rel": 74, "gap_med": 88, "n_releases_24m": 10}, "score": 91, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}