typelevel/sbt-typelevel
66.0
Adequate · 20 September 2026
5.2k
lines of production code
Scala
primary language
1
measurement over time
What this system is
This system is a collection of SBT plugins designed to standardize and automate the build, release, and documentation workflows for Scala projects. It provides opinionated defaults for compiler settings, integrates with GitHub Actions for continuous integration and release management, and handles binary compatibility checks via MiMa. The toolkit also supports cross-platform compilation for JVM, Scala.js, and Scala Native, along with automated site generation and publishing to Sonatype.
How it got here
2014–2021 — Initial project scaffolding and plugin development
15 changes.
This period marks the initialization of the sbt-typelevel repository, establishing its Apache 2.0 license, CI infrastructure, and core documentation. It involved the development of a comprehensive suite of SBT plugins to automate release workflows, including versioning, binary compatibility checking, and Sonatype publishing. The work also introduced foundational utilities for Git integration, cross-platform build support, and standardized Scala compiler settings.
2022 — automation and site tooling
6 changes.
This period focused on expanding the Typelevel build ecosystem with plugins for automated site generation, Mergify configuration, and Scalafix integration. It also introduced GitHub Actions concurrency controls and artifact cleanup to streamline CI workflows, alongside updates to the site theme and kernel versioning tests.
Features
Add Scalafix integration with configurable typelevel-scalafix version
This change introduces the \TypelevelScalafixPlugin\ to the \scalafix\ module, enabling Scalafix linting and rule testing within the build. It provides a \tlScalafixProject\ macro for defining structured scalafix rule projects (rules, input, output, tests) and configures the build to use SemanticDB. Users can control the version of the \typelevel-scalafix\ dependency via the \tlTypelevelScalafixVersion\ setting, which defaults to 0.5.0, or set it to None to omit the dependency entirely.
scalafix · high confidence
Introduce CrossRootProject for multi-platform CI workflows
The CI plugin now provides a \CrossRootProject\ builder (accessible via \tlCrossRootProject\) that automatically creates a root project along with JVM, Scala.js, and Scala Native aggregate subprojects. This simplifies the setup of cross-platform builds by handling project aggregation and enabling the appropriate Typelevel CI plugins for each platform target, while also configuring the GitHub Actions build matrix to include a 'project' axis for running checks on each platform separately.
ci · high confidence
Introduce GitHelper and V model for release versioning
The kernel module now includes a new GitHelper utility and a V case class to manage version parsing and release detection. GitHelper.previousReleases retrieves strictly previous release tags from the Git history, supporting options to filter by HEAD reachability and to exclude tags on the current commit. The V model parses semantic version strings into major, minor, patch, and prerelease components, enabling comparison logic that correctly handles prereleases and binary compatibility checks based on version series.
kernel/src/main/scala/org/typelevel/sbt/kernel · high confidence
Introduce GitHub plugin for automatic repository metadata and source-linking
A new \TypelevelGitHubPlugin\ is added to automatically detect the GitHub repository (checking \upstream\ then \origin\ remotes) and populate standard SBT settings including \scmInfo\, \homepage\, \releaseNotesURL\, and \developers\ based on the detected user and repo. For Scala 3, it configures Scaladoc3 source links to GitHub; for Scala 2, it sets up source URLs with version-aware path formatting. Additionally, a \TypelevelScalaJSGitHubPlugin\ is introduced to map local source URIs to GitHub raw content for Scala.js sourcemaps (skipping mapping if uncommitted changes exist) and enables the Scala.js linker's batch mode when running in GitHub Actions CI.
github · high confidence
Introduce SBT plugin for automated Sonatype CI releases
The new \TypelevelSonatypeCiReleasePlugin\ adds SBT commands and GitHub Actions workflow settings to automate publishing to Sonatype Central. Users can configure release triggers via \tlCiReleaseTags\ (for v-prefixed tags) and \tlCiReleaseBranches\ (for branch pushes). The plugin automatically injects Sonatype credentials from GitHub secrets and appends a step summary to the workflow run, displaying the published version and the resolver URL for snapshots.
sonatype-ci-release · high confidence
Introduce Typelevel MiMa plugin with automatic previous version detection
Adds the Typelevel MiMa plugin, which integrates with the standard MiMa plugin to automate binary compatibility checks. The plugin automatically determines previous versions to compare against by analyzing git tags and respecting the new \tlVersionIntroduced\ setting, which allows users to specify when specific Scala binary versions were introduced. It also ensures that binary compatibility checks are skipped for artifacts that are not published.
mima · high confidence
Introduce TypelevelKernelPlugin with command alias and Scala 3 detection settings
The new TypelevelKernelPlugin adds the tlIsScala3 setting key to detect Scala 3 builds and introduces tlCommandAliases, allowing users to define custom command aliases via a setting that are automatically registered on build load and cleaned up on unload. It also exposes tlReleaseLocal as a default command alias for local publishing and retains the deprecated tlSkipIrrelevantScalas and tlReplaceCommandAlias settings for backward compatibility.
kernel/src/main/scala/org/typelevel/sbt · high confidence
Introduce TypelevelSitePlugin for automated site generation and publishing
Adds the TypelevelSitePlugin, which integrates mdoc and Laika to generate documentation sites and configures GitHub Actions workflows for publishing. The plugin provides settings to control the Helium theme, API documentation URLs, Java versions for CI, and publishing targets (branch or tag-based), streamlining the process of building and deploying project sites.
site/src/main/scala/org/typelevel/sbt · high confidence
Introduce sbt-typelevel-mergify plugin for automated .mergify.yml generation
This change adds a new sbt plugin that automatically generates and validates a \.mergify.yml\ configuration file based on build settings. It provides tasks to generate the file (\mergifyGenerate\) and check for drift (\mergifyCheck\), and exposes settings to configure pull request rules, including automatic labeling based on file paths, success conditions derived from CI jobs, and an optional auto-merge rule for Scala Steward PRs. The plugin supports defining Mergify actions such as merging, labeling, and requesting reviews, as well as composing conditions.
mergify · high confidence
Introduce standalone CI release plugin
A new \TypelevelCiReleasePlugin\ is added to the \ci-release\ module, providing a standalone SBT plugin for CI-based releases. It automatically enables binary compatibility checks (\tlCiMimaBinaryIssueCheck\) and documentation checks (\tlCiDocCheck\) by requiring \TypelevelVersioningPlugin\, \TypelevelMimaPlugin\, \TypelevelCiPlugin\, \TypelevelSonatypeCiReleasePlugin\, and \TypelevelCiSigningPlugin\.
ci-release · high confidence
Introduce workflow concurrency control and automated artifact cleanup
The sbt-github-actions plugin now supports GitHub Actions concurrency groups to prevent redundant workflow runs, with concurrency enabled by default using the workflow name and ref as the group key. Additionally, a new \clean.yml\ workflow is generated by default to automatically delete repository artifacts on push, helping to manage storage and keep the build environment clean.
github-actions/src · high confidence
Introduces TypelevelSettingsPlugin with opinionated Scala compiler defaults
The new TypelevelSettingsPlugin establishes a baseline configuration for Scala projects, defaulting the JVM release target to 8 and enabling fatal warnings only when explicitly requested. It automatically includes the scalac-compat-annotation library for supported Scala versions (2.12, 2.13, and 3) and adds compiler plugins like kind-projector and better-monadic-for for Scala 2. It configures version-specific scalac options, applying stricter linting and unused-import checks for Scala 2.13+ while maintaining compatibility with older 2.12 and 2.11 versions, and enables parallel backend compilation for Scala 2.12.5+ and 2.13.
settings · high confidence
Introduction of TypelevelPlugin and TypelevelBspPlugin
The core module now includes two new SBT plugins: TypelevelPlugin, which aggregates core settings (CI release, GitHub Actions, header checks) and defines command aliases like prePR and tlPrePrBotHook, and TypelevelBspPlugin, which adds configurable BSP support for cross-projects. Users enabling TypelevelPlugin will automatically get these aggregated behaviors and the new BSP configuration capability.
core · high confidence
New CI signing plugin with cross-platform PGP key import
The new TypelevelCiSigningPlugin adds automated GPG key import steps to GitHub Actions workflows, handling both passphrase-protected and unencrypted keys. It includes a specific workaround for macOS runners to correctly decode base64-encoded secrets, ensuring consistent key import behavior across Linux and macOS environments.
ci-signing · high confidence
New NoPublishPlugin disables publishing and tracks ignored modules
The no-publish module now includes a new NoPublishPlugin that automatically disables all publishing tasks (publish, publishLocal, publishArtifact, and publish/skip) for projects that apply it. Additionally, it introduces a global setting noPublishModulesIgnore to track which modules and their Scala cross-versions are being ignored, facilitating better integration with dependency submission tools by explicitly listing these non-publishing artifacts.
no-publish · high confidence
New Typelevel Sonatype and Unidoc SBT plugins
This change introduces two new SBT plugins: TypelevelSonatypePlugin and TypelevelUnidocPlugin. The Sonatype plugin configures publishing to Sonatype Central (including snapshot handling), sets up the \tlRelease\ command alias to run binary compatibility checks and publish, and manages API URL fallbacks to javadoc.io. The Unidoc plugin integrates with ScalaUnidoc to generate unified documentation, disables MiMa checks for unidoc artifacts, and automatically sets the \tlSiteApiModule\ for site generation.
sonatype · high confidence
New TypelevelVersioningPlugin introduces configurable version derivation logic
The new TypelevelVersioningPlugin provides a structured way to derive project versions from Git tags and history. It introduces settings like tlBaseVersion to define the current series (e.g., 0.2, 3.5) and tlUntaggedAreSnapshots to control whether untagged commits result in snapshot versions. The plugin enforces that the base version must be of the form x.y and fails if a tag is older than the base version. It also exposes tlLatestVersion and tlLatestPreReleaseVersion to report the most recent stable and pre-release tags respectively. The versioning logic ignores dirty working trees for tag-based versions and appends commit hashes and timestamps to untagged builds.
versioning · high confidence
Repository initialization with Apache 2.0 license and CI configuration
The repository has been initialized with a comprehensive set of configuration files and documentation. The project license has been switched from MIT to Apache 2.0. A new README provides an overview of sbt-typelevel's features, including auto-generated GitHub Actions, MiMa binary compatibility checking, and Sonatype publishing. The repository now includes standard configuration files such as \.editorconfig\, \.gitignore\, and \.scalafmt.conf\ (version 3.11.4). CI automation is configured via \.mergify.yml\ for automatic merging of Scala Steward PRs and auto-labeling, while \.scala-steward.conf\ pins specific versions for sbt, scala-library, and sbt-scalajs. Additionally, \.scalafix.conf\ is added to enable the OrganizeImports rule, and \.all-contributorsrc\ is set up to track and display contributors in the README.
(repo-wide) · high confidence
Behavioural changes
Typelevel site plugin adopts new light theme and refined syntax highlighting
The site plugin now applies a new default light theme with updated primary, secondary, and text colors, replacing the previous dark/inverted scheme. Syntax highlighting for Scala code has been brightened and adjusted to improve contrast between literals, comments, and keywords. The plugin also introduces separate default settings for Typelevel organization and affiliate projects, and deprecates the previous top-level color properties in favor of the new internal color configuration.
site/src/main/scala/org/typelevel/sbt/site · high confidence
Test coverage
Added unit tests for the SBT kernel versioning logic
Added a new test suite (VSuite) for the SBT kernel module that verifies the behavior of the V class, including version parsing, prerelease detection, series comparison, binary compatibility checks, and version ordering.
kernel/src/test · high confidence
Dependencies
Dependency updates across sbt-typelevel build modules
This release updates dependencies in the sbt-typelevel build infrastructure, including sbt-scalafmt to 2.5.6, sbt-header to 5.10.0, sbt-scalajs to 1.13.2, sbt-git to 2.1.0, sbt-crossproject to 1.3.2, sbt-scala-native-crossproject to 1.3.2, sbt-mima-plugin to 1.1.6, sbt-unidoc to 0.6.1, sbt-mdoc to 2.9.0, laika-sbt to 1.3.2, sbt-scalafix to 0.14.7, snakeyaml to 1.33, circe-yaml to 0.14.2, and coursier to 2.1.24.
(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 66.
Lenses
- Code Health 94
- Architecture 100
- Maturity 68
- Readiness 59
- Security 64
Changes since last survey
- 300 commits — 293 feature/other, 7 fixes
By area
- (repo) — 127 commits
- (root) — 55 commits
- github-actions/src — 21 commits
- site/build.sbt — 14 commits
- scalafix/build.sbt — 9 commits
- project/build.sbt — 8 commits
- sonatype/build.sbt — 8 commits
- settings/src — 7 commits
- .github/workflows — 6 commits
- github-actions/mima.sbt — 6 commits
- ci/src — 5 commits
- kernel/src — 5 commits
- sonatype/src — 5 commits
- core/src — 4 commits
- sonatype-ci-release/src — 4 commits
- core/build.sbt — 3 commits
- mima/build.sbt — 3 commits
- scalafix/src — 3 commits
- github/src — 2 commits
- project/build.properties — 2 commits
Notable commits
- fix: Fix productPrefix
- fix: Grammar fix in secrets.md
- fix: Merge pull request #707 from armanbilge/fix/macos-latest-is-14
- fix: Merge pull request #709 from typelevel/pr/fix-macos-brew-sbt
- fix: Merge pull request #727 from armanbilge/fix/sonatype-credential-host-scoping
- fix: Merge pull request #757 from typelevel/revert-754-update/sbt-sonatype-3.12.0
- fix: Revert "Update sbt-sonatype to 3.12.0"
- change: Update contributors
- change: Add 'Reformat with scalafmt 3.10.6' to .git-blame-ignore-revs
- change: Add 'Reformat with scalafmt 3.8.5' to .git-blame-ignore-revs
- change: Add 'with*' for Permissions.Specify
- change: Add javafmtAll to prePR
- change: Add with* methods for WorkflowJob
- change: Add bincompat methods
- change: Add continueOnError option to WorkflowStep
- change: Add mima override for what should be a safe change with early-semver
- change: Add mima overrides for new with* methods on WorkflowJob
- change: Add more with*, update*, and add* for Workflow step and jobs.
- change: Add tests for ordering of versions
- change: Allow defining outputs for GHA jobs
- …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
typelevel/sbt-typelevel 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 7b0a0b9d77686c477e336ddf8dd30fd1b88e939a — 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.