scala-garden/scala-sculpt
61.2
Adequate · 20 September 2026
725
lines of production code
Scala
primary language
1
measurement over time
What this system is
Sculpt is a Scala 2.13 compiler plugin designed to analyze the dependency structure of source code to support refactoring and modularization efforts. It generates fine-grained dependency graphs in JSON format, tracking 'extends' and 'uses' relationships, and offers a class-level aggregation mode for broader structural views. The system includes utilities for cycle detection, layer calculation, and graph visualization, though the plugin has since been removed from the codebase.
Features
Initial release of Sculpt Scala 2 dependency analysis plugin
Introduces Sculpt, a compiler plugin for analyzing the dependency structure of Scala 2.13 source code to support refactoring efforts like splitting monolithic codebases. The plugin generates fine-grained dependency graphs in JSON format (tracking 'extends' and 'uses' edges) and supports a 'class mode' via the \-P:sculpt:mode=class\ option to aggregate dependencies to the class level. The distribution includes a fat JAR with bundled spray-json, Scala model case classes for graph representation, and REPL tools for loading, saving, and inspecting the dependency graphs.
(repo-wide) · high confidence
Initial release of the Sculpt dependency analysis model
This change introduces the core data model and graph algorithms for the Sculpt tool, enabling users to load, analyze, and visualize Scala dependency structures. It adds classes for representing entities (classes, modules, traits, etc.) and dependencies (uses, extends), along with a mutable graph implementation for managing nodes and edges. The update includes utilities for detecting cycles and organizing code into layers using Tarjan's strongly connected components algorithm, as well as support for converting detailed dependencies into aggregated class-level views. JSON serialization and custom printing are provided to allow users to save and inspect model data.
src/main/scala/com/lightbend/tools/sculpt/model · high confidence
Removals
Removal of the Scala Sculpt plugin
The \SculptPlugin\ component, previously used to aid in modularizing large code bases by extracting dependencies, has been removed from the compiler toolchain. Users relying on the \scalac -Xplugin:scala-sculpt\ integration for dependency analysis will no longer have access to this functionality.
src/main/scala/scala · high confidence
Behavioural changes
Sculpt plugin restructured and output behavior updated
The Sculpt plugin has been moved to the com.lightbend.tools.sculpt.plugin package and now outputs dependency information as JSON (serializable via spray-json) instead of plain text. The plugin supports two output modes: a default fine-grained mode and a 'class mode' (enabled via -P:sculpt:mode=class) that aggregates dependencies. Output can be written to a file specified by -P:sculpt:out=\<path\> or printed to stdout. The dependency extraction logic was refactored to use a traverser pattern and now deduplicates and counts dependency occurrences.
src/main/scala/com/lightbend/tools/sculpt/plugin · high confidence
Test coverage
Added test suite for Sculpt analysis features
Added comprehensive tests for the Sculpt tool's core capabilities, including graph generation, tree printing, cycle detection, layer calculation, and JSON serialization round-trips. The tests use the MUnit framework and validate the tool's output against sample inputs across various scenarios.
src/test · high confidence
Dependencies
Upgrade to Scala 2.13 and MUnit, rebrand to Lightbend
The build has been upgraded from Scala 2.11 to 2.13.18 and switched from ScalaTest to MUnit 1.3.6 for testing. The project organization and GitHub URLs have been updated from Typesafe to Lightbend, and the version is set to 0.1.4-SNAPSHOT. Additionally, the build now bundles spray-json 1.3.6 into the fat JAR, includes README.md and LICENSE in the package, and enables scalafix with organize-imports 0.6.0.
(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 61.
Lenses
- Code Health 100
- Architecture 69
- Maturity 49
- Readiness 61
- Security 100
Changes since last survey
- 300 commits — 299 feature/other, 1 fixes
By area
- (root) — 102 commits
- (repo) — 70 commits
- project/build.properties — 61 commits
- project/plugins.sbt — 50 commits
- src/main — 10 commits
- .github/workflows — 6 commits
- src/test — 1 commit
Notable commits
- fix: fix CI by adding setup-sbt
- change: Add 'Reformat with scalafmt 3.10.4' to .git-blame-ignore-revs
- change: Add 'Reformat with scalafmt 3.10.7' to .git-blame-ignore-revs
- change: Add 'Reformat with scalafmt 3.8.3' to .git-blame-ignore-revs
- change: Add codeps to README
- change: AdoptOpenJDK is now Temurin (#168)
- change: CI: add new CLA checker
- change: CI: bump actions versions
- change: Faster EntityKind deserialization
- change: Merge branch 'main' into update/scala-compiler-2.12.20
- change: Merge branch 'main' into update/scala-compiler-2.13.13
- change: Merge branch 'main' into update/scalafmt-core-3.10.4
- change: Merge pull request #104 from SethTisue/bump-scala-versions
- change: Merge pull request #108 from SethTisue/use-munit
- change: Merge pull request #109 from scala-steward/update/sbt-1.3.13
- change: Merge pull request #111 from scala-steward/update/munit-0.7.11
- change: Merge pull request #112 from scala-steward/update/munit-0.7.12
- change: Merge pull request #117 from SethTisue/version-bumps
- change: Merge pull request #119 from scala-steward/update/munit-0.7.15
- change: Merge pull request #120 from scala-steward/update/sbt-1.4.2
- …and 280 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
scala-garden/scala-sculpt 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 ea6eaedeacd058bf4241c1bf0a5a1de384dfd256 — 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.