sbt Release Notes

Follow

11 release notes curated from 1 source by the Releasebot Team. Last updated: Oct 18, 2026

Get this feed:
  • Oct 18, 2026
    • Date parsed from source:
      Oct 18, 2026
    • First seen by Releasebot:
      Oct 18, 2026
    sbt logo

    sbt

    2.0.11

    sbt releases a maintenance update that fixes SemanticDB permissions, resolver configuration, client and BSP connections, task output, test reporting, and compile hangs, while improving reliability across remote caching and logging.

    🐛 bug fixes

    • fix: Fix AccessDeniedException writing SemanticDB by @eed3si9n in #9878
    • fix: Fixes .m2/settings.xml overriding sbtResolvers by @eed3si9n in #9828
    • fix: Keep accepting after a client fails by @kitbellew in #9691
    • fix: Fix task output lost by the thin client under CPU load by @eed3si9n in #9868
    • fix: Read all forked test output before reporting the fork's exit by @eugkhp in #9860
    • fix: Use Path.userHome to work around user.home returning ? by @eed3si9n in #9866
    • fix: Fail a gRPC batch read when a blob fails by @eugkhp in #9904
    • fix: Fix pipelined compile hanging when compile inputs fail by @jleider in #9896
    • fix: Workaround compiler-interface eviction when depending on the remote cache plugin by @eed3si9n in #9913
    • Make logging robust against closed sbtn by @eed3si9n in #9911
    • fix: Fix BSP connection getting dropped by @eed3si9n in #9911

    behind the scenes

    • Update mima setting by @eed3si9n in #9869

    Full Changelog: v2.0.10...v2.0.11

    Original source
  • Oct 11, 2026
    • Date parsed from source:
      Oct 11, 2026
    • First seen by Releasebot:
      Oct 13, 2026
    sbt logo

    sbt

    2.1.0-RC1

    sbt releases 2.1.0-RC1 with Scala 3.9 metabuild support and Ivyless publishing, plus clearer test summaries, configurable test scheduling and caching, and broad performance improvements and bug fixes. Plugin compatibility changes mean builds must use the matching sbt and Scala versions.

    Changes with compatibility implications

    Metabuild is updated to Scala 3.9.

    Apache Ivy is removed from the dependency.

    Scala 3.9

    sbt 2.1.0 updates the Scala version used by the metabuild to Scala 3.9.0.

    Since both sbt 2.x and Scala 3.x are only backward compatible across minor versions, appropriate Scala version must be used for building sbt plugins. Also a plugin built using sbt 2.1.x will not work on sbt 2.0.x:

    sbt 2.x Scala 3.x Plugin works on sbt 2.0.x 2.0.x 3.8.x ✅ 2.1.0 3.9.x ❌

    Publishing

    sbt 2.1.0 removes Apache Ivy from its transitive dependency, and implements Ivyless publishing.

    This was contributed by @bitloi, @fury0928, @BrianHotopp, @mkurz, @stasimus, @jozanek, and @eed3si9n in #8686, #8866, #8894, #8975, #8988, #8996, #9069, #9463, and #9533, #9615, #9756, #9804, #9806, #9811, #9814 etc.

    Test summary

    When tests are executed, sbt 2.1.0 displays a test summary at the end, listing the failed test suites as follows:

    [error] Test summary (2 test tasks failed):
    [error] a / Test / testQuick
    [error] com.example.a.TestA FAIL
    [error] b / Test / testQuick
    [error] com.example.b.TestB FAIL
    [error]
    [error] failed: total 4, failed 2, errors 0, passed 2, cached 2
    

    Successful tests will display only a terse summary by default:

    [info] passed: total 4, failed 0, errors 0, passed 4, cached 4
    

    --test_summary=success can override the behavior to list the successful test as well. Test summary was contributed by @eed3si9n and @BrianHotopp in #9602 + #9214.

    Test cache opt-out

    sbt 2.1.0 can let you opt out of test result caching:

    $ sbt test --cache_test_result=false
    

    This was contributed by @anatoliykmetyuk in #9675.

    workerMaxInstances and testTopology

    sbt 2.1.0 adds new settings workerMaxInstances and testTopology to control test scheduling, especially of the forked tests. Use Global / workerMaxInstances to change the number of worker instances. The default is set to 2:

    // or sbt -Dsbt.worker_max_instances=2
    Global / workerMaxInstances := 2
    

    Use the testTopology setting to control whether you want to split the test classes into multiple workers or keep them together. The default was changed to split to 2 groups:

    Test / testTopology := TestTopology.subprojectSplit(2)
    

    To keep all classes in a subproject on one worker instead, use:

    Test / testTopology := TestTopology.subprojectExclusive
    

    This was contributed by @eed3si9n in #9665

    clean task

    sbt 2.1.0 updates the clean task to act as a cache invalidator. Regardless of the cache state, running clean would invalidate the cache for the next command execution. This can be scoped to subproject or configuration:

    $ sbt foo/clean
    $ sbt foo/compile
    

    This was contributed by @eed3si9n in #9752

    Source dependency update

    sbt 2.1.0 provides better control to handle source dependencies.

    This was contributed by @seroperson in #8880.

    Identity map optimization

    In sbt 2.1.0, a key assignment (:=) whose right-hand side is expr.value short-circuits to x.set(expr).

    This is helpful in avoiding JsonFormat[A] when expr is an uncached task.

    This was contributed by @eed3si9n in #9831

    Task-level caching opt-out

    // opt out of compilation cache
    Compile / compile / cacheStores := Nil
    Test / compile / cacheStores := Nil
    // opt out of test cache
    Test / test / cacheStores := Nil
    

    This was contributed by @eed3si9n in #9874

    🚀 Other updates

    • Adds project id to Zinc debug log by @Achieve3318 in #8750
    • feat: Support doc / skip := true by @fury0928 in #8824
    • feat: case-insensitive tab completion by @bitloi in #8827
    • dependencyTree: add --append for file output in multi-module builds by @oolokioo7 in #8878
    • feat: Eviction error for downgrade of Scala 3.x by @bitloi in #8912
    • feat: Add English aliases cross and switch for + / ++ by @jonathanchang31 in #9051
    • feat: BSP buildTarget/dependencyModules by @jsdevninja in #9085
    • feat: Forward test events to listeners as they are emitted by @claytonlin1110 in #9087
    • feat: Adds ModuleID#exclude that accepts a %% b by @seroperson in #8756
    • Specific error message for defining types in build.sbt by @xuwei-k in #9579
    • Use JDK's Unix domain socket for bootserver by @eed3si9n in #9427
    • feat: Adds Seq[Initialize[Task[T]]]#join extension method by @jozanek in #9347
    • feat: Adds LoggerContext.removeAppender for single appender removal by @stasimus in #9740
    • feat: Adds ProjectMatrix#configureRows and configurePlatforms methods by @kitbellew in #9765
    • Custom user agent by @eed3si9n in #9786
    • feat: Persistent worker for tests by @eed3si9n in #9678
    • remoteCacheRequestTimeout setting by @eed3si9n in #9829
    • Use JDK 17 UNIX domain socket by @eed3si9n in #9846
    • CrossVersion: make parser public by @kitbellew in #9864
    • feat: Support platform in sbt query by @eed3si9n in #9876
    • feat: HTTP Bazel cache support by @eed3si9n in #9880

    🐛 Bug fixes

    • fix: Fixes duplicate compiler bridge JAR in ZincComponentManager by @since-2017-hub in #8800
    • fix: Fixes backtick-quote project IDs in classloader error messages by @fury0928 in #8830
    • fix: Fixes non-deterministic ScopeFilter ordering by @bitloi in #8861
    • fix: Fixes continuous build watcher not respecting the log level by @fury0928 in #8864
    • fix: Fixes UpdateReport losing classifier information by @fury0928 in #8874
    • fix: Fixes .sbtopts not handling -sbt-dir with spaces by @Eruis2579 in #8875
    • fix: Fixes crash when .sbtopts has errors by @oolokioo7 in #8883
    • fix: Fixes sbt new scala/toolkit.local support by @mohamed0803 in #8887
    • fix: Fixes TaskConvert.appExpr by @xuwei-k in #8899
    • fix: Fixes script mode using Scala 3.x by @bitloi in #8900
    • fix: Fixes set every command with configuration scoping by @bittoby in #8916
    • fix: Fixes scripted test loading build definition twice on first test in batch by @bittoby in #8946
    • fix: Fixes misleading error message when .evaluated is used outside macro context by @BrianHotopp in #8951
    • fix: Fixes libraryDependencySchemes on cross-platform dependencies by @ckstck in #8957
    • fix: Fixes matrix base directory resolution for source dependencies by @bittoby in #8983
    • fix: Fixes unsorted progress indicator by @bittoby in #8984
    • fix: Fixes scritped test cleanup deleting symlinked directories by @fury0928 in #8985
    • fix: Fixes old shell syntax warning by @xuwei-k in #8998
    • fix: Fixes -sbt-dir / sbt.global.base not resolving relative paths by @BrianHotopp in #9001
    • fix: Fixes sbt server not returning a JSON-RPC error for unknown methods by @BrianHotopp in #9002
    • fix: Fixes failed curl leaving in the runner script corrupt JARs by @BrianHotopp in #9003
    • fix: Fixes derivedProjects not invoked when no explicit root project is defined by @bitcompass in #9012
    • fix: Fixes sbt.Tests.Group#hashCode by @xuwei-k in #9065
    • fix: Removes unused src/main/resources/log4j2.xml by @xuwei-k in #9071
    • fix: Fixes consoleProject for Scala 3 by @fury0928 in #9073
    • fix: Fixes Ctrl-c handling by @eed3si9n in #9130
    • fix: Fixes dependencyTree browse crashes on Linux by @jimcody1995 in #9147
    • fix: Fixes cache restoration of incremental compilation state (Analysis) by @eed3si9n in #9207
    • fix: Fixes dependencyTree rendering duplicate subtree by @BrianHotopp in #9226
    • fix: Fixes explicit equals and hashCode in LabeledFunctions by @xuwei-k in #9228
    • fix: Fixes sbtn throwing on exit by @eed3si9n in #9239
    • fix: Fixes sbt server refusing to start by @BrianHotopp in #9337
    • fix: Fixes resolver pattern resolution of [organisation] by @jozanek in #9344
    • fix: Fixes bgStop job id parser by @merlinorg in #9353
    • fix: Fixes multiple main classes warning showing up during tests by @merlinorg in #9372
    • fix: Fixes auto import of givens by @xuwei-k in #9409
    • fix: Fixes Windows runner not honoring -java-home by @jozanek in #9434
    • fix: Fixes dependency parsing for BSP by @anatoliykmetyuk in #9450
    • fix: Fixes gRPC channels recreated on reload by @eed3si9n in #9502
    • fix: Fixes sbtn stdin race condition by @eed3si9n in #9521
    • fix: Fixes sbt server freezing when a terminal-properties response is malformed or slow by @BrianHotopp in #9526 / #9527
    • fix: Fixes unbound client boot waiting by @BrianHotopp in #9549
    • fix: Fixes Java artifacts not getting exposed during a pipelined build by @anatoliykmetyuk in #9574
    • fix: Fixes build.sbt compilation errors not forwarded to the logger by @eed3si9n in #9599
    • fix: Fixes cache invalidation on version change by @eed3si9n in #9471 / #9820
    • fix: Fixes sbtn's handling on corrupt active.json by @eed3si9n in #9617
    • fix: Fixes cache inputs not using the full-width sha256 by @stasimus in #9641
    • fix: Fixes remote cache not verifying blobs by @stasimus in #9643
    • fix: Fixes sbt-native-packager compatibility by @xuwei-k in #9677
    • fix: Fixes Windows runner setting -Dsbt.global.base setting by @vlovgr in #9688
    • fix: Fixes sbt server making the port file avaiable partially by @kitbellew in #9689
    • fix: Fixes unhermetic semanticdbTargetRoot in the compile cache key by @christianharrington in #9711
    • fix: Fixes pipelined build of subprojects with macros by @stasimus in #9719
    • fix: Fixes -D options change by restarting the server by @stasimus in #9685
    • fix: Fixes sbt server getting stuck when a client fails by @kitbellew in #9691
    • fix: Fixes matrix support for a customRow with an empty scalaVersions by @kitbellew in #9717
    • fix: Fixes handling of bad resource generators by @eed3si9n in #9735
    • fix: Fixes cross command parsing by @stasimus in #9726
    • fix: Fixes displaced server keeps running by @kitbellew in #9713
    • fix: Fixes runAggregated falling back to Zero subproject scope by @jozanek in #9722
    • fix: Fixes diagnostics for task-local dependency references by @jozanek in #9728
    • fix: Include compileOrder and pipelining in the compile cache key by @stasimus in #9749
    • fix: Fixes sbt runner script not starting on openSUSE by @alexasl in #9753
    • fix: Fixes test setup/cleanup interleaving by @eed3si9n in #9727
    • fix: Let one client at a time restart the server by @stasimus in #9708
    • fix: Fixes Windows runner handling of sbt bsp by @stasimus in #9766
    • fix: Do not duplicate platform axes on a row by @kitbellew in #9757
    • fix: Warn on output declarations in uncached tasks by @anatoliykmetyuk in #9770
    • fix: Update to Gigahorse 0.9.6 for pre-authentication by @eed3si9n in #9775
    • fix: Name taskValue in its compile-time diagnostic by @anatoliykmetyuk in #9779
    • fix: ProjectMatrix: validate axes against autoScalaLibrary by @kitbellew in #9771
    • fix: Read the token again when it is refused by @kitbellew in #9738
    • fix: Make sbtn's result line consistent with sbt --server by @hoangmaihuy in #9783
    • fix: Hash the boot classpath in sorted order by @hoangmaihuy in #9809
    • fix: Restore the pipelining early output on an action-cache hit by @PhoenixmitX in #9793
    • fix: Fixes inMemoryAnalysisCache limit by @eed3si9n in #9500
    • fix: Read scripted pause from standard input by @anatoliykmetyuk in #9824
    • fix: Honor JAVA_HOME in the runner script by @anatoliykmetyuk in #9825
    • fix: Isolate cached test results by execution scope by @anatoliykmetyuk in #9823
    • fix: Fixes .m2/settings.xml overriding sbtResolvers by @eed3si9n in #9828
    • fix: Fixes -J options not forwarded to sbt server by @mkurz in #9839
    • fix: Fixes analysis cache not retaining recent Analysis by @eed3si9n in #9851
    • fix: Fixes CAS corruption by removing write permission from CAS by @eed3si9n in #9847
    • fix: Keep the interrupt flag when writing to the thin client by @pierscin in #9848
    • fix: Keep the interrupt flag in more thin-client paths by @eed3si9n in #9855
    • fix: Fixes watch ignoring file events by @eed3si9n in #9856
    • fix: Fixes one-line catch cases broken by the reformat by @eed3si9n in #9857
    • fix: Use Path.userHome by @eed3si9n in #9866
    • fix: Read all forked test output before reporting the fork's exit by @eugkhp in #9860
    • fix: Fixes task output lost by the thin client under CPU load by @eed3si9n in #9868
    • fix: Fixes handling of restored outputs whose cache blob is gone by @PhoenixmitX in #9870
    • fix: Drop credentials from cached URLs in dependencyLock by @seveneves in #9873
    • fix: Skip directory packaging when caching is off by @eed3si9n in #9875
    • fix: Fixes AccessDeniedException writing SemanticDB by @eed3si9n in #9878

    ⚡ Performance improvements

    • perf: lightweight UpdateReport cache persistence by @bitloi in #8815
    • perf: Cache AutoPlugin projectSettings/projectConfigurations by @volcano303 in #9077
    • perf: Resolve dependencies in parallel under the super shell by @BrianHotopp in #9295
    • Optimize InterfaceUtil by @xuwei-k in #9223
    • perf: Intern UpdateReport values by @hoangmaihuy in #9523
    • perf: Keep the Analysis cached across an action cache output sync by @hoangmaihuy in #9550
    • perf: Skip extracting a dirzip whose digest already matches by @hoangmaihuy in #9555
    • perf: Optimize UpdateReport disk format by @hoangmaihuy in #9515
    • perf: Skip re-packaging the class directory when zinc recompiles nothing by @hoangmaihuy in #9609
    • perf: Copy instead of symlink when restoring the disk cache on APFS by @hoangmaihuy in #9623
    • perf: Avoid re-sorting watch inputs on every file event by @stasimus in #9650
    • perf: Write packageBin JARs and action cache zips in parallel by @hoangmaihuy in #9661
    • perf: Cut redundant hashing in disk action cache by @stasimus in #9649
    • perf: Populate the in-memory cache on a read by @hoangmaihuy in #9657
    • perf: Avoid allocating pre/post-condition thunks in Execute by @retronym in #9885

    Behind the scenes

    • deps: sjson-new 0.15.0 + Contraband 0.9.0 by @eed3si9n in #9282
    • deps: Gigahorse 0.9.4 by @eed3si9n in #9125
    • deps: Zinc 2.0.3 by @eed3si9n in #9498
    • test: Enable previously-disabled scripted and cross-build tests by @xuwei-k in #8932, #8933, #8934, #8935, #8936, #8937, #8943, #8944, #8947, #9038, #9191, #9192, #9199, #9387
    • test: Add Git Bash test on Windows by @eed3si9n in #8779
    • refactor: Extract color-default logic as a pure function by @fury0928 in #8817
    • refactor: Remove Ivy from update path and decouple lm-coursier from lm-ivy by @fury0928 in #8832
    • ci: Update launcher-package rpmUrl by @xuwei-k in #8833
    • docs: Fix typo in contributor guide by @it-education-md in #8834, #8835, #8837
    • Avoid private[this] in test build files by @xuwei-k in #8839
    • test: Enable DagSpecification.scala by @xuwei-k in #8840
    • refactor: Remove unnecessary/dead code across build files by @xuwei-k in #8843, #9045, #9070, #9154, #9174, #9480, #9589, #9026
    • test: Use new wildcard syntax in test build files by @xuwei-k in #8844
    • Use given instead of implicit val by @xuwei-k in #8870
    • refactor: Extract lm-ivy to separate sbt-ivy plugin module by @fury0928 in #8873
    • Improve -help/--help and fix launcher test harness by @Eruis2579 in #8879
    • Update TemplateCommandUtil.scala by @xuwei-k in #8884
    • ci: Update Java file formatter plugin by @xuwei-k in #8892
    • refactor: Delete @silent annotation by @xuwei-k in #8893
    • refactor: Modernize to newer Scala/JDK idioms (InputStream.transferTo, IO.withTemporaryDirectory, Files.writeString/readString, Arrays.copyOf, exists, OptionConverters, Using.resource) by @xuwei-k in #8896, #9212, #9084, #9093, #9111, #9200, #9211, #9213, #9230
    • Delete checkPluginCross task. Add sourceGenerators for PluginCross by @xuwei-k in #8897
    • ci: Format launcher-package/build.sbt by @xuwei-k in #8898
    • test: Add regression test coverage across the build (nested test quick, classloader layering, javaagent, move-file, definedTestNames, action cache traversal, and more) by @xuwei-k, @eed3si9n, and @stasimus in #8901, #9163, #9164, #9197, #9210, #9264, #9544, #9552, #9608, #9640
    • test: server-test and related refactoring by @seroperson in #8904
    • Simplify -Werror application by @eed3si9n in #8906
    • Add VF keys by @eed3si9n in #8915
    • ci: Add Scalafix DisableSyntax.noReturns by @xuwei-k in #8922
    • deps: launcher 1.6.1 by @corevibe555 in #8923
    • refactor: Remove unnecessary return statements by @xuwei-k in #8925, #8938, #8939, #8940, #9066
    • refactor: Remove unnecessary unchecked annotation by @xuwei-k in #8926
    • Update Parser.~.unapply by @xuwei-k in #8927
    • refactor: Update EscHelpers.scala by @xuwei-k in #8928
    • refactor: Use new Array instead of Array.fill by @xuwei-k in #8929
    • refactor: Avoid deprecated URL constructor by @xuwei-k in #8930
    • test: Delete sbt-test/lm-coursier/neo-sbt-scalafmt by @xuwei-k in #8931
    • test: Use IO.withTemporaryDirectory in UpdateReportPersistenceSpec by @xuwei-k in #8941
    • test: Delete sbt-test/project/continuations by @xuwei-k in #8948
    • Add scalafmt newlines.topLevelStatementBlankLines setting by @xuwei-k in #8949
    • Replace defunct link by @Philippus in #8950
    • ci: Bump GitHub Actions dependencies by @dependabot in #8965, #9366, #9476, #9513, #9695
    • test: Fixes Resolvers test formatting by @anatoliykmetyuk in #8968
    • refactor: Update ErrorMessageAuthenticator. Remove unnecessary reflection by @xuwei-k in #8976
    • test: Update ZincComponentCompilerSpec by @xuwei-k in #8979
    • docs: Fixes ++ help text by @BrianHotopp in #8995
    • refactor: Fix compiler warnings across the build by @xuwei-k in #8999, #9061, #9062, #9188, #9494, #9597
    • Add parentheses by @xuwei-k in #9000
    • ci: Organize ScalaTest dependency by @xuwei-k in #9015
    • ci: Update sbt-native-image plugin by @xuwei-k in #9016
    • Update sbt version in launcher-package test by @xuwei-k in #9021
    • refactor: Remove unnecessary reflection in IvyXml by @xuwei-k in #9024
    • refactor: Remove unnecessary language.experimental.macros import by @xuwei-k in #9025
    • Clear compiler bridge Zinc cache on reboot dev by @bitloi in #9057
    • refactor: Format pom.xml by @xuwei-k in #9059
    • ci: Add -source-links option by @xuwei-k in #9063
    • refactor: Remove whitesource from LintUnused by @xuwei-k in #9064
    • ci: Remove -Ymacro-expand option by @xuwei-k in #9072
    • Update .gitattributes for Contraband files by @xuwei-k in #9076
    • ci: Update sbt-java-formatter by @mkurz in #9098
    • Remove duplicate build settings (TestFramework, packageSrc/mappings, scalaVersion) by @xuwei-k in #9112, #9156, #9297
    • ci: Update sbt and sbt-scalafmt plugin by @xuwei-k in #9148
    • ci: Avoid legacy/deprecated Scala syntax (postfix, infix, replaceAllLiterally) in build files by @xuwei-k in #9150, #9157, #9175, #9173
    • ci: Filter NOTICE file by @xuwei-k in #9155
    • Remove -source:3.7 option by @xuwei-k in #9176
    • Improve --help by @eed3si9n in #9180
    • deps: Coursier 2.1.25-M25 by @eed3si9n in #9232
    • ci: Build sbt/sbt using sbt 2 by @xuwei-k in #9244
    • refactor: Format launcherPackageIntegrationTest by @xuwei-k in #9245
    • Improve deprecation UX for watchSources by @anatoliykmetyuk in #9247
    • refactor: Avoid dollars in name by @xuwei-k in #9313
    • Remove type ascription in Continuous by @xuwei-k in #9314
    • ci: Update version and ivy tests by @xuwei-k in #9342
    • test: Update sbt.version in launcher-package/citest2 by @xuwei-k in #9357
    • deps: sbtn 2.0.0-2932685e by @eed3si9n in #9363
    • ci: Modify bug report template for custom labels by @eed3si9n in #9384
    • Update versions in TemplateCommandUtil by @xuwei-k in #9388
    • ci: Add devcontainer by @eed3si9n in #9392
    • ci: Add issue reproduction skill by @anatoliykmetyuk in #9400
    • refactor: Refactor LibraryManagement.scala by @xuwei-k in #9405
    • Mark log-related keys transient by @eed3si9n in #9407
    • deps: ipcsocket 1.8.0 by @eed3si9n in #9433
    • Add native client startup diagnostics regression test by @anatoliykmetyuk in #9447
    • refactor: Avoid deprecated url(...) method in test by @xuwei-k in #9453
    • Bump version number by @eed3si9n in #9470
    • ci: Use --server by @eed3si9n in #9483
    • ci: Update project/plugins.sbt by @xuwei-k in #9491
    • ci: Fix publishLocalBin by @eed3si9n in #9505
    • ci: Update mima setting by @xuwei-k in #9511
    • ci: Use sbt 2.0.4 by @eed3si9n in #9512
    • refactor: Remove unnecessary match by @xuwei-k in #9539
    • ci: Remove cla-checker v1 by @eed3si9n in #9570
    • Update Eval.compileAndLoad by @xuwei-k in #9583
    • docs: Fix HashAlgo scaladoc by @xuwei-k in #9590
    • refactor: Add @tailrec annotation by @xuwei-k in #9591
    • refactor: Remove redundant String.toString by @xuwei-k in #9592
    • refactor: Remove nowarn annotation in CoursierDependencyResolution by @xuwei-k in #9593
    • ci: Update sbt and plugins by @xuwei-k in #9603
    • test: Community Build by @eed3si9n in #9659
    • test: Fix MatchError in RunFromSourceMain if RC version by @xuwei-k in #9684
    • ci: Update CLA url by @xuwei-k in #9686
    • test: Keep every output line the runner test reads by @stasimus in #9687
    • refactor: Retry a read before discarding a server by @kitbellew in #9690
    • refactor: Share a holder for a closeable by @kitbellew in #9692
    • ci: Update dependabot.yml target-branch by @xuwei-k in #9697
    • ci: Fix nightly publishing by @eed3si9n in #9705
    • refactor: Name the expressions that repeat by @kitbellew in #9712
    • ci: Removes Ivy API usage from build publishing plugins by @anatoliykmetyuk in #9723
    • Update IO to 1.13.2 by @eed3si9n in #9731
    • Update Zinc to 2.1.0-M2 by @eed3si9n in #9733
    • doc: Update the style guide by @eed3si9n in #9736
    • refactor: Update scalafmt.conf by @eed3si9n in #9737
    • build: Upgrade MiMa to 1.2.0 by @kitbellew in #9750
    • Update sbtn to 2.1.0-M1 by @eed3si9n in #9755
    • Use sbt 2.1.0-M1 by @eed3si9n in #9767
    • ci: Update mima setting by @xuwei-k in #9760
    • ci: Fix warnings by @xuwei-k in #9768
    • Update ModuleIDExtra.exclude deprecated annotation by @xuwei-k in #9758
    • deps: Update scala-xml and scala-parser-combinators by @xuwei-k in #9777
    • Remove dataclass-annotation dependency by @xuwei-k in #9776
    • ci: Use sbt scalafmtRepo, exclude some dirs by @kitbellew in #9785
    • deps: Coursier 2.1.25 by @eed3si9n in #9784
    • test: Fix transient key warnings in scripted tests by @xuwei-k in #9795
    • deps: Launcher 1.7.0 by @eed3si9n in #9798
    • Remove disruptor dependency by @xuwei-k in #9797
    • deps: Update Caffeine by @xuwei-k in #9796
    • deps: Zinc 2.1.0-M3, Gigahorse 0.9.7 by @eed3si9n in 021f40d35
    • refactor: Avoid default parameter by @eed3si9n in e7018fe64
    • Update Zinc to 2.1.0-M4 by @eed3si9n in #9802
    • Update sbtn to 2.1.0-M2 by @eed3si9n in #9801
    • docs: Update Contributor's guide by @eed3si9n in #9807
    • refactor: CrossVersionExtra: extra cross-version parser by @kitbellew in #9790
    • refactor: ProjectMatrix: re-use xxxPlatform methods by @kitbellew in #9788
    • refactor: VirtualAxis: refactor constructing ScalaVersionAxis by @kitbellew in #9789
    • Update user-agent to major.minor by @eed3si9n in #9818
    • ci: Include other repos into devcontainer by @eed3si9n in #9819
    • Use sbt 2.1.0-M2 by @xuwei-k in #9833
    • test: Fix warning in test by @xuwei-k in #9832
    • test: Add chimney to community-build by @eed3si9n in #9836
    • deps: Zinc 2.1.0-M5 by @eed3si9n in #9837
    • Retry mkInput by @eed3si9n in #9835
    • deps: Update Coursier to 2.1.26 by @eed3si9n in #9852
    • deps: sbtn 2.1.0-6eac8efa by @eed3si9n in #9861
    • Replace old sun.misc.Unsafe lazy val in lmCoursierShaded by @xuwei-k in #9853
    • ci: Rebalance scripted jobs by @eed3si9n in #9867
    • test: Add sttp to community build by @eed3si9n in #9881
    • ci: Update mima setting by @xuwei-k in #9882
    • ci: Update sbt and plugins by @xuwei-k in #9883
    • ci: Suppress warning in launcher-package/build.sbt by @xuwei-k in #9884
    • deps: Zinc 2.1.0-M6 by @eed3si9n in #9886

    Full Changelog: v2.0.10...v2.1.0-RC1

    Original source
  • All of your release notes in one feed

    Join Releasebot and get updates from sbt and hundreds of other software products.

    Create account
  • Oct 2, 2026
    • Date parsed from source:
      Oct 2, 2026
    • First seen by Releasebot:
      Oct 13, 2026
    sbt logo

    sbt

    2.0.10

    sbt releases an update that makes its runner honor JAVA_HOME, refreshes Coursier and other dependencies, and fixes cache corruption, symlink handling, pipelined output, and scripted pauses.

    Changes with compatibility implications

    • sbt runner script honors JAVA_HOME environment variable by @anatoliykmetyuk in #9825

    🚀 updates

    • deps: Updates to Coursier 2.1.26, and sets user agent header by @eed3si9n in #9784, #9852, #9786 and #9818

    🐛 bug fixes

    • fix: Removes write permission from the CAS to prevent cache corruption by @eed3si9n in #9847
    • fix: Implements copy-on-write for symlinks by @eed3si9n in sbt/io#568
    • fix: Restores the pipelining early output on an action-cache hit by @PhoenixmitX in #9793
    • fix: Reads scripted pause from standard input by @anatoliykmetyuk in #9824
    • fix: Keeps the interrupt flag when writing to the thin client by @pierscin and @eed3si9n in #9848 / #9855

    Behind the scenes

    • deps: Updates to Gigahorse 0.9.6 by @eed3si9n in #9775
    • deps: IO 1.13.4 by @eed3si9n in #9847
    • deps: sbtn 2.1.0-6eac8efa by @eed3si9n in #9861

    Full Changelog: v2.0.9...v2.0.10

    Original source
  • Sep 28, 2026
    • Date parsed from source:
      Sep 28, 2026
    • First seen by Releasebot:
      Oct 13, 2026
    sbt logo

    sbt

    2.1.0-M3

    sbt releases 2.1.0-M3 with fixes for publishing, caching, and Scala 3 pipelining, plus persistent test workers. The update also improves artifact metadata and build execution reliability.

    Updates and bug fixes

    • fix: Restore cross-suffixed artifactIds in sbt 1 plugin POMs by @mkurz in #9804
    • fix: Restore sbt 1 plugin POM metadata by @mkurz in #9806
    • fix: Hash the boot classpath in sorted order by @hoangmaihuy in #9809
    • fix: Derive Maven paths from module and artifact names by @mkurz in #9811
    • fix: Restore the pipelining early output on an action-cache hit by @PhoenixmitX in #9793
    • fix: publishLocal must overwrite, remote publish must not by @jozanek in #9814
    • fix: Remove duplicate self JAR from Runtime by @eed3si9n in #9820
    • fix: Fixes inMemoryAnalysisCache limit by @eed3si9n in #9500
    • feat: Persistent worker for tests by @eed3si9n in #9678
    • fix: Read scripted pause from standard input by @anatoliykmetyuk in #9824
    • fix: Honor JAVA_HOME in the runner script by @anatoliykmetyuk in #9825
    • fix: Isolate cached test results by execution scope by @anatoliykmetyuk in #9823
    • fix: Fixes .m2/settings.xml overriding sbtResolvers by @eed3si9n in #9828
    • remoteCacheRequestTimeout setting by @eed3si9n in #9829
    • Short-circuit x := expr.value by @eed3si9n in #9831
    • fix: Fixes pipelining on Scala 3 by @lrytz in sbt/zinc#1817
    • fix: Reject JavaThenScala when pipelining by @stasimus in sbt/zinc#1789
    • Don't recompile dependents of unchanged Java sources when pipelining by @lrytz in sbt/zinc#1821
    • With pipelining, wait for Scala 3 to send dependencies by @lrytz in sbt/zinc#1822
    • Pipelining: announce no early output when Scala 3 skips dependencyPhaseCompleted by @lrytz in sbt/zinc#1823

    Behind the scenes

    • Update Contributor's guide by @eed3si9n in #9807
    • refactor: CrossVersionExtra: extra cross-version parser by @kitbellew in #9790
    • refactor: ProjectMatrix: re-use xxxPlatform methods by @kitbellew in #9788
    • refactor: VirtualAxis: refactor constructing ScalaVersionAxis by @kitbellew in #9789
    • Update user-agent to major.minor by @eed3si9n in #9818
    • Include other repos into devcontainer by @eed3si9n in #9819
    • Use sbt 2.1.0-M2 by @xuwei-k in #9833
    • test: Fix warning in test by @xuwei-k in #9832
    • fix: Retry mkInput by @eed3si9n in #9835
    • test: Add chimney to community-build by @eed3si9n in #9836
    • deps: Zinc 2.1.0-M5 by @eed3si9n in #9837

    New Contributors

    • @PhoenixmitX made their first contribution in #9793

    Full Changelog: v2.1.0-M2...v2.1.0-M3

    Original source
  • Sep 23, 2026
    • Date parsed from source:
      Sep 23, 2026
    • First seen by Releasebot:
      Oct 13, 2026
    sbt logo

    sbt

    2.1.0-M2

    sbt releases 2.1.0-M2 with fixes for Windows BSP handling, project matrix axes, task diagnostics, and remote Maven snapshots, plus updates to Coursier, Zinc, the launcher, and sbtn. The update also improves row configuration and authentication handling.

    updates and bug fixes

    • fix: Fixes Windows runner handling of sbt bsp by @stasimus in #9766
    • fix: Do not duplicate platform axes on a row by @kitbellew in #9757
    • fix: Warn on output declarations in uncached tasks by @anatoliykmetyuk in #9770
    • Allow adding rows and configuring them separately, and through any method by @kitbellew in #9765
    • fix: Update to Gigahorse 0.9.6 for pre-authentication by @eed3si9n in #9775
    • fix: Name taskValue in its compile-time diagnostic by @anatoliykmetyuk in #9779
    • ProjectMatrix: validate axes against autoScalaLibrary by @kitbellew in #9771
    • deps: Coursier 2.1.25 by @eed3si9n in #9784
    • fix: Read the token again when it is refused by @kitbellew in #9738
    • Custom user agent by @eed3si9n in #9786
    • fix: Make sbtn's result line consistent with sbt --server by @hoangmaihuy in #9783
    • Deploy remote Maven snapshots with one timestamp by @stasimus in #9756
    • lazy val / sun.misc.Unsafe migration
    • Update scala-xml and scala-parser-combinators by @xuwei-k in #9777
    • deps: Launcher 1.7.0 by @eed3si9n in #9798
    • Remove disruptor dependency by @xuwei-k in #9797
    • Update caffeine by @xuwei-k in #9796

    behind the scenes

    • Use sbt 2.1.0-M1 by @eed3si9n in #9767
    • ci: Update mima setting by @xuwei-k in #9760
    • ci: Fix warnings by @xuwei-k in #9768
    • Update ModuleIDExtra.exclude deprecated annotation by @xuwei-k in #9758
    • Remove dataclass-annotation dependency by @xuwei-k in #9776
    • ci: Use sbt scalafmtRepo, exclude some dirs by @kitbellew in #9785
    • test: Fix transient key warnings in scripted tests by @xuwei-k in #9795
    • Revert to Zinc 2.1.0-M2 by @eed3si9n in #9800
    • Update Zinc to 2.1.0-M4 by @eed3si9n in #9802
    • Update sbtn to 2.1.0-M2 by @eed3si9n in #9801

    Full Changelog: v2.1.0-M1...v2.1.0-M2

    Original source
  • Similar to sbt with recent updates:

  • Sep 14, 2026
    • Date parsed from source:
      Sep 14, 2026
    • First seen by Releasebot:
      Oct 13, 2026
    sbt logo

    sbt

    2.0.9

    sbt 2.0.9 fixes Windows JAR access, compile-cache and pipelining issues, and improves runner compatibility while updating sbtn.

    🐛 bug fixes

    • fix: Fixes AccessDeniedException on Windows by creating JAR in situ by @eed3si9n in sbt/io#558
    • fix: Fixes unhermetic semanticdbTargetRoot in the compile cache key by @christianharrington in #9711
    • fix: Fixes pipelined build with Java sources by @anatoliykmetyuk in #9574
    • fix: Keep macro subprojects off the pipelined classpath by @stasimus in #9719
    • fix: Fixes sbt runner script not starting on openSUSE by @alexasl in #9753
    • Update to sbtn 2.1.0-M1 #9755
    • Full Changelog: v2.0.8...v2.0.9
    Original source
  • Sep 14, 2026
    • Date parsed from source:
      Sep 14, 2026
    • First seen by Releasebot:
      Oct 13, 2026
    sbt logo

    sbt

    2.1.0-M1

    sbt releases version 2.1.0 with Scala 3.9 metabuild support, Ivy-free publishing, smarter build and test caching, improved test summaries and scheduling, and broad performance gains and bug fixes. Note that plugins built for sbt 2.1.x are not compatible with sbt 2.0.x.

    Changes with compatibility implications

    Metabuild is updated to Scala 3.9.

    Apache Ivy is removed from the dependency.

    Scala 3.9 on metabuild

    sbt 2.1.0 updates the Scala version used by the metabuild to Scala 3.9.0.

    Since both sbt 2.x and Scala 3.x are only backward compatible across minor versions, appropriate Scala version must be used for building sbt plugins. Also a plugin built using sbt 2.1.x will not work on sbt 2.0.x:

    sbt 2.x Scala 3.x Plugin works on sbt 2.0.x 2.0.x 3.8.x ✅ 2.1.0 3.9.x ❌

    Plugin authors: Here's how to set the minimal sbt version for your plugin:

    pluginCrossBuild / sbtVersion := {
      scalaBinaryVersion.value match {
        case "2.12" => "1.9.9"
        case _ => "2.0.8"
      }
    }
    

    Publishing

    sbt 2.1.0 removes Apache Ivy from its transitive dependency, and implements Ivyless publishing.

    This was contributed by @bitloi, @fury0928, @BrianHotopp, and @eed3si9n in #8686, #8866, #8894, #8975, #8988, #8996, #9069, #9463, and #9533, #9615 etc.

    clean task

    To restore the semantics of clean in the presence of disk cache, sbt 2.1.0 updates the clean task to act as a cache invalidator. Regardless of the cache state, running clean would invalidate the cache for the next command execution. This can be scoped to subproject or configuration:

    $ sbt foo/clean
    $ sbt foo/compile
    

    This was contributed by @eed3si9n in #9752

    Test summary

    When tests are executed, sbt 2.1.0 displays a test summary at the end, listing the failed test suites as follows:

    [error] Test summary (2 test tasks failed):
    [error] a / Test / testQuick
    [error] com.example.a.TestA FAIL
    [error] b / Test / testQuick
    [error] com.example.b.TestB FAIL
    [error]
    [error] failed: total 4, failed 2, errors 0, passed 2, cached 2
    

    Successful tests will display only a terse summary by default:

    [info] passed: total 4, failed 0, errors 0, passed 4, cached 4
    

    --test_summary=success can override the behavior to list the successful test as well. Test summary was contributed by @eed3si9n and @BrianHotopp in #9602 + #9214.

    Test cache opt-out

    sbt 2.1.0 can let you opt out of test result caching:

    $ sbt test --cache_test_result=false
    

    This was contributed by @anatoliykmetyuk in #9675.

    workerMaxInstances and testTopology

    sbt 2.1.0 adds new settings workerMaxInstances and testTopology to control test scheduling, especially of the forked tests. Use Global / workerMaxInstances to change the number of worker instances. The default is set to 2:

    // or sbt -Dsbt.worker_max_instances=2
    Global / workerMaxInstances := 2
    

    Use the testTopology setting to control whether you want to split the test classes into multiple workers or keep them together. The default was changed to split to 2 groups:

    Test / testTopology := TestTopology.subprojectSplit(2)
    

    To keep all classes in a subproject on one worker instead, use:

    Test / testTopology := TestTopology.subprojectExclusive
    

    This was contributed by @eed3si9n in #9665

    Source dependency update

    sbt 2.1.0 provides better control to handle source dependencies.

    This was contributed by @seroperson in #8880.

    ⚡ Performance improvements

    • perf: lightweight UpdateReport cache persistence by @bitloi in #8815
    • perf: Cache AutoPlugin projectSettings/projectConfigurations by @volcano303 in #9077
    • perf: Resolve dependencies in parallel under the super shell by @BrianHotopp in #9295
    • Optimize InterfaceUtil by @xuwei-k in #9223
    • perf: Intern UpdateReport values by @hoangmaihuy in #9523
    • perf: Keep the Analysis cached across an action cache output sync by @hoangmaihuy in #9550
    • perf: Skip extracting a dirzip whose digest already matches by @hoangmaihuy in #9555
    • perf: Optimize UpdateReport disk format by @hoangmaihuy in #9515
    • perf: Skip re-packaging the class directory when zinc recompiles nothing by @hoangmaihuy in #9609
    • perf: Copy instead of symlink when restoring the disk cache on APFS by @hoangmaihuy in #9623
    • perf: Avoid re-sorting watch inputs on every file event by @stasimus in #9650
    • perf: Write packageBin JARs and action cache zips in parallel by @hoangmaihuy in #9661
    • perf: Cut redundant hashing in disk action cache by @stasimus in #9649
    • perf: Populate the in-memory cache on a read by @hoangmaihuy in #9657

    🚀 Other updates

    • Adds project id to Zinc debug log by @Achieve3318 in #8750
    • feat: Support doc / skip := true by @fury0928 in #8824
    • feat: case-insensitive tab completion by @bitloi in #8827
    • dependencyTree: add --append for file output in multi-module builds by @oolokioo7 in #8878
    • feat: Eviction error for downgrade of Scala 3.x by @bitloi in #8912
    • feat: Add English aliases cross and switch for + / ++ by @jonathanchang31 in #9051
    • feat: BSP buildTarget/dependencyModules by @jsdevninja in #9085
    • feat: Forward test events to listeners as they are emitted by @claytonlin1110 in #9087
    • feat: Adds ModuleID#exclude that accepts a %% b by @seroperson in #8756
    • Specific error message for defining types in build.sbt by @xuwei-k in #9579
    • Use JDK's Unix domain socket for bootserver by @eed3si9n in #9427
    • feat: Adds Seq[Initialize[Task[T]]]#join extension method by @jozanek in #9347
    • feat: Adds LoggerContext.removeAppender for single appender removal by @stasimus in #9740
    • feat: Improve Zinc invalidation debug logs by @jozanek in sbt/zinc#1765

    🐛 Bug fixes

    • fix: Fixes non-deterministic ScopeFilter ordering by @bitloi in #8861
    • fix: Fixes unhermetic semanticdbTargetRoot in the compile cache key by @christianharrington in #9711
    • fix: Fixes duplicate compiler bridge JAR in ZincComponentManager by @since-2017-hub in #8800
    • fix: Fixes backtick-quote project IDs in classloader error messages by @fury0928 in #8830
    • fix: Fixes continuous build watcher not respecting the log level by @fury0928 in #8864
    • fix: Fixes UpdateReport losing classifier information by @fury0928 in #8874
    • fix: Fixes .sbtopts not handling -sbt-dir with spaces by @Eruis2579 in #8875
    • fix: Fixes crash when .sbtopts has errors by @oolokioo7 in #8883
    • fix: Fixes sbt new scala/toolkit.local support by @mohamed0803 in #8887
    • fix: Fixes TaskConvert.appExpr by @xuwei-k in #8899
    • fix: Fixes script mode using Scala 3.x by @bitloi in #8900
    • fix: Fixes set every command with configuration scoping by @bittoby in #8916
    • fix: Fixes scripted test loading build definition twice on first test in batch by @bittoby in #8946
    • fix: Fixes misleading error message when .evaluated is used outside macro context by @BrianHotopp in #8951
    • fix: Fixes libraryDependencySchemes on cross-platform dependencies by @ckstck in #8957
    • fix: Fixes matrix base directory resolution for source dependencies by @bittoby in #8983
    • fix: Fixes unsorted progress indicator by @bittoby in #8984
    • fix: Fixes scritped test cleanup deleting symlinked directories by @fury0928 in #8985
    • fix: Fixes old shell syntax warning by @xuwei-k in #8998
    • fix: Fixes -sbt-dir / sbt.global.base not resolving relative paths by @BrianHotopp in #9001
    • fix: Fixes sbt server not returning a JSON-RPC error for unknown methods by @BrianHotopp in #9002
    • fix: Fixes failed curl leaving in the runner script corrupt JARs by @BrianHotopp in #9003
    • fix: Fixes derivedProjects not invoked when no explicit root project is defined by @bitcompass in #9012
    • fix: Fixes sbt.Tests.Group#hashCode by @xuwei-k in #9065
    • fix: Removes unused src/main/resources/log4j2.xml by @xuwei-k in #9071
    • fix: Fixes consoleProject for Scala 3 by @fury0928 in #9073
    • fix: Fixes Ctrl-c handling by @eed3si9n in #9130
    • fix: Fixes dependencyTree browse crashes on Linux by @jimcody1995 in #9147
    • fix: Fixes cache restoration of incremental compilation state (Analysis) by @eed3si9n in #9207
    • fix: Fixes dependencyTree rendering duplicate subtree by @BrianHotopp in #9226
    • fix: Fixes explicit equals and hashCode in LabeledFunctions by @xuwei-k in #9228
    • fix: Fixes sbtn throwing on exit by @eed3si9n in #9239
    • fix: Fixes sbt server refusing to start by @BrianHotopp in #9337
    • fix: Fixes resolver pattern resolution of [organisation] by @jozanek in #9344
    • fix: Fixes bgStop job id parser by @merlinorg in #9353
    • fix: Fixes multiple main classes warning showing up during tests by @merlinorg in #9372
    • fix: Fixes auto import of givens by @xuwei-k in #9409
    • fix: Fixes Windows runner not honoring -java-home by @jozanek in #9434
    • fix: Fixes dependency parsing for BSP by @anatoliykmetyuk in #9450
    • fix: Fixes gRPC channels recreated on reload by @eed3si9n in #9502
    • fix: Fixes sbtn stdin race condition by @eed3si9n in #9521
    • fix: Fixes sbt server freezing when a terminal-properties response is malformed or slow by @BrianHotopp in #9526 / #9527
    • fix: Fixes unbound client boot waiting by @BrianHotopp in #9549
    • fix: Fixes Java artifacts not getting exposed during a pipelined build by @anatoliykmetyuk in #9574
    • fix: Fixes build.sbt compilation errors not forwarded to the logger by @eed3si9n in #9599
    • fix: Fixes cache invalidation on version change by @eed3si9n in #9471
    • fix: Fixes sbtn's handling on corrupt active.json by @eed3si9n in #9617
    • fix: Fixes cache inputs not using the full-width sha256 by @stasimus in #9641
    • fix: Fixes remote cache not verifying blobs by @stasimus in #9643
    • fix: Fixes sbt-native-packager compatibility by @xuwei-k in #9677
    • fix: Fixes Windows runner setting -Dsbt.global.base setting by @vlovgr in #9688
    • fix: Fixes sbt server making the port file available partially by @kitbellew in #9689
    • fix: Fixes pipelined build of subprojects with macros by @stasimus in #9719
    • fix: Fixes -D options change by restarting the server by @stasimus in #9685
    • fix: Fixes sbt server getting stuck when a client fails by @kitbellew in #9691
    • fix: Fixes matrix support for a customRow with an empty scalaVersions by @kitbellew in #9717
    • fix: Fixes handling of bad resource generators by @eed3si9n in #9735
    • fix: Fixes cross command parsing by @stasimus in #9726
    • fix: Fixes displaced server keeps running by @kitbellew in #9713
    • fix: Fixes runAggregated falling back to Zero subproject scope by @jozanek in #9722
    • fix: Fixes diagnostics for task-local dependency references by @jozanek in #9728
    • fix: Include compileOrder and pipelining in the compile cache key by @stasimus in #9749
    • fix: Fixes sbt runner script not starting on openSUSE by @alexasl in #9753
    • fix: Fixes test setup/cleanup interleaving by @eed3si9n in #9727
    • fix: Let one client at a time restart the server by @stasimus in #9708
    • fix: Prevent quadratic API node interning by @nguyenyou in sbt/zinc#1767
    • fix: Avoid adding a bootclasspath if it already exists by @jozanek in sbt/zinc#1766
    • Drop Java serialization from text analysis format by @stasimus in sbt/zinc#1769
    • Stabilize names of refinement-owned type parameters by @jozanek in sbt/zinc#1782
    • Treat a null associatedFile as absent on Scala 2.10 by @jozanek in sbt/zinc#1785

    Behind the scenes

    • deps: sjson-new 0.15.0 + Contraband 0.9.0 by @eed3si9n in #9282
    • deps: Gigahorse 0.9.4 by @eed3si9n in #9125
    • deps: Zinc 2.0.3 by @eed3si9n in #9498
    • test: Enable previously-disabled scripted and cross-build tests by @xuwei-k in #8932, #8933, #8934, #8935, #8936, #8937, #8943, #8944, #8947, #9038, #9191, #9192, #9199, #9387
    • test: Add Git Bash test on Windows by @eed3si9n in #8779
    • refactor: Extract color-default logic as a pure function by @fury0928 in #8817
    • refactor: Remove Ivy from update path and decouple lm-coursier from lm-ivy by @fury0928 in #8832
    • ci: Update launcher-package rpmUrl by @xuwei-k in #8833
    • docs: Fix typo in contributor guide by @it-education-md in #8834, #8835, #8837
    • Avoid private[this] in test build files by @xuwei-k in #8839
    • test: Enable DagSpecification.scala by @xuwei-k in #8840
    • refactor: Remove unnecessary/dead code across build files by @xuwei-k in #8843, #9045, #9070, #9154, #9174, #9480, #9589, #9026
    • test: Use new wildcard syntax in test build files by @xuwei-k in #8844
    • Use given instead of implicit val by @xuwei-k in #8870
    • refactor: Extract lm-ivy to separate sbt-ivy plugin module by @fury0928 in #8873
    • Improve -help/--help and fix launcher test harness by @Eruis2579 in #8879
    • Update TemplateCommandUtil.scala by @xuwei-k in #8884
    • ci: Update Java file formatter plugin by @xuwei-k in #8892
    • refactor: Delete @silent annotation by @xuwei-k in #8893
    • refactor: Modernize to newer Scala/JDK idioms (InputStream.transferTo, IO.withTemporaryDirectory, Files.writeString/readString, Arrays.copyOf, exists, OptionConverters, Using.resource) by @xuwei-k in #8896, #9212, #9084, #9093, #9111, #9200, #9211, #9213, #9230
    • Delete checkPluginCross task. Add sourceGenerators for PluginCross by @xuwei-k in #8897
    • ci: Format launcher-package/build.sbt by @xuwei-k in #8898
    • test: Add regression test coverage across the build (nested test quick, classloader layering, javaagent, move-file, definedTestNames, action cache traversal, and more) by @xuwei-k, @eed3si9n, and @stasimus in #8901, #9163, #9164, #9197, #9210, #9264, #9544, #9552, #9608, #9640
    • test: server-test and related refactoring by @seroperson in #8904
    • Simplify -Werror application by @eed3si9n in #8906
    • Add VF keys by @eed3si9n in #8915
    • ci: Add Scalafix DisableSyntax.noReturns by @xuwei-k in #8922
    • deps: launcher 1.6.1 by @corevibe555 in #8923
    • refactor: Remove unnecessary return statements by @xuwei-k in #8925, #8938, #8939, #8940, #9066
    • refactor: Remove unnecessary unchecked annotation by @xuwei-k in #8926
    • Update Parser.~.unapply by @xuwei-k in #8927
    • refactor: Update EscHelpers.scala by @xuwei-k in #8928
    • refactor: Use new Array instead of Array.fill by @xuwei-k in #8929
    • refactor: Avoid deprecated URL constructor by @xuwei-k in #8930
    • test: Delete sbt-test/lm-coursier/neo-sbt-scalafmt by @xuwei-k in #8931
    • test: Use IO.withTemporaryDirectory in UpdateReportPersistenceSpec by @xuwei-k in #8941
    • test: Delete sbt-test/project/continuations by @xuwei-k in #8948
    • Add scalafmt newlines.topLevelStatementBlankLines setting by @xuwei-k in #8949
    • Replace defunct link by @Philippus in #8950
    • ci: Bump GitHub Actions dependencies by @dependabot in #8965, #9366, #9476, #9513, #9695
    • test: Fixes Resolvers test formatting by @anatoliykmetyuk in #8968
    • refactor: Update ErrorMessageAuthenticator. Remove unnecessary reflection by @xuwei-k in #8976
    • test: Update ZincComponentCompilerSpec by @xuwei-k in #8979
    • docs: Fixes ++ help text by @BrianHotopp in #8995
    • refactor: Fix compiler warnings across the build by @xuwei-k in #8999, #9061, #9062, #9188, #9494, #9597
    • Add parentheses by @xuwei-k in #9000
    • ci: Organize ScalaTest dependency by @xuwei-k in #9015
    • ci: Update sbt-native-image plugin by @xuwei-k in #9016
    • Update sbt version in launcher-package test by @xuwei-k in #9021
    • refactor: Remove unnecessary reflection in IvyXml by @xuwei-k in #9024
    • refactor: Remove unnecessary language.experimental.macros import by @xuwei-k in #9025
    • Clear compiler bridge Zinc cache on reboot dev by @bitloi in #9057
    • refactor: Format pom.xml by @xuwei-k in #9059
    • ci: Add -source-links option by @xuwei-k in #9063
    • refactor: Remove whitesource from LintUnused by @xuwei-k in #9064
    • ci: Remove -Ymacro-expand option by @xuwei-k in #9072
    • Update .gitattributes for Contraband files by @xuwei-k in #9076
    • ci: Update sbt-java-formatter by @mkurz in #9098
    • Remove duplicate build settings (TestFramework, packageSrc/mappings, scalaVersion) by @xuwei-k in #9112, #9156, #9297
    • ci: Update sbt and sbt-scalafmt plugin by @xuwei-k in #9148
    • ci: Avoid legacy/deprecated Scala syntax (postfix, infix, replaceAllLiterally) in build files by @xuwei-k in #9150, #9157, #9175, #9173
    • ci: Filter NOTICE file by @xuwei-k in #9155
    • Remove -source:3.7 option by @xuwei-k in #9176
    • Improve --help by @eed3si9n in #9180
    • deps: Coursier 2.1.25-M25 by @eed3si9n in #9232
    • ci: Build sbt/sbt using sbt 2 by @xuwei-k in #9244
    • refactor: Format launcherPackageIntegrationTest by @xuwei-k in #9245
    • Improve deprecation UX for watchSources by @anatoliykmetyuk in #9247
    • refactor: Avoid dollars in name by @xuwei-k in #9313
    • Remove type ascription in Continuous by @xuwei-k in #9314
    • ci: Update version and ivy tests by @xuwei-k in #9342
    • test: Update sbt.version in launcher-package/citest2 by @xuwei-k in #9357
    • deps: sbtn 2.0.0-2932685e by @eed3si9n in #9363
    • ci: Modify bug report template for custom labels by @eed3si9n in #9384
    • Update versions in TemplateCommandUtil by @xuwei-k in #9388
    • ci: Add devcontainer by @eed3si9n in #9392
    • ci: Add issue reproduction skill by @anatoliykmetyuk in #9400
    • refactor: Refactor LibraryManagement.scala by @xuwei-k in #9405
    • Mark log-related keys transient by @eed3si9n in #9407
    • deps: ipcsocket 1.8.0 by @eed3si9n in #9433
    • Add native client startup diagnostics regression test by @anatoliykmetyuk in #9447
    • refactor: Avoid deprecated url(...) method in test by @xuwei-k in #9453
    • Bump version number by @eed3si9n in #9470
    • ci: Use --server by @eed3si9n in #9483
    • ci: Update project/plugins.sbt by @xuwei-k in #9491
    • ci: Fix publishLocalBin by @eed3si9n in #9505
    • ci: Update mima setting by @xuwei-k in #9511
    • ci: Use sbt 2.0.4 by @eed3si9n in #9512
    • refactor: Remove unnecessary match by @xuwei-k in #9539
    • ci: Remove cla-checker v1 by @eed3si9n in #9570
    • Update Eval.compileAndLoad by @xuwei-k in #9583
    • docs: Fix HashAlgo scaladoc by @xuwei-k in #9590
    • refactor: Add @tailrec annotation by @xuwei-k in #9591
    • refactor: Remove redundant String.toString by @xuwei-k in #9592
    • refactor: Remove nowarn annotation in CoursierDependencyResolution by @xuwei-k in #9593
    • ci: Update sbt and plugins by @xuwei-k in #9603
    • test: Community Build by @eed3si9n in #9659
    • test: Fix MatchError in RunFromSourceMain if RC version by @xuwei-k in #9684
    • ci: Update CLA url by @xuwei-k in #9686
    • test: Keep every output line the runner test reads by @stasimus in #9687
    • refactor: Retry a read before discarding a server by @kitbellew in #9690
    • refactor: Share a holder for a closeable by @kitbellew in #9692
    • ci: Update dependabot.yml target-branch by @xuwei-k in #9697
    • ci: Fix nightly publishing by @eed3si9n in #9705
    • refactor: Name the expressions that repeat by @kitbellew in #9712
    • ci: Removes Ivy API usage from build publishing plugins by @anatoliykmetyuk in #9723
    • Update IO to 1.13.2 by @eed3si9n in #9731
    • Update Zinc to 2.1.0-M2 by @eed3si9n in #9733
    • doc: Update the style guide by @eed3si9n in #9736
    • refactor: Update scalafmt.conf by @eed3si9n in #9737
    • build: Upgrade MiMa to 1.2.0 by @kitbellew in #9750
    • Update sbtn to 2.1.0-M1 by @eed3si9n in #9755

    Full Changelog: f976330...1414845

    Original source
  • Aug 28, 2026
    • Date parsed from source:
      Aug 28, 2026
    • First seen by Releasebot:
      Oct 13, 2026
    sbt logo

    sbt

    2.0.8

    sbt 2.0.8 fixes test reporting, plugin file handling, JDK 17 socket deadlocks, Windows runner issues, and other bugs.

    🐛 bug fixes

    • fix: Fixes ThisBuild-scoped bare settings by @eed3si9n in #9674
    • fix: Fixes TestReportListener not receiving endGroup after a LinkageError by @unkarjedy in #9667
    • fix: Fixes the ability to extend TestResultLogger by @unkarjedy in #9655
    • fix: Fixes --addPluginSbtFile getting lost after reboot by @azdrojowa123 in #9669
    • fix: Fixes JDK 17 domain socket deadlocks by @eed3si9n in #9671
    • fix: Keep adhoc test classloader open in a forked test @stasimus in #9639
    • fix: Fixes Windows runner by @eed3si9n in #9680

    Full Changelog: v2.0.7...v2.0.8

    Original source
  • Aug 21, 2026
    • Date parsed from source:
      Aug 21, 2026
    • First seen by Releasebot:
      Oct 13, 2026
    sbt logo

    sbt

    2.0.7

    sbt releases versions 1.13.0 and 2.0.7 with a fix for a remote code execution vulnerability affecting TCP server connections, plus improvements to compilation performance, caching, BSP, and other bug fixes.

    ⚠️ Remote code execution vulnerability fix

    sbt team received a security report GHSA-943m-f264-54p4 from @stasimus that when the serverConnectionType is set to Tcp, an attacker is able to execute arbitrary code remotely via BSP, similar to a recent bug that was found in JSON-RPC. sbt 1.13.0 and 2.0.7 fix this bug.

    Builds with the default serverConnectionType are not affected. In affected builds, we recommend removing the serverConnectionType setting, or upgrading to a patched version or later. In an affected build, the setting might look like this:

    Global / serverConnectionType := ConnectionType.Tcp
    

    The remediation was implemented by @stasimus.

    🚀 updates

    • perf: Stop re-converting the classpath in compileOptions by @hoangmaihuy in #9622

    🐛 bug fixes

    • fix: Guard diskcache against path traversal by @eed3si9n in #9605
    • fix: Name the platform in CrossVersion(module, scalaModuleInfo) by @kitbellew in #9620
    • fix: Avoid rewriting unchanged plugin descriptors by @unkarjedy in #9624
    • fix: Fixes scalacOptions in BSP using VirtualFileRef by @azdrojowa123 in #9610
    • fix: Fixes -V parsing in sbt runners by @anatoliykmetyuk in #9626
    • fix: Fixes filesystem traversal order affecting cache stability by @christianharrington in #9646

    behind the scenes

    • ci: Remove cla-checker v1 by @eed3si9n in #9571
    • Update sbtn to 2.0.0-8753a981 by @eed3si9n in #9630

    Full Changelog: v2.0.6...v2.0.7

    Original source
  • Aug 21, 2026
    • Date parsed from source:
      Aug 21, 2026
    • First seen by Releasebot:
      Oct 13, 2026
    sbt logo

    sbt

    1.13.0

    sbt releases fixes for a remote code execution vulnerability affecting TCP server connections, alongside Scala 3.9 REPL support, parallel I/O operations, and other bug fixes. Default server connections are not affected.

    ⚠️ Remote code execution vulnerability fix

    sbt team received a security report GHSA-943m-f264-54p4 from @stasimus that when the serverConnectionType is set to Tcp, an attacker is able to execute arbitrary code remotely via BSP, similar to a recent bug that was found in JSON-RPC. sbt 1.13.0 and 2.0.7 fix this bug.

    Builds with the default serverConnectionType are not affected. In affected builds, we recommend removing the serverConnectionType setting, or upgrading to a patched version or later. In an affected build, the setting might look like this:

    Global / serverConnectionType := ConnectionType.Tcp
    

    The remediation was implemented by @stasimus.

    🚀 updates

    • Scala 3.9 REPL support by @Gedochao in #9564
    • IO.jarParallel and IO.zipParallel by @hoangmaihuy in sbt/io#540

    🐛 bug fixes

    • fix: Avoid rewriting unchanged plugin descriptors by @unkarjedy in #9613
    • fix: Fixes -V parsing in sbt runners by @anatoliykmetyuk in #9626

    behind the scenes

    • ci: Remove cla-checker v1 by @eed3si9n in #9572
    • Update sbtn to 2.0.0-8753a981 by @eed3si9n in #9635
    • Bump IO to 1.13.0 by @eed3si9n in #9648

    new contributors

    • @Gedochao made their first contribution in #9564

    Full Changelog: v1.12.15...v1.13.0

    Original source
  • Aug 21, 2026
    • Date parsed from source:
      Aug 21, 2026
    • First seen by Releasebot:
      Oct 13, 2026
    sbt logo

    sbt

    2.0.6

    sbt releases patched versions that fix a remote code execution vulnerability affecting builds configured to use TCP server connections. The update also preserves file timestamps in the local disk cache and improves update-task performance through file-hash caching.

    ⚠️ Remote code execution vulnerability fix

    sbt team received a security report GHSA-m2pw-22cj-jq4v from @arpitjain099 that when the serverConnectionType is set to Tcp, an attacker is able to execute arbitrary code remotely via the sbt server. sbt 1.12.15 and 2.0.6 fix this bug.

    Builds with the default serverConnectionType are not affected.

    In affected builds, we recommend removing the serverConnectionType setting, or upgrading to a patched version or later. In an affected build, the setting might look like this:

    Global / serverConnectionType := ConnectionType.Tcp
    

    The remediation was implemented by @eed3si9n and @anatoliykmetyuk.

    🐛 bug fixes

    • fix: Preserve file timestamp in local disk cache by @eed3si9n in #9559

    🚀 updates

    • perf: Improve update task by caching file hashes by @takayahilton in #9559

    Full Changelog: v2.0.5...v2.0.6

    Original source

This is the end. You've seen all the release notes in this feed!

Releasebot

Curated by the Releasebot team

Releasebot is an aggregator of official release notes from hundreds of software vendors and thousands of sources.

Our editorial process involves the manual review and audit of release notes procured with the help of automated systems.