sbt, the interactive build tool
Go to file
Brian Hotopp 3f6fd595ff [2.x] feat: Resolve dependencies in parallel under the super shell
Building on #9270 (which parallelized resolution in non-interactive runs by
narrowing the lm-coursier lock to only fire while coursier renders its
interactive progress bar), this makes `update` resolve in parallel under the
interactive super shell as well.

Under the super shell, LMCoursier.coursierLoggerTask previously returned None,
so coursier drew its own per-module progress bars and resolution stayed
serialized (those bars are not safe to render concurrently). It now supplies a
CacheLogger, which both suppresses coursier's bars and flips #9270's
progressBarActive predicate to false, so resolution runs in parallel. Progress
is rendered at the sbt task level instead.

Resolution progress is tracked by a per-command ResolutionProgress instance,
created in MainLoop.next alongside Keys.taskProgress and held under an
AttributeKey with the same lifecycle -- no JVM-global state. coursierLoggerTask
reads it from State and hands it to the ResolutionProgressLogger that coursier's
download threads call; TaskProgress holds the same instance and appends a single
aggregate line at render time, e.g. "Updating 18 modules, 240 artifacts,
31.0 MiB". The instance is born empty per command and discarded with it, so
totals never leak across commands and the count never resets mid-update (a
single update runs a resolve phase and a separate artifacts phase).

v1 renders one aggregate line because it needs no schema change; per-module
status lines (which would add a status field to ProgressItem) are a follow-up.
UpdateRun's report-building lock is left as a separate follow-up since the
network-heavy paths (ResolutionRun/ArtifactsRun) are already unlocked.

