sbt/sbt-buildinfo
62.4
Adequate · 20 September 2026
1.1k
lines of production code
Scala
primary language
1
measurement over time
What this system is
This system is an sbt plugin that generates build-time information files, such as BuildInfo.scala or BuildInfo.java, by exposing project metadata and task results as compile-time constants. It supports multiple Scala versions (2.12, 2.13, 3) and Java, offering configurable renderers for case classes, objects, and static fields. The plugin integrates with the sbt build lifecycle, handling caching, cross-building, and scoped keys to ensure efficient and type-safe generation of build artifacts.
How it got here
2012 — sbt 2.x and Scala 3 modernization
6 changes.
The project underwent a major architectural refactor to support modern sbt features and multiple Scala versions, migrating to the AutoPlugin architecture and introducing a pluggable renderer system. This update included comprehensive scripted tests to verify compatibility with sbt 2.x and Scala 2.12/2.13, ensuring correct BuildInfo generation across single and multi-project setups.
2013–2017 — scripted test coverage expansion
5 changes.
This period focused on expanding the plugin's test suite by adding scripted tests for various BuildInfo features, including caching, options, build time, package paths, and custom trait support. The work ensured that generated BuildInfo.scala files were correctly produced and cached under different configuration scenarios.
2018–2024 — Scala 3 compatibility and test expansion
7 changes.
This period focused on adding a Scala 3 compatibility layer to ensure correct macro and type system behavior with sbt 2.x. It also significantly expanded test coverage by adding scripted and compile-only tests for task graph execution, constant value generation, Java renderers, import skipping, and scoped key handling.
Behavioural changes
Major architectural refactor of sbt-buildinfo plugin
The plugin has been completely rewritten to support modern sbt features and multiple Scala versions. Key changes include: migration to sbt AutoPlugin architecture replacing the legacy Plugin trait; introduction of a pluggable renderer system (BuildInfoRenderer) supporting Scala 2/3 case classes/objects and Java renderers; new BuildInfoKey type system with Entry\[A\] abstraction for type-safe key handling; added support for sbt 2.x cross-building; new BuildInfoOption flags (BuildTime, ToMap, ToJson, Traits, PackagePrivate, ConstantValue, ImportScalaPredef); replacement of java.util.Date with java.time.Instant for build timestamps; improved caching with hash-based invalidation; and comprehensive PluginCompat layer for Scala 2.12+ compatibility.
src/main/scala · high confidence
Scala 3 compatibility layer for sbt build info keys
Added Scala 3-specific implementations of the build info key system (BuildInfoKey, Entry, and PluginCompat) to ensure correct behavior with sbt 2.x. This change introduces a compatibility layer that handles Scala 3's macro and type system requirements, specifically ensuring that task keys are expanded correctly within setting macros to run as part of the build process rather than separately, and providing necessary implicit conversions and type aliases for sbt 2.x integration.
src/main/scala-3 · high confidence
Test coverage
Added compile-only test for BuildInfoKey syntax; Added scripted test for BuildInfo constant value generation; Added scripted test for BuildInfo generation in subdirectory; Added scripted test for BuildInfo options; Added scripted test for BuildInfoOption.BuildTime; Added scripted test for buildInfoUsePackageAsPath; Added scripted test for buildinfo caching behavior; Added scripted test for case class renderer with custom trait support; Added scripted test for multi-project BuildInfo generation; Added scripted tests for Java singleton and static fields renderers; Added scripted tests for sbt-buildinfo; Added scripted tests for sbt-buildinfo import skipping behavior; Added scripted tests for task graph execution behavior; Added test for subproject scoped key handling; Updated scripted tests for Scala 2.12.21 and sbt 2.x compatibility.
Dependencies
Updated build infrastructure and removed legacy plugins
The project's build configuration has been updated to use sbt version 1.13.0 and introduced a new Dependencies.scala file defining the manifesto library. The sbt-salad-days plugin (v0.2.0) and sbt-ci-release plugin (v1.12.1) have been added to plugins.sbt, while the legacy ls-sbt plugin and its associated resolvers have been removed from plugin.sbt.
project · 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 62.
Lenses
- Code Health 97
- Architecture 100
- Maturity 54
- Readiness 56
- Security 69
Changes since last survey
- 300 commits — 277 feature/other, 23 fixes
By area
- (repo) — 111 commits
- (root) — 69 commits
- src/sbt-test — 46 commits
- src/main — 41 commits
- .github/workflows — 10 commits
- project/build.properties — 10 commits
- project/bintray.sbt — 3 commits
- notes/0.9.0.markdown — 2 commits
- project/plugins.sbt — 2 commits
- notes/0.10.0.markdown — 1 commit
- notes/0.3.2.markdown — 1 commit
- notes/0.6.0.markdown — 1 commit
- notes/0.7.0.markdown — 1 commit
- project/git.sbt — 1 commit
- project/ls.sbt — 1 commit
Notable commits
- fix: Displays values in ScalaDoc. Fixes #30
- fix: Explicitly specify UTF-8 to write the file. Fixes #76
- fix: Fix caseclassrenderer test
- fix: Fix conflicting imports and update tests.
- fix: Fix cross test
- fix: Fix infix syntax warnings
- fix: Fix subproject scoped key handling
- fix: Fix warning
- fix: Fix warning about Map[String, Any]
- fix: Fixes #38. Try to get more return type
- fix: Generates fully qualified name for java.io.File and java.net.URL so we can use -Ywarn-unused-import. Fixes #74
- fix: Merge pull request #111 from damdev/fix-caseclassrenderer-issue110
- fix: Merge pull request #133 from regadas/fix/tests
- fix: Merge pull request #140 from magneticflux-/feature/fix#127-add-final-modifier
- fix: Merge pull request #185 from martingd/bug-bumpversion-0.11.0
- fix: Merge pull request #235 from xuwei-k/fix-warn-fun-apply
- fix: Merge pull request #57 from liff/bugfix/sbt-version-for-append-test
- fix: More Sonatype fix
- fix: Test using both Scala 2.13 and 2.12, fix symbol literal
- fix: add -Xfuture option. fix procedure syntax warning
- …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
sbt/sbt-buildinfo 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 2d856cd98f23cf61edc31c20fb6e38a72d188c8c — 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.