scalameta/sbt-scalafmt
57.4
Adequate · 20 September 2026
843
lines of production code
Scala
primary language
1
measurement over time
What this system is
This system is an sbt plugin that integrates the Scalafmt code formatter into the build process. It provides tasks for formatting Scala source files and build definitions, supporting parallel execution, version switching, and various configuration options. The plugin includes comprehensive testing to ensure compatibility across multiple Scala and Scalafmt versions.
Features
Initial release of sbt-scalafmt plugin with Apache 2.0 license
This entry marks the initial creation of the sbt-scalafmt repository, introducing the SBT plugin for the Scalafmt code formatter. The release includes the Apache 2.0 LICENSE, a README with installation instructions for \project/plugins.sbt\, and a \.scalafmt.conf\ configuration file set to version 3.11.5 with Scala 2.13 dialect. It also establishes contributor guidelines via CONTRIBUTING.md and AGENTS.md, and configures Scala Steward to pin specific Scala library versions for dependency updates.
(repo-wide) · high confidence
Behavioural changes
5 commits (0 fixes) modifying bin
A change to existing behaviour in bin — 5 commits, 1 file.
bin · medium confidence · unverified
Improved error reporting and parallel execution control for the SBT plugin
The SBT plugin now provides more detailed error messages, including stack traces when enabled, and allows users to control the maximum number of parallel scalafmt tasks via a new 'scalafmt' concurrency tag. Additionally, the plugin supports unified diff output for formatting errors and includes Scala 3 compatibility fixes for credential handling.
plugin/src/main · high confidence
Major plugin rewrite and API expansion for sbt 2.x compatibility
The plugin has been significantly refactored to support sbt 2.x, introducing new tasks such as scalafmtAll, scalafmtCheckAll, scalafmtRepo, and scalafmtSbtOnLoad, while deprecating scalafmtIncremental. The return type of scalafmtCheck and scalafmtSbtCheck has changed from Boolean to Unit, and scalafmtConfig now requires an existing file path rather than an optional one. The implementation now uses scalafmt-dynamic for version switching, supports parallel formatting via scalafmtParallelism, and includes new settings for detailed error logging, file filtering, and diff output.
repository · high confidence
Migrate build infrastructure to sbt 2.0 and sbt-ci-release
The project build has been upgraded to use sbt version 2.0.8, replacing the previous 1.1.6 version. The custom publishing logic previously defined in \project/PublishPlugin.scala\ has been removed in favor of the \sbt-ci-release\ plugin (version 1.12.1), which now handles versioning, signing, and Sonatype publishing. Additionally, legacy plugins such as \sbt-coursier\, \sbt-dynver\, \sbt-shading\, \sbt-sonatype\, and \sbt-pgp\ have been removed from \project/plugins.sbt\ as their functionality is now managed by the new release plugin.
project · high confidence
Test coverage
Add test for dependency overrides in sbt-scalafmt; Added tests for sbt-scalafmt on-load formatting behavior; Updated SBT scripted tests for Scalafmt v2.2.1 and v3.1.0 with expanded coverage.
Dependencies
Update scalafmt to 3.11.5 and migrate build to sbt-dynver
The sbt-scalafmt plugin now uses scalafmt 3.11.5 (via scalafmt-sysops and scalafmt-dynamic-core) and upgrades the build infrastructure to use sbt-dynver for versioning, supporting both Scala 2.12.21 and Scala 3.8.4. The build.sbt has been refactored to remove the old shading plugin setup and PGP settings from the main build, moving them to a global scope, and adds explicit support for sbt 2.0.0 when using Scala 3. Additionally, several scripted tests have been updated to reflect new Scala versions and formatting expectations, including new tests for dependency overrides and onLoad warnings.
(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 57.
Lenses
- Code Health 97
- Architecture 100
- Maturity 44
- Readiness 58
- Security 65
Changes since last survey
- 300 commits — 291 feature/other, 9 fixes
By area
- (root) — 124 commits
- plugin/src — 83 commits
- project/build.properties — 41 commits
- .github/workflows — 19 commits
- project/plugins.sbt — 16 commits
- (repo) — 14 commits
- .github/ISSUE_TEMPLATE.md — 1 commit
- .github/dependabot.yml — 1 commit
- bin/scalafmt — 1 commit
Notable commits
- fix: A minor grammar fix
- fix: Allow fixed SNAPSHOT version when built locally
- fix: Bugfix: forgot to use the ScalafmtLogger, fix that
- fix: Fix ScalafmtLogger.success infinite self-recursion
- fix: Fix cache invalidation caused by unscoped lookup (#192)
- fix: Fix scalafmtSbt tooltips to say project/*/.scala
- fix: ScalafmtPlugin: fix version tags comparison
- fix: ScalafmtPlugin: move inConfig, fix warning
- fix: fix: prevent Scala stdlib filtering in transitive plugin scenarios (#441)
- change: Add 'Reformat with scalafmt 3.10.4' to .git-blame-ignore-revs
- change: Add AGENTS.md, with CLAUDE.md
- change: Add CONTRIBUTING.md
- change: Add a template describing issue requirements
- change: Add filterMode=none, to ignore project.git
- change: Add sbt-vspp for publishing the SBT plug-in in a Maven-consistent format
- change: Add scalafmtParallelism setting, thread through FormatSession
- change: Add scalafmtRepo/scalafmtCheckRepo build-root tasks
- change: Add scalafmtSbtOnLoad setting
- change: Add tests for a multi-source project
- change: Add transient annotation to taskKey
- …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
scalameta/sbt-scalafmt 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 1622d435fb0ce1eab7b8ea8dea89b135ee6288cb — 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.