re: #5627

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 15:46:53 -04:00
.github [2.x] Migrate FarmHash usage to xxhash64 (#9267) 2026-05-30 19:14:53 -04:00
buildfile/src [2.x] fix: Fixes backtick-quoted project handling (#9277) 2026-05-30 22:09:46 -04:00
client Revert "[2.x] feat: Enable musl static linking for sbtn on JDK 17+ (#8464)" (#8557) 2026-01-16 00:06:28 -05:00
contributing-docs [2.x] Scala 3.8.3 (#8997) 2026-04-05 14:28:47 -04:00
core-macros/src [2.x] fix: Add warning about trainsient key (#9288) 2026-06-01 06:29:44 -04:00
internal [2.x] sjson-new 0.15.0 2026-06-01 01:52:50 -04:00
launch [2.x] feat: repositories_force support (#8761) 2026-02-20 01:52:59 -05:00
launcher-package [2.x] refactor: format launcherPackageIntegrationTest (#9245) 2026-05-18 14:41:52 -04:00
licenses move remaining pieces of sbt subproject to sbt_pending and fix notices 2010-09-21 21:55:50 -04:00
lm-core Contraband 0.9.0 2026-06-01 01:52:50 -04:00
lm-coursier [2.x] ci: Scalafmt 3.11.1 (#9279) 2026-05-31 16:01:15 -04:00
lm-ivy/src Contraband 0.9.0 2026-06-01 01:52:50 -04:00
main [2.x] feat: Resolve dependencies in parallel under the super shell 2026-06-02 15:46:53 -04:00
main-actions/src [2.x] ci: Scalafmt 3.11.1 (#9279) 2026-05-31 16:01:15 -04:00
main-command/src [2.x] Reimplement FarmHash 2026-05-31 16:07:28 -04:00
main-settings/src [2.x] ci: Scalafmt 3.11.1 (#9279) 2026-05-31 16:01:15 -04:00
notes [2.x] feat: Resolve dependencies in parallel under the super shell 2026-06-02 15:46:53 -04:00
project [2.x] sjson-new 0.15.0 2026-06-01 01:52:50 -04:00
protocol/src Contraband 0.9.0 2026-06-01 01:52:50 -04:00
run [2.x] ci: Scalafmt 3.11.1 (#9279) 2026-05-31 16:01:15 -04:00
sbt-app/src [2.x] ci: Scalafmt 3.11.1 (#9279) 2026-05-31 16:01:15 -04:00
sbt-ivy/src/main/scala/sbt [2.x] refactor: Use Files.writeString instead of Files.write (#9093) 2026-04-15 22:29:19 -04:00
sbt-remote-cache/src/main/scala/sbt remove unnecessary `case` 2025-02-22 08:48:29 +09:00
sbtw [2.x] ci: Scalafmt 3.11.1 (#9279) 2026-05-31 16:01:15 -04:00
scripted-sbt [2.x] ci: Scalafmt 3.11.1 (#9279) 2026-05-31 16:01:15 -04:00
scripts Fix lm-coursier scripted 2024-10-11 14:30:55 +02:00
server-test/src [2.x] ci: Scalafmt 3.11.1 (#9279) 2026-05-31 16:01:15 -04:00
src [2.x] Add scripted test for #7838 (#8541) 2026-01-20 12:13:27 -05:00
tasks [2.x] ci: Scalafmt 3.11.1 (#9279) 2026-05-31 16:01:15 -04:00
tasks-standard [2.x] ci: Scalafmt 3.11.1 (#9279) 2026-05-31 16:01:15 -04:00
testing Contraband 0.9.0 2026-06-01 01:52:50 -04:00
util-cache [2.x] Reimplement FarmHash 2026-05-31 16:07:28 -04:00
util-collection [2.x] ci: Scalafmt 3.11.1 (#9279) 2026-05-31 16:01:15 -04:00
util-tracking [2.x] ci: Scalafmt 3.11.1 (#9279) 2026-05-31 16:01:15 -04:00
worker/src [2.x] fix: Include test arg into hash (#9222) 2026-05-16 04:12:33 -04:00
zinc-lm-integration/src [2.x] ci: Scalafmt 3.11.1 (#9279) 2026-05-31 16:01:15 -04:00
.git-blame-ignore-revs [2.x] blame ignore commits (#8814) 2026-02-25 10:51:21 -05:00
.gitattributes [2.x] Update .gitattributes for contraband files (#9076) 2026-04-12 13:51:06 -04:00
.gitignore [2.x] fix : BSP compile returns StatusCode.Error on failure (#8104) (#8709) 2026-02-07 11:01:49 -05:00
.gitmodules Move metadata to lm-coursier/metadata 2024-10-09 09:44:42 +02:00
.java-version Scala 3.8.0 2026-01-24 04:52:28 -05:00
.jvmopts Add .jvmopts 2023-11-25 01:06:30 -05:00
.mailmap Add mailmap 2019-06-11 09:30:14 +02:00
.sbtopts Restore .sbtopts file 2020-11-19 12:42:26 -08:00
.scala-steward.conf Pin slf4j-api 2023-01-02 22:06:46 -05:00
.scalafix.conf [2.x] ci: Add scalafix DisableSyntax.noReturns (#8922) 2026-03-19 10:48:10 -04:00
.scalafmt.conf [2.x] ci: Scalafmt 3.11.1 (#9279) 2026-05-31 16:01:15 -04:00
AGENTS.md [2.x] fix: Fix spelling and link in AGENTS docs (#8837) 2026-03-01 00:25:09 -05:00
CONTRIBUTING.md [2.x] fix: Fix typo in CONTRIBUTING guide 2026-02-28 20:44:19 -06:00
LICENSE Transfer copyright to Scala Center 2023-06-20 16:39:07 +02:00
NOTICE Transfer copyright to Scala Center 2023-06-20 16:39:07 +02:00
PROFILING.md docs: Update flamegraph guide --lines 2025-11-09 18:06:13 -05:00
README.md [2.x] docs: Move to CONTRIBUTING (#8629) 2026-01-25 15:48:09 -05:00
SUPPORT.md Transfer copyright to Scala Center 2023-06-20 16:39:07 +02:00
build.sbt Update mima setting (#9294) 2026-06-01 23:26:07 -04:00
sbt [2.x] Update sbtn to 2.0.0-RC14 for timeout fix (#9240) 2026-05-17 14:12:57 -04:00
sbt-allsources.sh Merge remote-tracking branch 'lm/wip/sbt-2.x' into 2.x-lm-coursier 2024-10-09 08:50:03 +02:00
sbt.sh Implement sbt-launch.jar download 2021-04-19 23:43:15 -04:00
server.md setting query is "sbt/setting" 2017-10-03 01:45:06 -04:00

README.md

CI Latest version Discord

sbt

sbt is a build tool for Scala, Java, and more.

For general documentation, see https://www.scala-sbt.org/.

sbt 2.x

This is the 2.x series of sbt. The source code of sbt is split across several GitHub repositories, including this one.

  • sbt/io hosts sbt.io module.
  • sbt/zinc hosts Zinc, an incremental compiler for Scala.
  • sbt/sbt, this repository hosts modules that implement the build tool.
  • Setup: Describes getting started with the latest binary release.
  • FAQ: Explains how to get help and more.
  • sbt/sbt-zero-seven: hosts sbt 0.7.7 and earlier versions

Issues and Pull Requests

Please read CONTRIBUTING carefully before opening a GitHub Issue or a pull request.

If you're looking for an idea for a contribution, issues labeled with good first issue or help wanted might be good starting points.

If you would like to ask questions about sbt, there's sbt channel on Scala Discord, but it would be good to gather questions on Stackoverflow.

license

See LICENSE.