sbt Release Notes
11 release notes curated from 1 source by the Releasebot Team. Last updated: Oct 18, 2026
- Oct 18, 2026
- Date parsed from source:Oct 18, 2026
- First seen by Releasebot:Oct 18, 2026
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
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 2Successful tests will display only a terse summary by default:
[info] passed: total 4, failed 0, errors 0, passed 4, cached 4--test_summary=successcan 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=falseThis was contributed by @anatoliykmetyuk in #9675.
workerMaxInstances and testTopology
sbt 2.1.0 adds new settings
workerMaxInstancesandtestTopologyto control test scheduling, especially of the forked tests. UseGlobal / workerMaxInstancesto change the number of worker instances. The default is set to 2:// or sbt -Dsbt.worker_max_instances=2 Global / workerMaxInstances := 2Use the
testTopologysetting 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.subprojectExclusiveThis 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/compileThis 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 isexpr.valueshort-circuits tox.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 := NilThis 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.
- Oct 2, 2026
- Date parsed from source:Oct 2, 2026
- First seen by Releasebot:Oct 13, 2026
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
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
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:
- Smokeball release notes147 release notes · Latest Oct 2, 2026
- Cosmolex release notes20 release notes · Latest Jul 30, 2025
- PracticePanther release notes36 release notes · Latest Aug 11, 2026
- Salesforce release notes83 release notes · Latest Oct 1, 2026
- Microsoft release notes1038 release notes · Latest Oct 15, 2026
- Zoom release notes220 release notes · Latest Oct 16, 2026
- Sep 14, 2026
- Date parsed from source:Sep 14, 2026
- First seen by Releasebot:Oct 13, 2026
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
- Sep 14, 2026
- Date parsed from source:Sep 14, 2026
- First seen by Releasebot:Oct 13, 2026
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/compileThis 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 2Successful tests will display only a terse summary by default:
[info] passed: total 4, failed 0, errors 0, passed 4, cached 4--test_summary=successcan 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=falseThis 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 := 2Use 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.subprojectExclusiveThis 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
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
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.TcpThe 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
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.TcpThe 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
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.TcpThe 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!
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.