Skip to content
CAI
Software that uses CAICheck a score

scalameta/sbt-scalafmt

57.4

Adequate · 20 September 2026

843

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