// tag::changelog[]
== Changelog
ifndef::link-github[]
:link-github: https://github.com/com-lihaoyi/mill
endif::[]
:link-compare: {link-github}/compare
:link-pr: {link-github}/pull
:link-issue: {link-github}/issues
:link-milestone: {link-github}/milestone
// find-replace-regex: https://github.com/com-lihaoyi/mill/pull/(\d*) -> {link-pr}/$1[#$1]

_The changelog below is for tagged, stable releases. For unstable releases,
see the list at https://repo1.maven.org/maven2/com/lihaoyi/mill-dist_


[#1-1-0]
=== 1.1.0
:version: 1.1.0
:milestone-name: 1.1.0
:milestone: 136
:prev-version: 1.0.6
_2026-01-21_

_Changes since {prev-version}:_


The big feature of Mill `1.1.0` is support for declarative modules defined in `build.mill.yaml`
files and single-file `.java`, `.scala`, or `.kt` scripts with a YAML build header. These
are compatible with existing `.mill` module definitions, and are intended for simple projects
or modules that do not need the flexibility of a full programming language to configure their
build.

`1.1.0` contains locally-breaking changes but preserves plugin compatibility: you may need to update
your local builds to be compatible, but existing plugins published for 1.x can continue to be
used unchanged. This section aggregates the changes from `1.1.0-RC1` to `1.1.0-RC4`, which are
no longer documented individually now that the final `1.1.0` release is out.

==== Declarative Module Definitions

In Mill 1.1.0, you can define a simple `JavaModule` an it's test submodule via a declarative
`build.mill.yaml`/`package.mill.yaml` syntax:

.`build.mill.yaml`
[,yaml]
----
extends: JavaModule
mvnDeps:
- net.sourceforge.argparse4j:argparse4j:0.9.0
- org.thymeleaf:thymeleaf:3.1.1.RELEASE
----

.`test/package.mill.yaml`
[,yaml]
----
extends: [build.JavaTests, mill.javalib.TestModule.Junit4]
mvnDeps:
- com.google.guava:guava:33.3.0-jre
----

This is equivalent to Mill's existing `object foo extends JavaModule{ def mvnDeps = ... }` syntax.
All the normal Mill commands still apply: `./mill compile`, `./mill test`, `./mill assembly`, etc.

We expect that declarative `build.mill.yaml` files will help simplify the use of Mill for
small projects, where the user typically just needs to set some config keys and doesn't need
custom tasks or custom build logic that programmable module definitions allow. See the docs
for https://mill-build.org/mill/main-branch/javalib/config.html[Declarative Java Modules] or
https://mill-build.org/mill/main-branch/scalalib/config.html[Declarative Scala Modules]
for more information.

==== Single-File Scripts

Single-file script modules allow you to write simple programs in a single file with a `//|`
build header comment specifying its configuration. These are useful in scenarios where a separate
build complexity is overkill: student projects, small experiments, prototypes, or command-line
scripts to replace the Bash and Python scripts common throughout the ecosystem.

For example, a single-file script to spawn a simple
https://spring.io/projects/spring-boot/[Spring-Boot] webserver can be defined as shown below:

[,java]
----
//| mvnDeps: [org.springframework.boot:spring-boot-starter-web:3.2.0]
package example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.*;

@SpringBootApplication
@RestController
public class WebServer {
  public static void main(String[] args) throws Exception {
    SpringApplication.run(WebServer.class, args);
    Thread.sleep(Integer.MAX_VALUE);
  }

  @PostMapping("/reverse-string")
  public String reverseString(@RequestBody String body) {
    return new StringBuilder(body).reverse().toString();
  }
}
----

[,console]
----
> ./mill WebServer.java:runBackground

> curl -d 'helloworld' localhost:8080/reverse-string
dlrowolleh
----

See the docs for https://mill-build.org/mill/main-branch/javalib/script.html[Java Single-File Scripts]
for more information.

Single-file scripts support the three main JVM languages: Java, Scala, and Kotlin. Below
is an example single-file Scala script implementing a recursive web scraper with
https://jsoup.org/[JSoup]:

[,scala]
----
//| mvnDeps: [org.jsoup:jsoup:1.7.2]
import org.jsoup.*
import scala.collection.JavaConverters.*

def fetchLinks(title: String): Seq[String] = {
  Jsoup.connect(s"https://en.wikipedia.org/wiki/$title")
    .header("User-Agent", "My Scraper")
    .get().select("main p a").asScala.toSeq.map(_.attr("href"))
    .collect { case s"/wiki/$rest" => rest }
}

@main
def main(startArticle: String, depth: Int) = {
  var seen = Set(startArticle)
  var current = Set(startArticle)
  for (i <- Range(0, depth)) {
    current = current.flatMap(fetchLinks(_)).filter(!seen.contains(_))
    seen = seen ++ current
  }

  pprint.log(seen)
}
----

[,console]
----
>  ./mill HtmlScraper.scala --start-article singapore --depth 1
...
  "Hokkien",
  "Conscription_in_Singapore",
  "Malaysia_Agreement",
  "Government_of_Singapore",
...
----

Mill's single-file Scala script modules are an alternative to
http://scala-cli.virtuslab.org/[Scala-CLI] scripts. They are also a replacement for
https://ammonite.io/[Ammonite Scala Scripts], and bundle a similar set of libraries
(OS-Lib, uPickle, Requests-Scala, etc.). See the docs for
https://mill-build.org/mill/main-branch/scalalib/script.html[Scala Single-File Scripts]
for more information

==== Other Breaking Changes

* Cut down the number of Mill file suffixes to just `.mill`, and `.mill.yaml` ({link-pr}/6016[#6016])
** This means `.sc` and `.mill.scala` will no longer be recognized as build files. Please rename
any build files using those suffixes to `.mill` instead

* Mill no longer uses system java unless explicitly specified, instead using latest LTS Java
version unless explicitly overridden with `system` ({link-pr}/6005[#6005]).
This is intended to improve the reproduce-ability of Mill projects built across different
environments.
** Mill instead uses a fixed default version `zulu:21` when no `mill-jvm-version` is specified.
Please set an explicit `//| mill-jvm-version:` in your build header to specify the version
you need, or revert to the old default of using the environmental `java` installation
via `//| mill-jvm-version: system`

* `ScalaModule#repl` now is an alias for `ScalaModule#console`, and runs the default Scala
  REPL instead of Ammonite. Set `def ammoniteRepl = true` to opt-in to making it run Ammonite
  {link-pr}/6455[#6455]

==== Notable Features

* Interactive commands like `./mill foo.repl` or `./mill foo.jshell` no longer require the
  `-i`/`--interactive`/`--no-daemon` flag to be passed ({link-pr}/6602[#6602]),
  via the `Jvm.runInteractiveCommand`/`callInteractiveProcess` APIs

* Add builtin support for `jshell` command on ``JavaModule``s to open
a Java REPL ({link-pr}/5984[#5984])

* `./mill repl` and `./mill jshell` in a folder without a build defined can be used to
  open a Scala REPL or JShell console not connected to any specific module

* Add `mill-jvm-index-version` to build header keys ({link-pr}/6085[#6085])

* Provide `./mill java`, `./mill javac`, etc. builtin commands to streamline using Mill as the
sole source of a Java installation {link-pr}/6493[#6493]

* Add `./mill updateMillScripts` builtin command to easily update your `./mill` and `./mill.bat`
bootstrap scripts to a specified version {link-pr}/6492[#6492]

* Add `resolvedMvnSources` task to simplify downloading a module's dependencies' source jars
and unpacking them, for browsing by humans and LLMs {link-pr}/6537[#6537]

* Allow users to specify `.super` when invoking tasks from the command line {link-pr}/6482[#6482]

* Add a `.bsp/out/mill-chrome-profile.json` file for Mill's BSP server, making it easier to
investigate where Mill's IDE import and integration is spending its time {link-pr}/6508[#6508]

* Support `FORCE_COLOR` environment variable {link-pr}/6300[#6300]. This can be configured in your CI
system (e.g. Github Actions) to make Mill produced colored output logs for more comfortable viewing

* Overhaul of the `Result.Failure` data type ({link-pr}/6278[#6278], {link-pr}/6279[#6279],
{link-pr}/6284[#6284]). Rather than being a thin wrapper around `String`, `Result.Failure`
now models a linked list of ``error: String``s along with optional file-position and stack-trace
metadata for any error, with a new `.zip` method that aggregates errors and aggregating errors
in `Result.sequence` and `Result.traverse`. This allows us to improve the command-line formatting
for structured errors while being backwards compatible with existing code that will just use the
`error: String` and ignoring the other metadata

* Cross module command-line syntax has been changed from `foo[js,2.12.20].bar` to
`foo.js.2_12_20.bar`, with dot-separated labels and any dots within cross values substituted
by ``_``s. The old syntax continues to be supported for backwards compatibility {link-pr}/6376[#6376]


==== Other Changes

* Updated `build.mill` files to use to Scala 3.8.1 final {link-pr}/6654[#6654]

* Improvements to selective test execution and cache invalidation {link-pr}/6650[#6650],
and `selective.resolveTree`/`mill-invalidation-tree.json` reporting {link-pr}/6616[#6616]

* Tasks such as `./mill version`, `shutdown`, etc. that do not depend on the build files being compiled
are now annotated `@nonBootstrapped` to let them run without the Mill bootstrap process completing
{link-pr}/6593[#6593],

* Rename `def jvmId` to `def jvmVersion` {link-pr}/6493[#6493]

* Allow users to disable some modules in BSP via `def enableBsp = false` ({link-pr}/6065[#6065])

* Fix Scala Native link logs in server-client mode ({link-pr}/6053[#6053])

* Add proper error message when circular task dependency is detected ({link-pr}/6044[#6044])

* Fix CLI option `--help-advanced` ({link-pr}/5993[#5993])

* Support for HTTP Proxy settings in the Coursier dependency downloader ({link-pr}/5971[#5971])

* Start of a dedicated documentation page and examples for using Mill to build
Spring-Boot projects (https://mill-build.org/mill/main-branch/javalib/springboot-examples.html[link]).
This is currently pretty bare, but will get fleshed out as we move towards `1.1.0` final


* Ensure changes in `mill-version` or `mill-jvm-version` trigger selective execution
  for all tasks {link-pr}/6582[#6582]

* Fix "Can't clean external worker" {link-pr}/6559[#6559]

* Support selecting the deepest meta-build with `--meta-build -1` {link-pr}/6516[#6516]

* Add ability to run `./mill path` between queries resolving multiple `src` and `dest` tasks
  {link-pr}/6512[#6512]

* Make client-server lock use atomic file creation rather than native file locks {link-pr}/6472[#6472]

* Build Mill's Graal native image launchers in compatibility mode {link-pr}/6491[#6491]

* Make `mill.scalalib.scalafmt.ScalafmtModule/` default to `/scalafmt` {link-pr}/6478[#6478]

* Fix `bspClean` {link-pr}/6477[#6477]

* Disable `finishProjectCompilation` to resolve intermittent crashes in Kotlin compilation
  {link-pr}/6476[#6476]

* Silence spurious warnings on newer JDK versions {link-pr}/6475[#6475]

* Support proguard for Java modules {link-pr}/6473[#6473]

* `./mill init` now generates declarative `.mill.yaml` files for Maven and Gradle import
  by default  {link-pr}/6441[#6441]

* Integrate Kotlin incremental compilation {link-pr}/6360[#6360]

* Syntax-highlight Java compilation errors {link-pr}/6354[#6354]

* Improvements to `ZincWorkerMain` compile-worker stability when using custom `def jvmId`
  {link-pr}/6348[#6348] {link-pr}/6349[#6349]

* Improvements to GraalVM Native Image support {link-pr}/6315[#6315] {link-pr}/6547[#6547] {link-pr}/6315[#6315]

* Ensure `must be defs defined in a Module class/trait/object body` error happens reliably
  for commands {link-pr}/6336[#6336]

* Lock around info, warn, error, debug logs to avoid interleaving {link-pr}/6321[#6321]

* Add a new task type `Task.Uncached` {link-pr}/6436[#6436]
* Allow un-prefixed dependencies in `--import` {link-pr}/6461[#6461]

* Improve lifecycle management and stability of `ZincWorkerMain` subprocesses to try and fix
  crashes and instability {link-pr}/6295[#6295]

* Report error if build header comment conflicts with task defined in `mill-build/build.mill`
  {link-pr}/6271[#6271]

* Allow `console`/`--repl` to take arguments from the command line {link-pr}/6269[#6269]

* Make unsuccessful tasks always run the subsequent time when `--watch` is active {link-pr}/6263[#6263]

* Fix deadlock in logging infrastructure caused by locking on wrong stream. {link-pr}/6255[#6255]

* Add `TestModule#testArgsDefault` {link-pr}/6252[#6252]

* Many formatting and stability improvements for the terminal logging {link-pr}/6223[#6223]
  {link-pr}/6235[#6235] {link-pr}/6241[#6241]

* Add PublishCredentialsModule, MavenPublish and MavenPublishModule {link-pr}/6231[#6231]

* Make `run` commands exclusive {link-pr}/6220[#6220]

* Support for generating Software Bill Of Materials (SBOM) {link-pr}/4757[#4757]

* Improvements to Android build support {link-pr}/6219[#6219] {link-pr}/6233[#6233]

* Improvements to Spring-Boot support {link-pr}/6208[#6208]

* Add `MILL_BSP_OUTPUT_DIR` env var and rework defaults {link-pr}/6262[#6262]

* Improvements to example `.zip` file downloads to make them more user-friendly {link-pr}/6122[#6122]

* Improvements and cleanup of Mill bootstrap scripts {link-pr}/6117[#6117]

* Fix Junit5 test discovery when using custom JVM version {link-pr}/6127[#6127]

* Improve performance of test discovery and test initialization when using custom JVM
  versions by running this logic in ZincWorker rather than spawning a subprocess {link-pr}/6125[#6125]

* Improve handling of cancellation daemon shutdown in the presence of multiple connected launchers {link-pr}/6136[#6136]

* `millBinPlatform` should be `1` for `1.1.0-RCx` {link-pr}/6134[#6134]

* Overhaul of `.mill.yaml` and `//|` builder header handling, reducing recompilation latencies
  and improving error messages {link-pr}/6155[#6155] {link-pr}/6170[#6170]

* Make selective execution trigger on changes to build overrides {link-pr}/6158[#6158]

* Shift the responsibility of setting up annotation processors from the
  user (via javacOptions) to mill (via a new annotationProcessor API) {link-pr}/6168[#6168]

* Improvements to Mill Spring-Boot docs and examples {link-pr}/6181[#6181] {link-pr}/6099[#6099]

* Greatly reduced verbosity of command line logging to make errors easier to skim and understand
  {link-pr}/6186[#6186] {link-pr}/6187[#6187]

* More aggressively skip files when discovering scripts for BSP import {link-pr}/6194[#6194]

* Improvements to `./mill init` {link-pr}/6658[#6658]{link-pr}/6566[#6566] {link-pr}/6567[#6567] {link-pr}/6434[#6434] {link-pr}/5428[#5428]

* Many improvements to Mill's Android build support {link-pr}/6527[#6527] {link-pr}/6551[#6551] {link-pr}/5887[#5887], {link-pr}/5888[#5888],
{link-pr}/5926[#5926], {link-pr}/5963[#5963], {link-pr}/5997[#5997], {link-pr}/5980[#5980],
{link-pr}/6063[#6063], {link-pr}/6073[#6073]

[#1-0-6]
=== 1.0.6
:version: 1.0.6
:milestone-name: 1.0.6
:milestone: 131
:prev-version: 1.0.5
_2025-10-01_

_Changes since {prev-version}:_

* Support Playwright testing for Scala-JS ({link-pr}/5777[#5777])
* Clean Linker caches when ScalaJSWorker is closed ({link-pr}/5933[#5933])
* Fix prompt resizing when connecting to existing daemon ({link-pr}/5924[#5924])
* Bump Scala version to 3.7.3 ({link-pr}/5897[#5897])
* Make `--bsp` Mill process launch from `MillBspMain` class {link-pr}/5896[#5896])

_Changes since {prev-version}:_

[#1-0-5]
=== 1.0.5
:version: 1.0.5
:milestone-name: 1.0.5
:milestone: 130
:prev-version: 1.0.4
_2025-09-16_

_Changes since {prev-version}:_

* Stability improvements to Mill launcher-daemon interactions ({link-pr}/5865[#5865], {link-pr}/5872[#5872])
* Use Kotlin build-tools-api to compile Kotlin 2.1+ code ({link-pr}/5785[#5785], {link-pr}/5859[#5859])
* Include compile classpath in unidoc module ({link-pr}/5858[#5858])
* Disable certain `fsNotifyWatchLog` logging to prevent infinite logging loops ({link-pr}/5856[#5856])
* Fix Scala.js link logs in server-client mode ({link-pr}/5845[#5845])
* Show log prefix in failure summary to make it easier to grep for relevant failure logs ({link-pr}/5842[#5842])
* Make `--bsp` turn on `--no-daemon` mode automatically ({link-pr}/5840[#5840])
* Fix handling of threadlocals in `Worker#close` calls ({link-pr}/5834[#5834])
* Fix prompt when server restarts due to version change ({link-pr}/5832[#5832])
* Retry mill daemon start rather than PID file reading to try and stablize server start ({link-pr}/5829[#5829])
* Update lazy val bytecode signature heuristics to work with Scala 3 lazy vals ({link-pr}/5828[#5828])
* Pre-parse Mill CLI config in launcher to allow `-i`/`--no-daemon` flags to be passed anywhere rather than only as the first argument ({link-pr}/5823[#5823])
* KSP 2 support ({link-pr}/5727[#5727], {link-pr}/5768[#5768], {link-pr}/5795[#5795])
* Fix forced versions handling of transitive dependencies ({link-pr}/5813[#5813])
* Read coursier env vars and Java properties via input tasks ({link-pr}/5793[#5793])
* Register `MillURLClassLoader` as parallel capable ({link-pr}/5791[#5791], {link-pr}/5811[#5811])
* Let `MillURLClassLoader` find classes not found in shared classloader
* Make Mill work with `mill-build/src/` folder even if `mill-build/build.mill` does not exist ({link-pr}/5783[#5783])
* Android: Bugfixes for Windows support ({link-pr}/5775[#5775])
* Rework Android SDK installation ({link-pr}/5766[#5766])
* Android: package jnis provided by dependencies ({link-pr}/5760[#5760])
* Implement support for building Scala 3.8 modules ({link-pr}/5751[#5751])



[#1-0-4]
=== 1.0.4
:version: 1.0.4
:milestone-name: 1.0.4
:milestone: 129
:prev-version: 1.0.3
_2025-08-27_

_Changes since {prev-version}:_

* Fix flicker in PromptLogger reporting of current test class running for each worker ({link-pr}/5675[#5675])
* Fix Rapid shutdown/startup cycles fail to connect to the mill daemon ({link-pr}/5711[#5711])
* Use custom JVM versions during Scala compilation, avoid forking for Java compilation ({link-pr}/5604[#5604])
* BSP fixes ({link-pr}/5698[#5698], {link-pr}/5725[#5725]), move `out/` to `out/mill-bsp-out/` when running in BSP mode ({link-pr}/5689[#5689])
* Handle uncaught errors in test frameworks ({link-pr}/5728[#5728])
* Support `ScalaNativeModule.runMain` ({link-pr}/5723[#5723])
* Assert task method shape in task macros to catch more mis-placed tasks hidden behind task ascriptions ({link-pr}/5729[#5729])
* Lots of Android support improvements ({link-pr}/5701[#5701], {link-pr}/5700[#5700], {link-pr}/5688[#5688], {link-pr}/5678[#5678], {link-pr}/5677[#5677], {link-pr}/5674[#5674], {link-pr}/5662[#5662], {link-pr}/5656[#5656])


[#1-0-3]
=== 1.0.3
:version: 1.0.3
:milestone-name: 1.0.3
:milestone: 127
:prev-version: 1.0.2
_2025-08-05_

_Changes since {prev-version}:_

* Mill now tab-completes flags like `-j` or `--jobs` ({link-pr}/5642[#5642]),
   as well as flags belonging to ``Task.Command``s that the user defines ({link-pr}/5643[#5643])
   in addition to tab-completing modules and tasks that it did before. 
   Mill also now displays the description for flags and tasks that get tab completed
   ({link-pr}/5648[#5648], {link-pr}/5650[#5650]). Note that these improvements require
   you to re-run `./mill mill.tabcomplete/install` to activate
+
[,console]
----
$ ./mill -<tab>
-D  <k=v> Define (or overwrite) a system property.
-b  Ring the bell once if the run completes successfully, twice if it fails.
-d  Show debug output on STDOUT
-i  Run Mill in interactive mode, suitable for opening REPLs and taking user input.
-j  <str> The number of parallel threads. It can be an integer e.g. `5`
-k  Continue build, even after build failures.
-v  Show mill version information and exit.
-w  Watch and re-run the given tasks when when their inputs change.

$ ./mill core.<tab>
core.api        This module contains the data types necessary for defining a Mill build:
core.constants  This module contains basic constants and helpers shared between the client,
core.eval       This folder contains the core evaluator logic for the Mill build tool,
core.exec       This module contains code related to planning and execution of the Mill
core.internal   This package contains internal helpers and utilities used throughout
core.resolve    This module contains logic around resolving Mill command line
----


* Add a generator for Eclipse JDT project files ({link-pr}/5614[#5614]). This can be run
  with `./mill mill.eclipse/` to generate the configuration that you can then import
  into Eclipse JDT

* Flesh out `os.Checker` error messages to make them more actionable ({link-pr}/5640[#5640])

* Display individual test class timings in `mill-chrome-profile.json` ({link-pr}/5635[#5635])

* Add `compileGeneratedSources` directory for Java annotation processors to place generated
  sources to be picked up by IDEs ({link-pr}/5629[#5629])

* Improvements to Android build support ({link-pr}/5623[#5623] {link-pr}/5608[#5608] {link-pr}/5634[#5634])



[#1-0-2]
=== 1.0.2
:version: 1.0.2
:milestone-name: 1.0.2
:milestone: 126
:prev-version: 1.0.1
_2025-07-29_

_Changes since {prev-version}:_

* Fix mill server timeout back to 30min ({link-pr}/5620[#5620])
* Propagate environment variables to run and test unless `def propagateEnv = false` ({link-pr}/5617[#5617])
* Lots of performance optimizations, ~halving the fixed overhead of running a build
  ({link-pr}/5605[#5605], {link-pr}/5603[#5603], {link-pr}/5597[#5597])
* Make `mill-chrome-profile.json` properly report incomplete tasks and display the
  time taken for non-task `resolve` and `planning` phases ({link-pr}/5602[#5602])
* Turn on incremental compilation for `semanticDbData` task to improve IDE integration
  latencies ({link-pr}/5591[#5591])
* Silence noisy BSP errors in VSCode/Metals ({link-pr}/5595[#5595])
* Preserve last-generated `compiledClassesAndSemanticDbFiles` to make VSCode/Metals IDE
  integration work when compilation is broken by using the previous compilation output
  ({link-pr}/5590[#5590])
* Fix incorrect parsing of `PublishInfo` from string when artifact id or version contains
  regex-sensitive characters ({link-pr}/5589[#5589])
* Make `MavenTests`/`SbtTests`/`KotlinMavenTests` modules take their folder path
  from their module name ({link-pr}/5587[#5587])
* Improve type inference for `def task = Seq()` and `def task = Nil` ({link-pr}/5584[#5584])



[#1-0-1]
=== 1.0.1
:version: 1.0.1
:milestone-name: 1.0.1
:milestone: 125
:prev-version: 1.0.0
_2025-07-21_

_Changes since {prev-version}:_

* Make `def repositories` transitively aggregated from upstream modules ({link-pr}/5576[#5576])
* Fix snapshot publishing in `SonatypeCentralPublishModule/publishAll` ({link-pr}/5539[#5539])
* Improvements to Maven proejct importer ({link-pr}/5530[#5530])
* Fix gpg hanging waiting for input when more than one key is present in keychain" ({link-pr}/5503[#5503])
* Fix version sources in CrossSbtTests ({link-pr}/5519[#5519])
* Fix `./mill init` example download paths ({link-pr}/5516[#5516])
* Silence noisy warning about encoded package names ({link-pr}/5511[#5511])
* Fix spurious version mismatch error when using `-jvm` launcher ({link-pr}/5510[#5510])
* Properly offset line numbers in runtime stack traces ({link-pr}/5504[#5504])


[#1-0-0]
=== 1.0.0
:version: 1.0.0
:milestone-name: 1.0.0
:milestone: 124
:prev-version: 1.0.0-RC3
_2025-07-10_


`1.0.0` is a major backwards incompatible release that fixes many long-standing
issues and aims to build a strong technical foundation for the next few years of development. 
For any questions or discussion about `1.0.0`, please use the following thread:

- https://github.com/com-lihaoyi/mill/discussions/5497

Any third-party Mill plugins you use will need to be re-published for Mill 1.0.0 if you would
like to use them in your builds. Plugins that are known to be ported include:

- `com.github.lolgab::mill-mima::0.2.0`
- `com.goyeau::mill-scalafix::0.6.0`

If you maintain a plugin and update it to Mill 1.0.0, please send a PR to add it to this list!

Builtin functionality in `mill.*lib` packages or contrib
plugins in `mill.contrib` are available immediately.

We expect it will take some work from projects on Mill 0.12.x or earlier to migrate to 1.0.0.
There are a lot of breaking changes in the release, but we hope that these breaking changes will
greatly simplify the Mill user experience going forward, and allow it to remain stable for more
years before further breaking changes are necessary. Updated docs are available on the Mill
doc-site:

- https://mill-build.org/mill/index.html

If you are upgrading from an earlier version of Mill 0.12.x, you may want to look through the
upgrade PRs for various `com-lihaoyi` projects to get a sense of what upgrading a typical
project looks like

- https://github.com/com-lihaoyi/sourcecode/pull/191
- https://github.com/com-lihaoyi/requests-scala/pull/201
- https://github.com/com-lihaoyi/os-lib/pull/396
- https://github.com/com-lihaoyi/mainargs/pull/195
- https://github.com/com-lihaoyi/upickle/pull/670
- https://github.com/com-lihaoyi/scalatags/pull/288
- https://github.com/com-lihaoyi/fastparse/pull/329
- https://github.com/com-lihaoyi/cask/pull/169
- https://github.com/com-lihaoyi/fansi/pull/124
- https://github.com/com-lihaoyi/geny/pull/99
- https://github.com/com-lihaoyi/PPrint/pull/154
- https://github.com/com-lihaoyi/utest/pull/378

But for most people upgrading, the most relevant changes are listed in the changelog below:

* NOTE: Mill 1.0.0 (and all other versions since 0.12.13) requires an updated bootstrap
script in order to work, due to changes in the Sonatype Central package registry that
forced a change in the download URLs for new releases going forward. To update your
bootstrap script, you can use:
+
.Linux
[,console]
----
> curl -L https://repo1.maven.org/maven2/com/lihaoyi/mill-dist/1.0.0/mill-dist-1.0.0-mill.sh -o mill
> chmod +x mill
> echo 1.0.0 > .mill-version
----
+
.Windows
[,console]
----
> curl -L https://repo1.maven.org/maven2/com/lihaoyi/mill-dist/1.0.0/mill-dist-1.0.0-mill.bat -o mill.bat
> echo 1.0.0 > .mill-version
----

==== Major Breaking Changes

* `build.mill` and `package.mill` files are now written in Scala 3.7.1 ({link-pr}/3369[#3369],
  see https://www.youtube.com/watch?v=Aos6vp81I7Q[bishabosha's talk at Scala.IO Paris]).
  Any third-party libraries used must be Scala 3 compatible (most already are). You may now
  use Scala 3 language features such as https://docs.scala-lang.org/scala3/reference/other-new-features/indentation.html[Optional Braces]
  in your `.mill` files
+
[,scala]
----
package build
import mill.*, javalib.*

object foo extends JavaModule:
  def mvnDeps = Seq(
    mvn"net.sourceforge.argparse4j:argparse4j:0.9.0",
    mvn"org.thymeleaf:thymeleaf:3.1.1.RELEASE"
  )

  object test extends JavaTests with TestModule.Junit4:
    def mvnDeps = Seq(
      mvn"com.google.guava:guava:33.3.0-jre"
    )
----


* Mill now supports a YAML front-matter syntax (YAML version 1.2) in your root `build.mill`
  file, defined by line comments starting with `//|` ({link-pr}/4969[#4969]). This replaces
  the `import $ivy...` syntax and allows external configuration files like `.mill-version`,
  `.mill-jvm-version`, etc. to be configured together e.g.
+
[,scala]
----
//| mill-version: 1.0.0
//| mill-jvm-version: 17
//| repositories: [$PWD_URI/custom-repo]
//| mvnDeps:
//| - com.grack:nanojson:1.8-custom-test
//| - com.lihaoyi::scalatags:0.12.0

package build
...
----

* The YAML front-matter allows you to configure arbitrary tasks in the meta-build.
  Above we show how to configure the `def repositories` and `def mvnDeps` tasks for the
  meta-build, but other meta-build tasks can be configured as well (e.g.
  `scalacOptions`) using the JSON version of the in-memory data structures.


* `ivyDeps` has been renamed to `mvnDeps`, along with all related tasks and methods
  e.g. `compileIvyDeps` is now `compileMvnDeps`, `runIvyDeps` is now `runMvnDeps`, etc.
  ({link-pr}/4930[#4930]).


* The `Agg()`/`Agg[T]` collection types have been removed and replaced by `Seq()`/`Seq[T]`
  ({link-pr}/4525[#4525]):
+
[,diff]
----
-def ivyDeps = Agg(
+def mvnDeps = Seq(
   mvn"org.scalameta::munit::0.7.29"
)
----

* `import $file` has been removed and replaced by direct references to the
  definitions ({link-pr}/4462[#4462]), e.g. if you have a `package build.foo.bar`
  containing `def qux` you can refer to the definition via `build.foo.bar.qux`
  or `import build.foo.bar.qux` without needing the `import $file`
+
[,diff]
----
-import $file.foo.bar.Qux
+import build.foo.bar.Qux
...Qux...
----

* `import $packages` and `import $meta` are no longer necessary and have been removed

* `mill.api.Ctx` is now `mill.define.TaskCtx`, and `mill.define.Ctx` is now `mill.define.ModuleCtx`,
  to avoid confusion over the name `Ctx` being overloaded to refer to two different classes

* `interp.watch`, `interp.watchValue` and `mill.api.Workspace.workspaceRoot` have been moved
  to a new `mill.define.BuildCtx` object that centralizes all these build-level APIs
  ({link-pr}/5142[#5142])

* Replaced `Task.workspace` / `TaskCtx.workspace` with `BuildCtx.workspaceRoot` ({link-pr}/5322[#5322])

* Many Task-related renamings in `mill.define`: `Target` -> `Task.Simple` (still aliased as the `T[_]` type),
  `TargetImpl` -> `Task.Computed`,
  `Worker` -> `Task.Worker`, `Command` -> `Task.Command`, `AnonImpl` -> `Task.Anon`, `InputImpl` -> `Task.Input`,
  `SourcesImpl` -> `Task.Sources`, `SourceImpl` -> `Task.Sources` ({link-pr}/5168[#5168]).

* `mill.testkit.TestBaseModule` has been renamed `mill.testkit.TestRootModule` ({link-pr}/5143[#5143]),
  to make it clear it is meant to be the root of the module hierarchy, and not the class hierarchy

* The `T.*` methods have been removed. These were replaced by `Task.*` equivalents in 0.12.x.
+
[,diff]
----
- def foo = T {
-   ...T.dest...
- }
+ def foo = Task{
+   ...Task.dest...
+ }
----

* `def zincWorker`, `ZincWorkerModule`, and `ZincWorkerUtil` have been renamed to
  `jvmWorker`, `JvmWorkerModule`, and `JvmWorkerUtil` {link-pr}/4834[#4834])

* `millSourcePath` has been renamed to `moduleDir`

* The terms `client`/`server` throughout the codebase have been renamed to `launcher`/`daemon` ({link-pr}/5135[#5135])

* Rename `def defaultCommandName` to `def defaultTask` ({link-pr}/5405[#5405])

* Consolidate `mill.define` and `mill.api` into a single `mill.api` namespace ({link-pr}/5407[#5407])

* Separate `mill.scalalib` and `mill.javalib` into two separate modules, with `scalalib`
  depending on `javalib` but not vice versa. Most classes are left unchanged, although a few
  were moved from `scalalib` to `javalib` as part of this refactor ({link-pr}/5411[#5411], {link-pr}/5469[#5469], {link-pr}/5470[#5470])

* `def test` has been renamed `def testForked` ({link-pr}/4577[#4577]). This allows you to distinguish
  between running all modules named `test` (`./mill __.test`) and running all modules which are test suites
  (`./mill __.testForked`) that may include `integration` tests modules or modules with other names

* Removed `PublishModule.publishSelfDependency` in favor of `artifactMetadata` ({link-pr}/5118[#5118])

* `os.*` filesystem operations are now restricted by default:

** During the execution phase, Task implementations can only write
   to their own `.dest` folder, and only read from their own or upstream `.dest` folders

** During the Resolution phase, code running during module/task instantiation cannot
   write to disk, and can only perform filesystem reads wrapped in `interp.watchValue` blocks

** These restrictions are best effort guardrails to guide users towards best practices, and
   are not intended to be a fully-hermetic sandbox. You can disable them via
   `mill.define.BuildCtx.withFilesystemCheckerDisabled { ... }` if you need to do something
   outside of the sandbox and are sure you know what you are doing, or pass the
   `--no-filesystem-checker` flag to globally disable filesystem read/write checks

* `build.mill` files are now compiled with a minimized classpath containing only
  the necessary APIs, without all of Mill's internal code on the classpath
  ({link-pr}/4879[#4879]).

** The `build.mill` classpath has been consolidated under
   the `mill-libs` artifact ({link-pr}/4967[#4967]), which should be used when
   building plugins, rather than the `mill-dist` we were using before. All the "library"
   code Mill provides to integrate language toolchains now has `libs-` in the artifact name,
   e.g. `mill-libs-scalalib`, `mill-libs-kotlinlib`, etc.

** `mill.resolve`, `mill.runner`, `mill.eval`, etc. are no longer on the classpath.
   In general, a lot of Mill packages that were previously
   on the classpath by happenstance have been removed, and only the core APIs you really
   need remain exposed under `mill.api`, `mill.util`, and the various
   `mill.foolib` packages. `mill.define` has been removed and its classes moved to `mill.api`

** Similarly, many third-party libraries that were on the Mill classpath by happenstance
   have been removed, and others that are not intended for public use are present at runtime
   but removed from the compile-time classpath so you cannot compile against them in your
   `build.mill` code. You can re-include any third party libraries you need
   via the `//| mvnDeps: ` YAML build header

* Root modules in `build.mill` and `package.mill` files no longer need an explicit `extends RootModule`
  superclass, as they can be identified unambiguously by the `object package` name, so
  setting up the appropriate superclass is now taken care of by Mill automatically ({link-pr}/5008[#5008])
+
[,diff]
----
-object `package` extends RootModule with JavaModule {
+object `package` extends JavaModule {
   ...
 }
----

* `Jvm.*` methods to spawn subprocesses and classloaders have been consolidated from 20+ helpers
  into 4 main functions ({link-pr}/4456[#4456]): `Jvm.createClassLoader`, `Jvm.withClassLoader`,
  `Jvm.spawnProcess`, and `Jvm.callProcess`. These provide all the configurability you need for
  most callsites in a much more consistent fashion than the previous grab-bag of helpers.

* `evaluator: Evaluator` Command parameters are now only available in commands marked
  `exclusive = true` ({link-pr}/3717[#3717]). Furthermore, many previously-scattered
  evaluation-related APIs have now been consolidated onto the `Evaluator` object:
  `mill.main.RunScript` is now `Evaluator#evaluate`, `mill.resolve.Resolve.Foo` is now
  `Evaluator#resolveFoo`, etc.

* `Task.Source`, `Task.Sources`, and `Task.Input` are no longer allowed to have upstream
  tasks ({link-pr}/4524[#4524]). Most cases where a `Task.Sources` was receiving an upstream
  task can be replaced by a separate `Task.Sources` and `Task{}`
+
[,diff]
----
- def sources = Task.Sources{ super.sources() ++ Seq(PathRef(...)) }
+ def customSources =  Task.Sources(...)
+ def sources = Task { super.sources() ++ customSources() }
----

* Mill's plugin infrastructure has changed with the release of Mill 1.0.0: plugins now need
  to use Scala 3.7.0, should now depend on `mill-libs` rather than `mill-dist`, and integration
  and example tests should use `MILL_LOCAL_TEST_OVERRIDE_*` environment variables
  rather than the previous `mill/local-test-overrides` classpath resource. See the latest
  documentation for how plugins are currently defined and published at
  https://mill-build.org/mill/main-branch/extending/writing-plugins.html[Writing Mill Plugins]

* Mill's uPickle dependency has been updated from 3.3.1 to 4.2.1, which introduces some backwards
  incompatible changes to the serialized JSON output. This should only affect you if you are
  processing Mill's `out` folder `.json` files via external tools

* Simplify configuration of JVM version, they are now configured by overriding `def jvmId`
  directly on `JavaModule` or `ScalaModule` without needing to go through `def jvmWorker`
  ({link-pr}/5327[#5327])

==== Other Changes

* Mill's bootstrap scripts now use the native launcher by the default, except for
  Windows-ARM which is not supported by the underlying Graal tooling. To use the
  JVM-based launcher, you need to explicitly use a `-jvm` suffix in
  your `.mill-version` file e.g. `1.0.0-jvm`. We expect this should be mostly transparent
  and have no visible impact to users.

* Add support for Bash/Zsh tab-completion, installable via `./mill mill.tabcomplete/install`
  ({link-pr}/5279[#5279], {link-pr}/5296[#5296])

* Mill's server-client model has been simplified, from having an elastic pool of JVM daemons
  each connected to a single client at a time, to a single shared JVM that handles potentially
  multiple client simultaneously ({link-pr}/5066[#5066]). This should result in reduced resource
  usage when running Mill in multiple terminals.

** Note that Mill still only processes
   one command at a time, but it is possible to have multiple clients connected to the server
   if e.g. one client is idle in `--watch` while the other client is running a command.

** This fixes some long-standing bugs, e.g. `mill shutdown` used to only shutdown the first
   process in the Mill daemon pool, whereas now
   there is only one process which should get terminated correctly

* Mill's native launcher is able to run on systems without a JVM installed, and will
  download an appropriate JVM distribution on demand if necessary ({link-pr}/4597[#4597])

* `Cross` can now be applied to root modules ({link-pr}/4593[#4593])
+
[,scala]
----
object `package` extends Cross[FooModule]("3.6.2", "2.13.16") {
  ...
}
----

* Mill now supports a `--offline` option to run in offline mode.
  Custom tasks that need to download remote resources should respect that mode via
  the `Task.offline` API. ({link-pr}/4914[#4914])

* `def testParallelism` is set to `true` by default, letting Mill run multiple test classes
  in parallel subprocesses even within the same module. Can be disabled by overriding
  `def testParallelism = false` on the test module.

* `--watch` now uses filesystem change-notification APIs by default (inotify on Linux, fsevents
  on OS-X, etc.) via the `os-lib-watch` module, rather than polling the filesystem for changes.
  This should reduce significantly the baseline CPU usage when Mill is waiting for changes,
  but can be disabled by explicitly passing `--notify-watch false` to the Mill launcher or
  in the `.mill-opts` file if there are any issues with the new approach.

* Mill is now a lot stricter about avoid classloader and thread leaks, which should
  help mitigate problems we've seen in the past with long-lived Mill processes becoming
  unstable or unresponsive ({link-pr}/5079[#5079], {link-pr}/5080[#5080], {link-pr}/5082[#5082])

* Scala 3.7 https://docs.scala-lang.org/sips/named-tuples.html[Scala 3.7.0 Named Tuples]
  can be used as task return values:
+
[,scala]
----
import upickle.implicits.namedTuples.default.given
def namedTupleTask = Task {
  (hello = "world", i = Seq("am", "cow"))
}
----

* `def repositories: T[Seq[String]]` is now provided as a simpler alternative to
  `def repositoriesTask`, making it easier to add the most common URL/file-based repositories
  to your project. `repositoriesTask` still exists, but is now only necessary for
  more complex custom repository setups beyond the simple cases that `repositories` supports
  (see https://get-coursier.io/upcoming/reference-repositories/[Coursier Repositories Reference]
  for documentation on what repository strings are supported).

* Fix `Task.Sources` customization in `./mill init` ({link-pr}/5325[#5325]), and add support
  for importing `.jvmopts` file ({link-pr}/5339[#5339])

* Fix `./mill init` crasher on windows ({link-pr}/5330[#5330])

* Support for publishing `-SNAPSHOT` versions to Sonatype Central ({link-pr}/5489[#5489])

* Fix Sonatype Central publishing for users with multiple GPG keys ({link-pr}/5471[#5471])

* Fix `-Dfoo=bar` property passing when using Graal native image launcher ({link-pr}/5440[#5440])

* Added support for using https://pmd.github.io/[PMD] to lint Java modules ({link-pr}/5393[#5393])

* Improve multi-line terminal prompt, preserving the last-shown prompt when interrupted
  via `Ctrl-C` ({link-pr}/5452[#5452]), and fix an issue with the last character on each line
  missing in the output ({link-pr}/5336[#5336])

* Many BSP support and IDE integration improvements, which should hopefully smoothen out
  the process of using Mill from IDEs like IntelliJ and VSCode ({link-pr}/4851[#4851],
  {link-pr}/4873[#4873], {link-pr}/4876[#4876], {link-pr}/4881[#4881], {link-pr}/4873[#4873],
  {link-pr}/4940[#4940], {link-pr}/4941[#4941], {link-pr}/5275[#5275], {link-pr}/5265[#5265],
  {link-pr}/5220[#5220], {link-pr}/5202[#5202], {link-pr}/5200[#5200], {link-pr}/5310[#5310])

* Testing and enforcement to prevent Classloader and Thread leaks ({link-pr}/5079[#5079], {link-pr}/5082[#5082])

* Major improvements to Android Support ({link-pr}/4485[#4485], {link-pr}/4540[#4540], {link-pr}/4583[#4583],
  {link-pr}/4626[#4626], {link-pr}/4759[#4759], {link-pr}/4892[#4892], {link-pr}/4947[#4947],
  {link-pr}/5013[#5013], {link-pr}/5053[#5053])

* Major improvements to Kotlin Support in Mill, which is now marked as stable ({link-pr}/4557[#4557],
  {link-pr}/4786[#4786], {link-pr}/4771[#4771], {link-pr}/4779[#4779], {link-pr}/4797[#4797], {link-pr}/4963[#4963])

* https://github.com/lefou/mill-vcs-version[`VcsVersion`] has been in-sourced to the Mill repository. External references are no longer needed.
+
[,diff]
----
- import $ivy.`de.tototec::de.tobiasroeser.mill.vcs.version::0.4.0`
- import de.tobiasroeser.mill.vcs.version.VcsVersion
+ import mill.util.VcsVersion

----

[#0-12-17]
=== 0.12.17 - 2025-12-17
:version: 0.12.17
:milestone-name: 0.12.17
:milestone: 132
:prev-version: 0.12.16

_Changes since {prev-version}:_

* Update zinc to 1.11.0 ({link-pr}/5934[#5934])
* Added more forward-compatible API ({link-pr}/5914[#5914])
* Deprecated more API that got remove in Mill 1.0 ({link-pr}/5914[#5914], {link-pr}/6393[#6393])



[#0-12-16]
=== 0.12.16 - 2025-09-23
:version: 0.12.16
:milestone-name: 0.12.16
:milestone: 128
:prev-version: 0.12.15

_Changes since {prev-version}:_

* Added support for Scala 3.8 ({link-pr}/5797[#5797])

* Added support for Java 25 and updated asm-tree to 9.8  ({link-pr}/5891[#5891])


[#0-12-15]
=== 0.12.15
:version: 0.12.15
:milestone-name: 0.12.15
:milestone: 121
:prev-version: 0.12.14
_2025-08-01_

_Changes since {prev-version}:_

* Fixes incorrect parsing of `PublishInfo` from string when artifact id or
version contains regex-sensitive characters ({link-pr}/5599[#5599])

* Use system calls to get terminal size on Linux / Mac ({link-pr}/4497[#4497])

* Support Snapshot handling in `SonatypeCentralPublishModule/publishAll`
({link-pr}/5542[#5542], {link-pr}/5541[#5541], {link-pr}/5576[#5576])

* Support `nativeServiceProviders` in `ScalaNativeModule` ({link-pr}/4744[#4744])

* Fix -D property passing with graal native launcher ({link-pr}/5442[#5442])

* Fix `./mill init` example download in 0.12.x ({link-pr}/5333[#5333])



[#0-12-14]
=== 0.12.14
:version: 0.12.14
:milestone-name: 0.12.14
:milestone: 119
:prev-version: 0.12.13
_2025-05-20_

_Changes since {prev-version}:_

* Convert `runBackground` process exit detection from file-locks to process-ID liveness checks
  ({link-pr}/5120[#5120]), which should hopefully fix some non-deterministic bugs where the new
  process starts before the prior process has fully exited, causing failure to bind to sockets

* Add an opt-in `--notify-watch true` flag to make `--watch` use linux-inotify/mac-fsevents
  instead of polling, which should greatly reduce baseline CPU usage when `--watch` is active
  but no builds are being run ({link-pr}/5073[#5073])

[#0-12-13]
=== 0.12.13
:version: 0.12.13
:milestone-name: 0.12.13
:milestone: 120
:prev-version: 0.12.11
_2025-05-18_

_Changes since {prev-version}:_

* NOTE: Mill 0.12.13 requires an updated bootstrap script in order to work, due to changes in Sonatype
  Central that forced a change in the download URLs for new releases going forward. To update your 
  bootstrap script, you can use
+
[,console]
----
> curl -L https://repo1.maven.org/maven2/com/lihaoyi/mill-dist/0.12.13/mill-dist-0.12.13-mill.sh -o mill
> chmod +x mill
----

* Backport `mill.scalalib.SonatypeCentralPublishModule/` from `main` ({link-pr}/5107[#5107]). With
the https://central.sonatype.org/news/20250326_ossrh_sunset/[Sunset of `oss.sonatype.org`],
all Mill projects still on `oss.sonatype.org` will need to migrate their sonatype namespaces
(e.g. `com.lihaoyi`) to `central.sonatype.org` to continue publishing. Instructions for this migration
are shown below:

** *WARNING: this migration is one-way and cannot be paused or rolled back. If you begin these
steps, you must complete them, otherwise your project will be in an un-publishable state.
Please read through all steps and ensure you have time to complete them all before you begin*

** (Optional) Upgrade to Mill `0.12.13`, which contains the latest `mill.scalalib.SonatypePublishModule/`
command. This is optional because you can use it in earlier versions of Mill (>=0.12.6) as
a `mill.contrib` moule, but upgrading is better as it ensures the command you use will be
forwards compatible to future versions of Mill.

** Log into the new `central.sonatype.org` web UI (it uses your existing `oss.sonatype.org` username and password)
and migrate your namespace from `oss.sonatype.org` via
the instructions here https://central.sonatype.org/faq/what-is-different-between-central-portal-and-legacy-ossrh/.
You will then no longer see your namespace on the `oss.sonatype.org` website and it will now be visible
in the `central.sonatype.org` website

** Generate a new user token from the `central.sonatype.org` web UI, and replace the
old `oss.sonatype.org` tokens everywhere in your publishing infrastructure (e.g. local
scripts, Github Actions secrets, etc.)

** Replace all usage of `./mill mill.scalalib.PublishModule/` with `./mill mill.scalalib.SonatypeCentralPublishModule/`
everywhere it is use (local scripts, Github Actions config, etc.). You should now be able to
publish to `central.sonatype.org`, see in-progress and completed published artifacts in the
`central.sonatype.org` website.

*** If you chose not to upgrade Mill to `0.12.12`, instead of `./mill mill.scalalib.SonatypeCentralPublishModule/`
you will need to use `./mill --import "ivy:com.lihaoyi::mill-contrib-sonatypecentral:" mill.contrib.sonatypecentral.SonatypeCentralPublishModule/publishAll --publishArtifacts __.publishArtifacts`,
and will need to switch to `./mill mill.scalalib.SonatypeCentralPublishModule/` anyway when later
upgrading to Mill 1.0.0 and above.

** Note that `central.sonatype.org` is significantly stricter than `oss.sonatype.org` in validating
published artifacts (details below). This should not affect 99% of projects out there which uses
the default configuration, but may affect you if you use Maven Central to publish other non-jar
artifacts (executables, zip files, etc), and cause confusing errors visible in the
`central.sonatype.org` web portal. Below is a list of the incompatibilities that I am aware of.

*** `central.sonatype.org` now requires a `pom.xml` to be present with every artifact

*** `central.sonatype.org` now requires all files associated with an artifact to follow the
`<artifact-name>-<artifact-version>` name prefix convention, whereas previously any name
was accepted

*** `central.sonatype.org` does not allow non-standard `jar` files (e.g. graal native binaries,
prepended assembly jars to be published with the `.jar` suffix, and they must instead be
published with some other suffix via `def extraPublish`

[#0-12-11]
=== 0.12.11
:version: 0.12.11
:milestone-name: 0.12.11
:milestone: 114
:prev-version: 0.12.10
_2025-05-10_

_Changes since {prev-version}:_

* fix: Use root qualifier in Discover macro ({link-pr}/5055[#5055])
* Fix selective execution when multiple changes are made to one module under `--watch` ({link-pr}/5032[#5032])
* Add ability to define `package` ``ExternalModule``s that can be calle via just `pkg.path/` rather than `pkg.path.ObjectName/` ({link-pr}/4920[#4920])
* Backport `javascriptlib` and `pythonlib` improvements from `main` branch ({link-pr}/4893[#4893])
* Fix wildcard and type selector query bugs ({link-pr}/4862[#4862])
* Lots of Mill `main` branch compatibility changes, adding the new name and deprecating the old one
  ({link-pr}/4838[#4838], {link-pr}/4840[#4840], {link-pr}/4843[#4843], {link-pr}/5005[#5005])


[#0-12-10]
=== 0.12.10
:version: 0.12.10
:milestone-name: 0.12.10
:milestone: 113
:prev-version: 0.12.9
_2025-04-01_

_Changes since {prev-version}:_

* Find main classes with ClassGraph ({link-pr}/4832[#4832])
* First-class support for Kotlin compiler plugins ({link-pr}/4782[#4782])
* Minor improvements to native distribution size ({link-pr}/4829[#4829])
* Fix main class discovery for `KotlinModule` ({link-pr}/4803[#4803])
* Fix uTest task creation for multi-test-class modules ({link-pr}/4812[#4812])
* Less confusing error messages ({link-pr}/4791[#4791])
* Add Kotlin support for BuildInfo module ({link-pr}/4780[#4780])
* Fix potential `ArrayIndexOutOfBoundsException` ({link-pr}/4769[#4769])
* Short progress indicators when running tests within a module ({link-pr}/4656[#4656])
* Add failed tasks count to Mill progress indicator ({link-pr}/4764[#4764])
* Fix main class discovery in Scala 3 ({link-pr}/4761[#4761])


[#0-12-9]
=== 0.12.9
:version: 0.12.9
:milestone-name: 0.12.9
:milestone: 112
:prev-version: 0.12.8
_2025-03-17_

_Changes since {prev-version}:_

* Support `mill init` for migrating from an existing sbt project on a best-effort basis
  (https://mill-build.org/mill/main-branch/migrating/sbt.html[docs]), mirroring the existing Maven and Gradle migration support

* Added a new `def testParallelism = true` flag
  (https://mill-build.org/mill/main-branch/javalib/testing.html#_test_parallelism[docs])
  to opt-in to automatic parallelization
  of test suites, robust enough to provide speedups on most workloads. This is expected to
  become the default (with an opt out) in Mill 0.13.0

* Break the dependency between repositoriesTask and mvnDeps ({link-pr}/4472[#4472])
* Update coursier to 2.1.25-M2 (adds early Gradle Module support) - 0.12.x ({link-pr}/4623[#4623])
* Fix semanticdbData for mixed scala/java projects ({link-pr}/4599[#4599]) ({link-pr}/4629[#4629])
* Improve performances of Bloop/install ({link-pr}/4600[#4600]) ({link-pr}/4628[#4628])
* Pass Mill source JARs to Bloop ({link-pr}/4608[#4608])
* Optimize BSP initialization stuff ({link-pr}/4698[#4698])
* Make source path configurable in TestRootModule ({link-pr}/4703[#4703])

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._

[#0-12-8]
=== 0.12.8
:version: 0.12.8
:milestone-name: 0.12.8
:milestone: 111
:prev-version: 0.12.7
_2025-02-16_

_Changes since {prev-version}:_

* Speed up incremental `.assembly` jar creation for updates in upstream local modules {link-pr}/4566[#4566]
* Add examples of building Apache Spark applications using Mill (https://mill-build.org/mill/main-branch/scalalib/spark.html[docs])
* Add example of building a multi-language project combining Java/Typescript/Python modules with Mill (https://mill-build.org/mill/main-branch/large/multi-language-builds.html[docs])
* Make `Task.Source` and `Task.Sources` take a literal sub-path string syntax by default {link-pr}/4487[#4487]
* Fix `transitiveCoursierProjects` cause OOM on large build {link-pr}/4452[#4452]

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-12-7]
=== 0.12.7
:version: 0.12.7
:milestone-name: 0.12.7
:milestone: 110
:prev-version: 0.12.6
_2025-02-01_

_Changes since {prev-version}:_

* Upgrade OS-Lib to fix usage of `os.zip` on folders {link-pr}/4444[#4444]
* Add example of using Mill to build a Http4S Web Application {link-pr}/4446[#4446]

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-12-6]
=== 0.12.6
:version: 0.12.6
:milestone-name: 0.12.6
:milestone: 109
:prev-version: 0.12.5
_2025-01-31_

_Changes since {prev-version}:_

* https://mill-build.org/mill/cli/installation-ide.html#_mill_native_and_jvm_executables[Mill now provides native executables] on windows-amd64, linux-{amd64,aarch64}, and
macos-{amd64,aarch64}. These can be enabled by adding the `-native` suffix to your `.mill-version`
file (e.g. `0.12.6-native`), and allows you to run Mill on clean machines without needing
a pre-installed JVM (Mill will instead download one as necessary)

** Using Mill native binaries requires the latest `./mill` or `./mill.bat` files,
available for download in the Mill repo (https://mill-build.org/mill/cli/installation-ide.html#_bootstrap_scripts[Docs])

** windows-aarch64 is not supported due to limitations in the upstream Graal native
image builder https://github.com/oracle/graal/issues/9215[]

* Mill also provides support for users to build native images via `NativeImageModule` (https://mill-build.org/mill/javalib/publishing.html#_building_native_image_binaries_with_graal_vm[Docs])

* Mill's https://mill-build.org/mill/pythonlib/intro.html[Python support] {link-pr}/4166[#4166]
  is no longer experimental and is ready for people to use. It is still
  in development, so please try it out and let us know if you hit issues!

* Support for semi-automated migration from Gradle to Mill via `mill init` (https://mill-build.org/mill/migrating/gradle.html[Docs]) {link-pr}/4363[#4363]

* Overhaul of the JVM module dependency resolution logic, delegating it mostly upstream
to Coursier rather than implementing it in Mill {link-pr}/4145[#4145]

* Allow users to define and publish their own BOM in Mill (https://mill-build.org/mill/fundamentals/library-deps.html#_dependency_management[Docs]) {link-pr}/4155[#4155]

* Reduce Java Heap for Mill Client to reduce memory footprint {link-pr}/4163[#4163]

* Catch fatal exceptions in futures to prevent hangs {link-pr}/4223[#4223]

* Use `check=true` for ktlint checkFormatAll run {link-pr}/4247[#4247]

* Don't fail `semanticDbData` if classes dir does not exist, allowing mill-scalafix's
`.fix` on modules without suorces {link-pr}/4249[#4249]

* Honor the `NO_COLOR` env variable {link-pr}/4246[#4246]

* Fix race condition that occasionally caused Mill's background daemon to exit and
restart unnecessarily {link-pr}/4254[#4254]

* Improvements to Mill's https://mill-build.org/mill/android/java.html[experimental
  Android support] {link-pr}/4188[#4188] {link-pr}/4261[#4261] {link-pr}/4277[#4277]

* Improvements to Mill's https://mill-build.org/mill/javascriptlib/intro.html[experimental
  Javascript/Typescript support] {link-pr}/4253[#4253] {link-pr}/4293[#4293]

* Detect terminal size on windows using `io.github.alexarchambault.windowsansi`
{link-pr}/4056[#4056]

* Make `runBackground` work with `-i`/`--no-server`, rather than exiting immediately
{link-pr}/4259[#4259]

* Fix using `clean` to terminate `runBackground` subprocesses on windows
{link-pr}/4265[#4265]

* Add `selective.resolveChanged` {link-pr}/4358[#4358] and `selective.resolveTree`
{link-pr}/4349[#4349] tasks to help debug selective execution issues

* Add `dockerEnv` target to customize environment passed to `docker` command {link-pr}/3257[#3257]

* Mill bootstrap scripts and example zips have been moved from Github Releases
to Maven Central for improved security and reliability {link-pr}/4372[#4372]

* ScalaPB plugin now supports `scala3_sources` {link-pr}/3258[#3258]

* Kotlin 2.1.0 is now supported {link-pr}/4406[#4406]

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-12-5]
=== 0.12.5
:version: 0.12.5
:milestone-name: 0.12.5
:milestone: 108
:prev-version: 0.12.4
_2025-01-01_

_Changes since {prev-version}:_

* Optimize Mill startup overhead by not blocking on stdin {link-pr}/4159[#4159]

* Fix system console detection on JDK >=22 {link-pr}/4178[#4178]

* Fix thread leak when spawning JVM subprocesses, which caused instability and unresponsiveness
in long-lived Mill processes {link-pr}/4185[#4185]

* Fix crash in `mill -i` on Windows ARM64 {link-pr}/4196[#4196]

* Fix log rendering in terminals where `\t` does not clear existing text {link-pr}/4173[#4173]

* Fix generation of unnecessary `rt.jar` files in home folder {link-pr}/4206[#4206]

* Addition of several experimental language toolchains, to support using Mill to build
projects in other languages

** https://mill-build.org/mill/main-branch/pythonlib/intro.html[Experimental Python Support]

** https://mill-build.org/mill/main-branch/javascriptlib/intro.html[Experimental Javascript/Typescript Support]

* Lots of doc improvements:

** Overhaul of https://mill-build.org/mill/depth/execution-model.html[The Mill Execution Model]
{link-pr}/4156[#4156]

** Fix missing text in Java Module Configuration docs {link-pr}/4172[#4172]

* New posts to the https://mill-build.org/blog/index.html[Mill Engineering Blog]:
https://mill-build.org/blog/1-java-compile.html[How Fast does Java Compile?],
https://mill-build.org/blog/2-monorepo-build-tool.html[Why Use a Monorepo Build Tool?],
https://mill-build.org/blog/3-selective-testing.html[Faster CI with Selective Testing],
and https://mill-build.org/blog/4-flaky-tests.html[How to Manage Flaky Tests],

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-12-4]
=== 0.12.4
:version: 0.12.4
:milestone-name: 0.12.4
:milestone: 107
:prev-version: 0.12.3
_2024-12-16_

_Changes since {prev-version}:_

* Mill now supports https://mill-build.org/mill/large/selective-execution.html[Selective Execution],
allowing you to run tests and other tasks only if they are downstream of a code change.
This can be used to greatly speed up pull-request validation and other CI workflows
by skipping unrelated tests that cannot possibly be broken by the code change in question

* Mill now generates https://mill-build.org/mill/fundamentals/out-dir.html#_mill_dependency_tree_json[dependency-tree.json]
and https://mill-build.org/mill/main-branch/fundamentals/out-dir.html#_mill_invalidation_tree_json[invalidation-tree.json]
metadata for every run, which should help make it easier for a user to figure out why a task
is being selected and run.

* Support for Bill-Of-Materials/Dependency-Management when downloading third-party JVM dependencies
(https://mill-build.org/mill/main-branch/javalib/dependencies.html#_dependency_management[Documentation])

* Built-in support for `mill.bat` launcher to run Mill natively on a Windows environment
https://github.com/com-lihaoyi/mill/pull/4052[#4052]

* Added documentation for https://mill-build.org/mill/migrating/migrating.html[Migrating to Mill],
to try and help people who may be trying to move their existing codebase onto Mill from other build tools

* Significant speedups for task resolution logic https://github.com/com-lihaoyi/mill/pull/4132[#4132],
which should speed up cached-build workflows in particular

* Improve precision of code signature task invalidation, reducing the amount of spurious
task invalidations in the presence of multi-file builds https://github.com/com-lihaoyi/mill/pull/4113[#4113]
https://github.com/com-lihaoyi/mill/pull/4116[#4116]

* Reduced overhead of terminal prompt UI https://github.com/com-lihaoyi/mill/pull/4095[#4095]
https://github.com/com-lihaoyi/mill/pull/4110[#4110]

* Launch of the https://mill-build.org/blog[Mill Build Engineering Blog], where we will post articles
discussing topics around JVM build tooling

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-12-3]
=== 0.12.3
:version: 0.12.3
:milestone-name: 0.12.3
:milestone: 106
:prev-version: 0.12.2
_2024-11-24_

_Changes since {prev-version}:_

* Set context classloader during Mill evaluation {link-pr}/3940[#3940]
* Extended `mill init` to support importing an existing Maven project {link-pr}/3756[#3756]
* Avoid running subsequent meta-level builds after reaching the desired meta-level in MillBuildBootstrap {link-pr}/3960[#3960]
* Improvements to `KtlintModule` {link-pr}/3961[#3961] {link-pr}/3966[#3966]
* Fixes for `runBackground` mutex and log management {link-pr}/3971[#3971]
* Added support for Revapi {link-pr}/3974[#3974]
* Fix redundant logging in junit5 test runner {link-pr}/3983[#3983]
* align SonatypeCentralPublishModule with SonatypePublisher {link-pr}/3987[#3987]
* Make JVM version configurable per-module {link-pr}/3716[#3716]
* Overhaul worker concurrency helpers with `mill.api.CacheFactory` {link-pr}/4001[#4001]
* Optimize startup time using TCP sockets instead of junixsocket and `tput` instead of jline {link-pr}/4009[#4009]
* Improvements to TUI build prompt https://github.com/com-lihaoyi/mill/pull/3933[#3933] https://github.com/com-lihaoyi/mill/pull/4014[#4014]
* Lots of improvements to documentation, including a new https://github.com/com-lihaoyi/mill/pull/3965[Kotlin Spring-Boot Example #3965],
a new page https://github.com/com-lihaoyi/mill/pull/3990[How Fast Does Java Compile? #3990], and
https://github.com/com-lihaoyi/mill/pull/3938[Stable Links To Older Doc-site Versions #3938]

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._



[#0-12-2]
=== 0.12.2
:version: 0.12.2
:milestone-name: 0.12.2
:milestone: 105
:prev-version: 0.12.1
_2024-11-11_

_Changes since {prev-version}:_

* Show correct build file name in progress prompt {link-pr}/3847[#3847]
* Fix target name when reporting cycles in `runModuleDeps` {link-pr}/3860[#3860]
* Properly escape imported submodule names when the name is a Scala identifier {link-pr}/3865[#3865]
* Report an error when module dependency cycles are detected {link-pr}/3878[#3878]
* Drop incremental compilation state for Mill modules when version changes to try and mitigate cache invalidation issues {link-pr}/3884[#3884]
* Share profile loggers between nested evaluations to avoid ensure commands like `show` now have a proper profile {link-pr}/3885[#3885]
* Add `nativeMultithreading` flag in ScalaNativeModule {link-pr}/3896[#3896]
* Add nice error when non-exclusive task depends on exclusive task {link-pr}/3887[#3887]
* Filter out anonymous classes during test discovery to mitigate spurious test reports {link-pr}/3911[#3911]
* Fix `MavenTests` deprecation message {link-pr}/3915[#3915]
* Improve `inspect` command to show more detailed metadata on modules and tasks {link-pr}/3916[#3916]
* Fix prompt updating logic to ensure the timestamp updates while tasks are running {link-pr}/3933[#3933]
* Fix scoverage report generation for Scala 3 {link-pr}/3936[#3936]
* Tons of documentation improvements: autoformatted all https://github.com/com-lihaoyi/mill/pull/3919[Java]
and https://github.com/com-lihaoyi/mill/pull/3903[Scala] example files,
[Scala-Native example builds]https://github.com/com-lihaoyi/mill/pull/3657,
https://github.com/com-lihaoyi/mill/pull/3897[Scala-JS WASM example build],
https://github.com/com-lihaoyi/mill/pull/3918[Re-run Maven comparison using proper flags]
added `Why Use Mill?` and
https://mill-build.org/mill/comparisons/unique.html[What Makes Mill Unique?] Sections

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-12-1]
=== 0.12.1
:version: 0.12.1
:milestone-name: 0.12.1
:milestone: 104
:prev-version: 0.12.0
_2024-10-27_

_Changes since {prev-version}:_

* Fix updating of prompt to match terminal width in client-server mode {link-pr}/3833[#3833]
* Allow `.mill-jvm-opts` to interpolate environment variables, add `.mill-opts` {link-pr}/3841[#3841]

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-12-0]
=== 0.12.0
:version: 0.12.0
:milestone-name: 0.12.0
:milestone: 104
:prev-version: 0.12.0
_2024-10-23_

The Mill 0.12.0 release focuses on improving the scalability of Mill builds: in terms
of performance, code organization, adherence to best practices, and community.

Major changes:

1. Mill now runs tasks parallel by default, rather than opt-in. This includes a
new parallel-friendly terminal UI, https://mill-build.org/mill/Mill_Sandboxing.html[task
   and test sandboxing] to guard against race conditions,
xref:javalib/testing.adoc#_test_grouping[parallelization of test suites],
and other measures optimizing for parallel builds

2. Mill now uses `build.mill` rather than `build.sc` as the primary file extension, to avoid
confusion with Scala-CLI or Ammonite scripts, and the `T`/`T.worker`/`T.input` syntax
has been deprecated in favor of `Task`/`Task.Worker`/`T.Input` for a more idiomatic style

3. Mill now supports for https://mill-build.org/mill/Structuring_Large_Builds.html[Modularizing Large Builds]
into multiple `package.mill` files, to help support large codebases and incremental compilation
of the build files.

4. Mill now provides official support for https://mill-build.org/mill/Writing_Mill_Plugins.html[Writing Mill Plugins],
with tested workflows and an official testkit to help you write and publish your own Mill
plugins for others to use

5. Mill now supports other JVM languages: https://mill-build.org/mill/javalib/intro.html[Java],
experimental support for https://mill-build.org/mill/kotlinlib/intro.html[Kotlin/KotlinJs],
and https://mill-build.org/mill/android/kotlin.html[even-more-experimental support for Android].
This includes IDE integrations, tooling integrations (docs, autoformatters, linters, testing
frameworks, etc.)

6. The Mill doc-site at https://mill-build.org/ has undergone a massive overhaul.
New comparisons with other build tools of (https://mill-build.org/mill/comparisons/maven.html[Maven],
https://mill-build.org/mill/comparisons/gradle.html[Gradle],
https://mill-build.org/mill/comparisons/sbt.html[sbt]), documentation for
https://mill-build.org/mill/extending/new-language.html[adding new language toolchains]
and https://mill-build.org/mill/extending/running-jvm-code.html[running dynamic JVM code],
and re-organized the pages for Scala/Java/Kotlin by-use-case to make them more navigable

For a more detailed view of Mill changes since 0.11.12, along with migration instructions,
see the sections below on:

* <<0-12-0-RC1>>
* <<0-12-0-RC2>>
* <<0-12-0-RC3>>
* <<0-12-0-since-rc3>>

0.12.x is binary compatible with 0.11.x, and so Mill plugins published for Mill 0.11.x can
continue to be used without updating them. Although binary compatible, Mill 0.12.x does
have breaking changes listed below with instructions provided on how to either disable the
breaking change with a flag or adjust your code to accommodate it. You should download the
latest version of the link:mill[Mill Bootstrap Script]
if you are upgrading from a prior version.

If you need help upgrading from 0.11.x or hit any issues, please visit the
https://discord.com/invite/xJCYRVMS[#mill Discord Channel] or
https://github.com/com-lihaoyi/mill/discussions/3349[0.12.x Github Discussion Thread]. We'd
love to hear from you on your experience with Mill in general and Mil 0.12.x in particular

* *Example Upgrade PRs*

** The following PRs are example upgrades of Mill from 0.11.x to 0.12.0-RC1 for various
projects in the `com.lihaoyi` ecosystem.

*** Trivial upgrades that just needed to bump a version: https://github.com/com-lihaoyi/geny/pull/87 ,
https://github.com/com-lihaoyi/sourcecode/pull/175, https://github.com/com-lihaoyi/fansi/pull/107,
https://github.com/com-lihaoyi/PPrint/pull/141, https://github.com/com-lihaoyi/mainargs/pull/159/files,
https://github.com/com-lihaoyi/fastparse/pull/319, https://github.com/com-lihaoyi/scalatags/pull/284
https://github.com/com-lihaoyi/castor/pull/64, https://github.com/com-lihaoyi/utest/pull/351

*** Less trivial upgrades, needing to make use of `MILL_TEST_RESOURCE_DIR` or other explicit path references to
be compatible with test sandboxing: https://github.com/com-lihaoyi/requests-scala/pull/174,
https://github.com/com-lihaoyi/upickle/pull/627, https://github.com/com-lihaoyi/os-lib/pull/300,
https://github.com/com-lihaoyi/scalasql/pull/30, https://github.com/com-lihaoyi/Ammonite/pull/1575

*** More involved upgrades: https://github.com/com-lihaoyi/cask/pull/143

[#0-12-0-since-rc3]
==== 0.12.0 Changes since RC3

* Mill now takes a lock on the `out/` folder whenver evaluating it to avoid race conditions on disk.
{link-pr}/3599[#3599]. Pass in `--no-build-lock` to disable it at your own risk

* Update Zinc to 0.10.3 to fix issues with over-compilation {link-pr}/3748[#3748]

* `runMvnDeps` is now transitive, as is the newly-introduced `runModuleDeps`,
to try and match the semantics of runtime deps in Maven{link-pr}/3774[#3774]

[#0-12-0-RC3]
==== 0.12.0-RC3
_2024-10-04_


Changes since 0.12.0-RC2

* `-j`/`--jobs` now allows computed values of the form `-j 0.5C` (half as many jobs as cores) or
`-j C-2` (two less jobs than cores) to allow for automatic scaling based on the number of cores available
{link-pr}/3554[#3554]


* Fix `testOnly` handling of ScalaTest tagged tests {link-pr}/3557[#3557]

* Make `./mill` without any arguments point you towards --help, flesh out --help into a cheat sheet {link-pr}/3556[#3556]

* Use `Task` instead of `T` when constructing targets and other tasks {link-pr}/3565[#3565]. The new syntax
(given below) is intended to be more idiomatic Scala and less idiosyncratic. The old syntax will continue
to work for backwards compatibility, but using the new syntax is recommended
** `T {...}` ->  `Task {...}`
** `T.command {...}` ->  `Task.Command {...}`
** `T.input {...}` ->  `Task.Input {...}`
** `T.source {...}` ->  `Task.Source {...}`
** `T.sources {...}` ->  `Task.Sources {...}`
** `T.persistent {...}` ->  `Task(persistent = true) {...}`
** `T.task {...}` ->  `Task.Anon {...}`

* Introduced `Task.Command(exclusive = true)` to allow explicit annotation of which
commands need to run without parallelism, allowing `.test` and other commands
to run parallel by default {link-pr}/3617[#3617]

* Lots of added docs for Building Kotlin with Mill:
** Kotlin Build Examples and Linting {link-pr}/3555[#3555], with KtLint and Detekt support
** Kotlin Module Configuration {link-pr}/3585[#3585]
** Publishing and Testing Kotlin with Mill {link-pr}/3589[#3589]
** Using Mill to build a Ktor web server  {link-pr}/3621[#3621]

* Additional support for Kotlin tools and frameworks
** KtFmt support  {link-pr}/3620[#3620]
** Kover support  {link-pr}/3624[#3624]

* Show Worker tasks in `resolve`/`show`/`inspect` {link-pr}/3580[#3580]

* `mill clean` now terminates Worker tasks {link-pr}/3579[#3579]

* Overhaul of the terminal "ticker" UI for displaying task progress to better support
parallel builds {link-pr}/3577[#3577]
** Mill now shows all active tasks and their duration at the bottom of your terminal
** Stream task logs are now prefixed with the task index on the left and the task
name above, so you can attribute each line of logs to the task that generated it
+
----
...
[3861/4712] main.client.publishLocalCached
[3861] Publishing Artifact(com.lihaoyi,mill-libs-client,0.12.0-RC2-67-a566d8-DIRTY875bcbb1) to ivy repo /Users/lihaoyi/.ivy2/local
[3868/4712] runner.client.publishLocalCached
[3868] Publishing Artifact(com.lihaoyi,mill-runner-client,0.12.0-RC2-67-a566d8-DIRTY875bcbb1) to ivy repo /Users/lihaoyi/.ivy2/local
  [3869/4712] ======================================= installLocalCache ============================================== 4s
[3676] scalajslib.worker-api.docJar 1s
[3688] scalanativelib.worker-api.docJar 1s
[3706] contrib.playlib.worker[2.9].docJar 1s
[3707] contrib.playlib.worker[2.6].docJar 1s
... and 3 more threads
----

* Add API for tasks to spawn concurrent and parallel futures via `Task.fork.{async,await}` {link-pr}/3478[#3478]

* Allow large test modules with many classes to be broken up to use multiple concurrent JVMs
by overriding `def testForkGrouping` {link-pr}/3478[#3478]

* Use coursier thread pool to run coursier-related tasks to avoid deadlocks {link-pr}/3614[#3614]

* `inspect` now shows useful information when used on modules, not just tasks {link-pr}/3532[#3532]
+
[,console]
----
$ ./mill inspect dist0
dist0(build.mill:745)
    Version of [[dist]] meant for local integration testing within the Mill
    repo. Looks mostly the same as [[dist]], except it does not have a reference
    to itself in its [[testTransitiveDeps]], to avoid a circular dependency.

Inherited Modules: MillPublishJavaModule

Module Dependencies: runner, idea

Default Task: dist0.run

Tasks: dist0.fix, dist0.testTransitiveDeps
----

* `mill init` now supports creating a project based on examples from Mill's documentation {link-pr}/3583[#3583],
and unpacks the example into the current folder rather than a subfolder {link-pr}/3626[#3626]

* `MILL_TEST_RESOURCE_FOLDER` has been renamed to `MILL_TEST_RESOURCE_DIR` for consistency with other
environment variable names {link-pr}/3637[#3637]

[#0-12-0-RC2]
==== 0.12.0-RC2
_2024-09-16_


Changes since 0.12.0-RC1

* Support `exclude` attribute in `Dep` parser. You can give exclusions with `;exclude=org:name`
or `;exclude=org:*` or `;exclude=*:name` {link-pr}/3492[#3492]

* Fix `ScalaModule#console` by properly inheriting streams {link-pr}/3500[#3500]

* Adjust codegen to allow custom ``mainargs.TokensReader``s, and include a
`mainargs.TokensReader[os.Path]` by default for convenience {link-pr}/3504[#3504]

* Update to https://github.com/com-lihaoyi/os-lib?tab=readme-ov-file#0-10-7[OS-Lib 0.10.7] to
allow concise multi-segment sub-paths; you can now write `os.pwd / "foo/bar/qux"` rather than
`os.pwd / "foo/bar/qux"`

* Add `JavaModule.mandatoryJavacOptions`. Those are not propagated to the inner test
traits intentionally, since those options are typically configured by other means,
e.g. dedicated targets. {link-pr}/3503[#3503]

* Add plugins to run Checkstyle and generate reports {link-pr}/3516[#3516]

* Simplified ``PublishModule``'s publishing setup via  {link-pr}/3523[#3523]. You can now
run `mill mill.scalalib.PublishModule/` with the proper environment variables (below) and
it should do the right thing by default

** Prefix all environment variables with `MILL_`:
`MILL_SONATYPE_USERNAME`, `MILL_SONATYPE_PASSWORD`,
`MILL_PGP_SECRET_BASE64`, `MILL_PGP_PASSPHRASE` to try and add some
rudimentary ownership and namespacing

* Allow external modules to have a `defaultCommandName` {link-pr}/3545[#3545]. This has
been applied to `ScalafmtModule` and `PublishModule`, so you can
now autoformat your code via `mill mill.scalalib.ScalafmtModule/` and publish it via
`mill mill.scalalib.PublishModule/` without needing the `/reformatAll __.sources`
or `/publishAll __.publishArtifacts` suffix

* Integrated Kotlin integration as a first partly module and add example documentation
{link-pr}/3514[#3514]. This is still pretty spartan, but we expect to flesh it out over time

* Move `.mill.sc` alternate file extension to `.mill.scala` {link-pr}/3521[#3521]

[#0-12-0-RC1]
==== 0.12.0-RC1
_2024-09-09_


* *Breaking Changes*

** Build file overhaul: Mill's build file management has been overhauled to better support
large projects. See https://mill-build.org/mill/Structuring_Large_Builds.html[Structuring Large Builds]
for details

*** Mill now uses `.mill` as its file extension, with some semantic changes
from the old `.sc` files to allow better IDE support. The `.sc` extension is still supported
and its semantics are largely unchanged the ease the migration, but you should convert your Mill
configs to `.mill` files to benefit from Mill's improved IDE experience going forward.

*** The `build.sc` file has been renamed `build.mill` to prevent confusion with Ammonite/Scala-CLI scripts,
and all associated `.sc` files have been renamed to `.mill`.

**** Until IntelliJ-Scala adds support for `.mill` files built in, you can add it yourself via
`Settings / Editor / File Types / Scala` and add the pattern `*.mill`

*** All `.mill` files must have a `package` declaration,
with `package build` for `.mill` files in the root folder and `package build.foo.bar` for `.mill` files in `foo/bar/`.

**** The package declaration remains optional for legacy `.sc` files

*** Only `foo.mill` files in folders directly containing a `build.mill` or `package.mill` can
be imported via `import $file`.

**** You need to create empty `package.mill` files in any folder containing scripts if they are not already
adjacent to your `build.mill` in the root folder

**** `foo.sc` files can continue to be imported from arbitrary paths, to ease in the migration

*** Builds can now be modularized into per-folder definitions by defining `package.mill` files in subfolders
{link-pr}/3213[#3213]. You can no longer define targets and modules in arbitrary `foo.sc` files

**** All target and module definitions must be moved into `package.mill` files in each folder.

*** `$file` references in `.mill` files are now absolute from the project root, and thus `.^` to
refer to parent package is no longer supported, for consistency with other programming environments

**** `$file` references in old `.sc` files are unchanged and continue being relative, preserving the
current behavior.

** ``RootModule``s can only be named `package`, e.g. `object foo extends RootModule` must now be
named ``object `package` extends RootModule``.

*** If you have an existing `RootModule`, you need to rename it ``object `package` extends RootModule``

** Turn on parallelism for task evaluation by default, except for commands
which always run serially at the end {link-pr}/3265[#3265]

*** This can be disabled by passing `--jobs 1`

** Mill uses empty sandbox folders as the working directory for running its own code and
{link-pr}/3367[#3367] and test suites {link-pr}/3347[#3347], to avoid accidental interference
between tasks and tests due to parallelism. See https://mill-build.org/mill/Mill_Sandboxing.html[Mill Sandboxing]
for details

*** This can be disabled by adding `def testSandboxWorkingDir = false` in your test module

** Mill commands now require arguments to be passed named via `./mill mycommand --key value`, rather than
allowing just `./mill mycommand value`. {link-pr}/3431[#3431].

*** You can pass in
`--allow-positional-command-args` to fall back to the old behavior, or use `@mainargs.arg(positional = true)`
on individual parameters

** Dropped support for Java 8, Scala 2.11.x/3.1.x, and Scala-Native 0.4.x, following suit with the rest of the
com-lihaoyi ecosystem. We now expect a minimum of Java 11, Scala 2.12.x/3.2.x, and Scala-Native 0.5.x

** `--disable-callgraph-invalidation` is no longer supported. The flag is still accepted but is
now a no-op.

* *Other Changes*

** Overhaul the Mill client-server protocol to improve robustness
{link-pr}/3363[#3363] {link-pr}/3366[#3366] {link-pr}/3368[#3368] {link-pr}/3370[#3370]

** Mill now has explicitly supported workflows for third-party plugin authors, and
publishes unit, integration, and example test fixtures for writing plugins as `mill-testkit`
{link-pr}/3398[#3398] for downstream plugin authors to use in testing their own Mill extensions.

*** See https://mill-build.org/mill/Writing_Mill_Plugins.html[Writing Mill Plugins] for more details.

*** `mill-testkit` is experimental and does not provide the same stability or binary-compatibility
guarantees as the rest of Mill. Nevertheless, if you are writing Mill plugins, please try it out
and let us know what you think!

** Bump default Sonatype Maven Central publishing timeouts to 10 minutes to avoid
timeouts due to slowness https://github.com/com-lihaoyi/mill/commit/b4c9386b0233fab53a312426715e226e4a7f6302

** Importing Mill projects into IntelliJ via BSP now properly marks the `out/`, `.idea/`, and `.bsp/` folders
as excluded {link-pr}/3329[#3329]

** Optimizations to Mill evaluation logic to reduce fixed overhead of running Mill
on large projects {link-pr}/3388[#3388]

** Improvements to `visualize` and `visualizePlan` such that they no longer need to be
prefixed with `show` and no longer need a separate `graphviz`/`dot` install on Mac-OSX
{link-pr}/3438[#3438]

[#0-11-13]
=== 0.11.13
:version: 0.11.13
:milestone-name: 0.11.13
:milestone: 100
:prev-version: 0.11.12
_2024-01-14_

_Changes since {prev-version}:_


* Security Fix: Update protobuf-java to 3.25.5 {link-pr}/3639[#3639]
* Backport: Fixed property handling when using `--define`/`-D` from the Mill CLI. {link-pr}/3795[#3795]
* Backport: GenIdea: Handle failure when evaluating module sources/resources {link-pr}/3755[#3755]
* Update asm from 9.7 to 9.7.1 for Java 24 support {link-pr}/3745[#3745]


_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-11-12]
=== 0.11.12
:version: 0.11.12
:milestone-name: 0.11.12
:milestone: 99
:prev-version: 0.11.11
_2024-08-20_

_Changes since {prev-version}:_

* Bump uTest to 0.8.4 {link-pr}/3340[#3340]
* Manage TestModule dependencies via `build.sc` {link-pr}/3320[#3320]
* Fix the warning not being printed when -i/--interactive/--no-server/--bsp are not the first argument {link-pr}/3346[#3346]
* GenIdea: Make Scala SDK specific for JS / Native {link-pr}/3348[#3348]
* CI: Adapt CI for 0.11.x branch {link-pr}/3350[#3350]
* GenIdea: unroll module dependencies {link-pr}/3358[#3358]
* Print pretty error message when Result.Failure is thrown {link-pr}/3393[#3393]
* Avoid spurious deprecation warnings in generated code {link-pr}/3400[#3400]

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._

[#0-11-11]
=== 0.11.11
_2024-08-05_

:version: 0.11.11
:milestone-name: 0.11.11
:milestone: 98
:prev-version: 0.11.10

*_We initially tagged `0.11.11` on 2024-11-31 but never published the released due to technical issues. On 2024-08-05 we re-tagged and published `0.11.11`._*

_Changes since {prev-version}:_

* Workaround issue in Sonatype which started failing on double slashes in URLs
(even though they previously worked) https://github.com/com-lihaoyi/mill/commit/a293b46e80e37572bae46ef6225f41f547a5b238[Link]
* Overhaul of the documentation site at https://mill-build.org
* New Java- and Scala-specific sections on the documentation, with more detailed
comparisons to existing build tools
* Added graphviz diagrams throughout to help the user in visualizing the concepts involved
* Update versions of JUnit sbt-test-interface libraries that Mill uses
{link-pr}/3296[#3296]
* Make it simpler to resolve dependencies in custom tasks via `defaultResolver().resolveDeps`
{link-pr}/3330[#3330]


_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._

[#0-11-10]
=== 0.11.10
:version: 0.11.10
:milestone-name: 0.11.10
:milestone: 95
:prev-version: 0.11.9
_2024-07-23_

_Changes since {prev-version}:_

__Fixes and Improvements__

* Improvements in Java docs and user experience {link-pr}/3278[#3278]
* Automatically pump os.proc streams when SystemStreams are redirected {link-pr}/3275[#3275]
* Fix resolution of children of override lazy val modules {link-pr}/3270[#3270]

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-11-9]
=== 0.11.9
:version: 0.11.9
:milestone-name: 0.11.9
:milestone: 94
:prev-version: 0.11.8
_2024-07-18_

_Changes since {prev-version}:_

__New features__

* First class support for Java projects {link-pr}/3261[#3261]

__Fixes and Improvements__

* Add coarse grained lock around BSP request to avoid deadlocks {link-pr}/3243[#3243]

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._

[#0-11-8]
=== 0.11.8
:version: 0.11.8
:milestone-name: 0.11.8
:milestone: 93
:prev-version: 0.11.7
_2024-06-21_

_Changes since {prev-version}:_

__New features__

* Support Scala Native 0.5.0  {link-pr}/3054[#3054]  {link-pr}/3107[#3107] {link-pr}/3120[#3120]
* Add `jvmOptions` to docker contrib configuration  {link-pr}/3079[#3079]
* Pass auxiliary class files to zinc, so they are deleted together  {link-pr}/3072[#3072]
* BSP: Handle new `JvmCompileClasspath` request  {link-pr}/3086[#3086]
* Add support for Cobertura XML report task to help integration  {link-pr}/3093[#3093]
* Support Scala.js minify via `scalaJSMinify: T[String]`  {link-pr}/3094[#3094]
* Restructure `TestModule`, add `RunModule`   {link-pr}/3064[#3064]
* Move `run`-targets into `RunModule`  {link-pr}/3090[#3090]
* `TestModule`: Support generation of JUnit-compatible xml report  {link-pr}/3099[#3099] {link-pr}/3172[#3172] {link-pr}/3135[#3135] {link-pr}/3184[#3184]
* Use docker image hash to determine if build should rerun  {link-pr}/3124[#3124]
* Add multi platform support to contrib.docker through docker buildx  {link-pr}/3143[#3143]
* Add ability to re-write ESModule imports at link time   {link-pr}/3109[#3109]
* Adding sonatype central support  {link-pr}/3130[#3130] {link-pr}/3187[#3187]
* Add `TestModule.discoveredTestClasses` target to ease test inspection  {link-pr}/3191[#3191]
* Support "pom" packaging type in `PublishModule`  {link-pr}/3222[#3222]


__Fixes and Improvements__

* Restructure `VersionFinder`, increase speed, added ticker messages {link-pr}/3014[#3014]
* Fix bsp compile classpath inconsistencies  {link-pr}/3017[#3017]
* Bring more bsp-specific targets in line with their non-bsp versions  {link-pr}/3018[#3018]
* Make BSP task processing more resilient  {link-pr}/3022[#3022]
* Update example `build.sc` with current library versions  {link-pr}/3055[#3055]
* Scoverage: Do not include the scalac plugin in the reporting classpath  {link-pr}/3060[#3060]
* Add Scala 2.13.13 and 2.12.19 to supported bridges list  {link-pr}/3066[#3066]
* Fix BuildInfo static Java file generator  {link-pr}/3074[#3074]
* Scoverage inner module defaults to `skipIdea = outer.skipIdea`  {link-pr}/3098[#3098]
* Deduplicate input tasks in `inspect` command  {link-pr}/3102[#3102]
* CI: add scalafix-check to precondition to publish  {link-pr}/3095[#3095]
* Docs for Continuous cache invalidation  {link-pr}/3096[#3096]
* Isolate scoverage modules from their parent modules  {link-pr}/3118[#3118]
* Scoverage improve classpath override to the minimal  {link-pr}/3122[#3122]
* Improve internal BSP API and docs, fix a match error condition  {link-pr}/3111[#3111]
* Retry example integration tests that didn't finish after 5 minutes  {link-pr}/3125[#3125]
* Fix mill script for parameter starting with -i  {link-pr}/3127[#3127]
* Fixed semanticdb file copying issue, added more tests  {link-pr}/3080[#3080]
* Detect assemblies with too many entries to fail shell script prepending  {link-pr}/3140[#3140]
* Exclude mill provided dependencies in meta builds  {link-pr}/3189[#3189] {link-pr}/3221[#3221]
* Fix Scala.js toolchain logs in server-client mode  {link-pr}/3196[#3196]
* Fix compiler bridge build setup and build essential versions in CI  {link-pr}/3179[#3179]
* Add Scala 2.13.14 to bridgeScalaVersions  {link-pr}/3166[#3166]
* GenIdea improvements  {link-pr}/3153[#3153]
* GenIdea: Use synthetic scala-SDK entry for compiler setup  {link-pr}/3154[#3154]
* Fix classpath regression in Bloop export #1918  {link-pr}/3211[#3211]
* Support `build.sc` in Bloop  {link-pr}/3208[#3208]
* Fail if `testOnly` does not match any test case  {link-pr}/3224[#3224]


__Updates and internal changes__

* Code cleanups
* Documentation updates and fixes
* Test and CI improvements
* Updates: acyclic 0.3.12, Ammonite 3.0.0-M2-11-713b6963, asm 9.7,
commons-compress 1.26.2, commons-io 2.16.1, coursier 2.1.10,
fastparse 3.1.0, fansi 0.5.0,
guava 33.2.1,
jarjar-abrams-core 1.14.0, jline 3.26.2, junixsocket 2.9.1,
log4j-core 2.23.1,
mainargs 0.7.0 mill-mima 0.1.1, mill-scalafix 0.4.0,
os-lib 0.10.2,
Play 2.8.22 / 2.9.4 / 3.0.4, pprint 0.9.0, protobuf-java 3.25.3,
Scala 2.12.19 / 2.13.14,
Scala Native 0.4.17 / 0.5.3,
scala-xml 2.3.0,
scalacheck 1.18.0, scalatest 3.2.18, scoverage 2.1.1,
semanticdb-java 0.9.10, semanticdb-scalac 4.9.7
requests 0.8.3,
upickle 3.3.1, utest 0.8.3,
zinc 1.10.0

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._



[#0-11-7]
=== 0.11.7
:version: 0.11.7
:milestone-name: 0.11.7
:milestone: 91
:prev-version: 0.11.6
_2024-02-05_

_Changes since {prev-version}:_

__New features__

* Support type selectors as path selection syntax in resolve  {link-pr}/2997[#2997], {link-pr}/2998[#2998]
* Read coursier default config files to set up repositories and support mirror configuration {link-pr}/2886[#2886], {link-pr}/2917[#2917]
* Added support for `type` attribute when parsing dependencies {link-pr}/2994[#2994]
* Add new `ScalaModule.scalacHelp` command {link-pr}/2921[#2921]
* Add a `ScalaModule.consoleScalacOptions` target {link-pr}/2948[#2948]
* Enable colored output for Scala 2 compiler output {link-pr}/2950[#2950]
* Add `publishLocalCached` and `publishM2LocalCached` targets to `PublishModule` {link-pr}/2976[#2976]
* Support Scala Native build target. This allows to build static and dynamic libraries other than binaries {link-pr}/2898[#2898]
* Prepare the Scala.js integration for SIP-51 {link-pr}/2988[#2988]

__Fixes and Improvements__

* Better detect Windows Subsystem for Linux environments {link-pr}/2901[#2901]
* Avoid evaluating ``Task.Input``s twice {link-pr}/2952[#2952]
* Deduplicate (anonymous) tasks in results {link-pr}/2959[#2959]
* Synchronize `evaluateGroupCached` to avoid concurrent access to cache  {link-pr}/2980[#2980]
* Properly sanitize Windows reserved names and symbols in evaluator paths {link-pr}/2964[#2964], {link-pr}/2965[#2965]
* Detect colliding cross module values {link-pr}/2984[#2984]
* Mask forward slashes in cross values to fix their cache locations {link-pr}/2986[#2986]
* Re-enable test result summary (print `done` message from test framework to stdout) {link-pr}/2993[#2993]
* Fix overeager caching of `cliImports` value in `generatedScriptSources`  {link-pr}/2977[#2977]
* Allow resolving moduleDeps with older Scala 3 versions {link-pr}/2877[#2877]
* GenIdea: Put module dependencies after library dependencies {link-pr}/2925[#2925]
* BSP: do not filter clean-requests for meta-builds  {link-pr}/2931[#2931]
* BSP: Add `JavaModule.bspBuildTargetData` to make `JavaModule` reports workable `BuildTarget` {link-pr}/2930[#2930]
* BSP: Send `logMessage` instead of diagnostics when `textDocument` is unknown {link-pr}/2979[#2979]
* Scoverage inner module defaults new to `skipIdea = true` {link-pr}/2989[#2989]

__Updates and internal changes__

* Dependency updates: asm-tree 9.6, bsp4j 2.2.0-M1, coursier 2.1.8, jline 3.25.0, jna 5.14.0, junixsocket-core 2.8.3, log4j-core 2.22.1, mainargs 0.6.1, os-lib 0.9.3, scalafmt 3.7.15, Scala.js 1.15.0, scala-native 8.4.16, semanticdb-java 0.9.8, semanticdb-scala 4.8.15, upickle 3.1.4, zinc 1.9.6

* Contrib dependency updates: Play 2.8.21, Play 2.9.1, Play 3.0.1

* Documentation updates and new sections
* More code cleanups, explicit result types and enforcement of some code quality metrics via mill-scalafix


_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._



[#0-11-6]
=== 0.11.6
:version: 0.11.6
:milestone-name: 0.11.6
:milestone: 90
:prev-version: 0.11.5
_2023-11-21_

_Changes since {prev-version}:_

* Make `PathRef` robust against concurrent filesyste modifications {link-pr}/2832[#2832]

* Use logger error stream for informational messages {link-pr}/2839[#2839]

* Harden assembly logic against Zip-Slip vulnerabilities {link-pr}/2847[#2847]

* Add an option to disable incremental compilation with zinc {link-pr}/2851[#2851]

* Add check for right Tests traits in ScalaJS and Native  {link-pr}/2874[#2874]

* Attempt to recover from client/server connection errors to {link-pr}/2879[#2879]

* Fix discovery of targets whose names get mangled {link-pr}/2883[#2883]

* Make `mill show` skip `-j` prefixes to ensure machine readability {link-pr}/2884[#2884]

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-11-5]
=== 0.11.5
:version: 0.11.5
:milestone-name: 0.11.5
:milestone: 89
:prev-version: 0.11.4
_2023-10-04_

_Changes since {prev-version}:_

* Support for Java 21 {link-pr}/2768[#2768]

* Various BSP improvements {link-pr}/2814[#2814], {link-pr}/2813[#2813], {link-pr}/2810[#2810], {link-pr}/2771[#2771]

* The `T.workspace` context path now always points to the top-level project directory, also for meta builds {link-pr}/2809[#2809]

* Mill now better detects and reports logical cycles in inter-module dependencies {link-pr}/2790[#2790]

* Fixed semanticDB data generation for meta builds {link-pr}/2809[#2809]

* The `prepareOffline` command also fetches relevant compiler-bridges for Scala modules {link-pr}/2791[#2791]

* Improved `ScalaJSModule` and added support for `IRFileCache` {link-pr}/2783[#2783]

* The `JavaModule.zincReportCachedProblems` configuration can now also customized via a Java system property {link-pr}/2775[#2775]

* Fixed a file truncation issue in protobuf module and print a warning when proto file get overwritten {link-pr}/2800[#2800]

* Documentation improvements

* Dependency updates: bsp4j 2.1.0-M7, castor 0.3.0, coursier-interface 1.0.19, jarjarabrams 1.9.0, jline 3.23.0, junitsocket 2.8.1, mainargs 0.5.4, scalafmt 3.7.14, Scala.js 1.14.0, semanticdb-java 0.9.6, semanticdb-scala 4.8.10

* Various other improvements and cleanups

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-11-4]
=== 0.11.4
:version: 0.11.4
:milestone-name: 0.11.4
:milestone: 88
:prev-version: 0.11.3
_2023-09-19_

_Changes since {prev-version}:_

* Fix binary incompatibility issue with `Discover` macro's generated generic code {link-pr}/2749[#2749]
* Support the `release-size` mode in `ScalaNativeModule` {link-pr}/2754[#2754]

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._

[#0-11-3]
=== 0.11.3
:version: 0.11.3
:milestone-name: 0.11.3
:milestone: 87
:prev-version: 0.11.2
_2023-09-17_

_Changes since {prev-version}:_

* Allow Mill CLI to select the meta-build frame it operates on via `--meta-level <n>` {link-pr}/2719[#2719]

* Improve the `mill resolve` suggestion when a user specifies a target in the wrong module {link-pr}/2731[#2731]

* Fix conflicting dependencies between upstream JavaModules {link-pr}/2735[#2735]

* Fix the scala-library dependency for (generic) platform modules {link-pr}/2739[#2739]

* Fix terminal forwarding in `.console` and `.repl` commands {link-pr}/2743[#2743]

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-11-2]
=== 0.11.2
:version: 0.11.2
:milestone-name: 0.11.2
:milestone: 86
:prev-version: 0.11.1
_2023-08-28_

_Changes since {prev-version}:_

* Target invalidation after making changes to `build.sc` is now done at a fine-grained method-level granularity, using callgraph reachability analysis to see which targets depend on the code that was changed.
See {link-pr}/2417[#2417] for more details

* Fix redirection of stdout stream to stderr when using `show`
{link-pr}/2689[#2689]

* Fix line numbers in errors for scripts starting with leading comments or whitespace {link-pr}/2686[#2686]

* Fix `init` command and support runnig Mill without existing `build.sc` file
{link-pr}/2662[#2662]

* Fixes for BSP editor integration sometimes using the wrong output folder for meta-build metadata, causing subsequent builds from the command line to fail {link-pr}/2692[#2692]

* Added a new `mill.idea.GenIdea/idea` command to generate IntelliJ IDE metadata, improving-upon and replacing the older `mill.scalalib.GenIdea/idea`
command which is now deprecated {link-pr}/2638[#2638]

* Update Coursier to 2.1.6 to mitigate CVE CVE-2022-46751
{link-pr}/2705[#2705]

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._

[#0-11-1]
=== 0.11.1
:version: 0.11.1
:milestone-name: 0.11.1
:milestone: 85
:prev-version: 0.11.0
_2023-06-23_

_Changes since {prev-version}:_

* `mill.define.Cross`: Introduced default cross segments and some CLI convenience
* `mill.testrunner`: Fixed exception when running ScalaTest or ZIOTest frameworks
* `mill.runner`: Removed some obsolete / defunct cli options
* `mill.runner`: Properly distinct-ify commands when resolving wide matching target patterns
* `mill.scalajslib`: Restored correct defaults for `esFeature`
* `mill.bsp`: Fixed a `MatchError` in the `buildtarget/scalaTestClasses` request
* `mill.contrib.bloop`: Corrected accidentally changed package name resulting in non-functional plugin
* `mill.contrib.scoverage`: Fixed defunct plugin due to a missing type annotation
* Various internal improvements
* Dependency updates: Ammonite 3.3.0-M0-32-96e851cb, bsp4j 2.1.0-M5, zinc 1.9.1
* Mill is now build with Mill 0.11

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._

[#0-11-0]
=== 0.11.0
:version: 0.11.0
:milestone-name: 0.11.0
:milestone: 84
:prev-version: 0.11.0-M11
_2023-06-06_

*This release is binary incompatible to {prev-version}.*

_Changes since {prev-version}:_

* 0.11.0 is the next breaking version after the 0.10.x series, with a large number of improvements.
See the changelog below for 0.11.0-M1 to 0.11.0-M11 for a full list of user-facing changes.

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._

// end::changelog[]

=== Older releases
:leveloffset: +1

// tag::changelogOld[]

[#0-11-0-M11]
=== 0.11.0-M11
:version: 0.11.0-M11
:milestone-name: 0.11.0-M11
:milestone: 83
:prev-version: 0.11.0-M10
_2023-06-04_

*This release is binary incompatible to {prev-version}.*

_Changes since {prev-version}:_

* Make `foo.test` command run tests with user code in the boot classloader, rather than in a sub-classloader
{link-pr}/2561[#2561]

* Mill backend server timeout is now configurable
{link-pr}/2550[#2550]

* Mill assembly is now distributed via Maven Central, rather than Github release assets, to remove an unnecessary single point of failure
{link-pr}/2560[#2560]

* `Tests` inner trait was removed, to avoid trait shadowing which will be removed in Scala 3. Please use `ScalaTests`, `ScalaJSTests`, or
`ScalaNativeTests` instead
{link-pr}/2558[#2558]

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._

[#0-11-0-M10]
=== 0.11.0-M10
:version: 0.11.0-M10
:milestone-name: 0.11.0-M10
:milestone: 82
:prev-version: 0.11.0-M9
_2023-05-24_

*This release is binary incompatible to {prev-version}.*

_Changes since {prev-version}:_

* Make `mill.define.Module` a `trait` to allow abstract/virtual modules to be ``trait``s rather than ``class``es
{link-pr}/2536[#2536]

* Move `mill.BuildInfo` to `mill.util.BuildInfo` to avoid name conflicts with
`mill.contrib.buildinfo.BuildInfo`
{link-pr}/2537[#2537]

* `PlatformScalaModule` now exposes `platformScalaSuffix` for user code to use
{link-pr}/2534[#2534]

* Add `Agg.when` operator to simplify common workflow of adding optional flags or command line parameters {link-pr}/2535[#2353]

* Generalize handling of test module source folder layout, such that they always match the folder layout of the enclosing module
{link-pr}/2531[#2531]

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._

[#0-11-0-M9]
=== 0.11.0-M9
:version: 0.11.0-M9
:milestone-name: 0.11.0-M9
:milestone: 80
:prev-version: 0.11.0-M8
_2023-05-18_

*This release is binary incompatible to {prev-version}.*

_Changes since {prev-version}:_

* Overhauled target resolution logic.
It is now significantly lazier, resulting in less of the module tree being un-necessarily instantiated, and also more precise and predictable {link-pr}/2453[#2453]
{link-pr}/2511[#2511]

* Allow tasks to be passed as the CLI parameters of the `run` command, allowing
`run` to be easily used in the implementation of other tasks
{link-pr}/2452[#2452]

* ``Task.Input``s are now watched properly with `--watch`, and trigger re-evaluations when the watched value changes {link-pr}/2489[#2489]

* Support for Java 20 {link-pr}/2501[#2501]

* Broke up `mill.modules` package {link-pr}/2513[#2513], with functionality re-distributed to `mill.util` and `mill.scalalib`

* Overhaul BSP-related code, for improved fidelity and correctness
{link-pr}/2415[#2415]
{link-pr}/2414[#2414]
{link-pr}/2518[#2518]
{link-pr}/2521[#2521]

* Enabled compilation warnings in `build.sc`
{link-pr}/2519[#2519]

* Print out the CLI flags when inspecting ``Task.Command``s
{link-pr}/2522[#2522]

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._

[#0-11-0-M8]
=== 0.11.0-M8
:version: 0.11.0-M8
:milestone-name: 0.11.0-M8
:milestone: 79
:prev-version: 0.11.0-M7
_2023-04-24_

*This release is binary incompatible to {prev-version}.*

_Changes since {prev-version}:_

* Added an https://github.com/com-lihaoyi/mill/tree/main/example[example/]
folder in the Mill repo, containing common build setups demonstrating Mill features with explanations of how each feature works

* Pre-compiled Scala incremental compiler interface
{link-pr}/2424[#2424], to speed up clean builds

* Add some helpers to simplify cross-version/cross-platform modules {#2406}[{link-pr}/2406]

* You can now override `T{...}` ``Target``s with `Task.Source` or `Task.Sources`, and vice versa {link-pr}/2402[#2402]

* Removed the Ammonite script runner dependency used to evaluate `build.sc`
files and instead compile them using Mill {link-pr}/2377[#2377]

* Add `TestModule.ZioTest` {link-pr}/2432[#2432]

* Caching fixes for external modules https://github.com/com-lihaoyi/mill/issues/2419[#2419]

* Overhaul of the Mill `BuildInfo` plugin, moving the key-value into resources to avoid needing to re-compile your module when the values change, adding
`JavaModule` support, and allowing Javadoc/Scaladoc comments to be associated with the generated `BuildInfo` constants {link-pr}/2425[#2425]

* Global Configuration via `~/.mill/ammonite/predefScript.sc` is no longer supported in this version.
If that breaks your workflow, please report and tell us your use case so we can provide sufficient replacement or support for your use case before Mill 0.11.

* Overhaul of the documentation.
Created many executable example projects which are included in the documentation and run/tested on CI

* Change cross module definitions to be traits instead of classes, for greater regularity and less builerplate at call sites. _This change requires slight modification to existing build scripts that define cross modules._

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._

[#0-11-0-M7]
=== 0.11.0-M7
:version: 0.11.0-M7
:milestone-name: 0.11.0-M7
:milestone: 78
:prev-version: 0.11.0-M6
_2023-03-30_


*This release is binary incompatible to {prev-version}.*

_Changes since {prev-version}:_

* Introduced automatic `PathRef` validation for cached targets; default-enabled it for `CoursierModule.resolveDeps` and various `resolvedMvnDeps` targets
* `internal`: Update Protocol version to 2.1.0-M4
* `internal`: Support new `mainClasses` field in run and test environments
* `internal`: Fixed handling of Mill plugins and other improvements
* `scalanativelib`: new `nativeDump` setting in `ScalaNativeModule`
* `contrib.twirllib`: Use newer scala-parser-combinators version when used with Scala 3
* `contrib.scalapblib`: Added new flag to search for proto files in dependencies
* Various refactorings to improve binary compatibility
* Updated dependencies: Ammonite 3.0.0-M0-5 coursier 2.1.0, scala native tools 0.4.12, semanticdb 4.7.6, trees 4.7.6, upickle 3.0.0
* DX improvements

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._

[#0-11-0-M6]
=== 0.11.0-M6
:version: 0.11.0-M6
:milestone-name: 0.11.0-M6
:milestone: 77
:prev-version: 0.11.0-M5
_2023-03-09_

*This release is binary incompatible to {prev-version}.*

_Changes since {prev-version}:_

* `main`: Re-added missing `--color` and `predef` cli arguments.

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._

[#0-11-0-M5]
=== 0.11.0-M5
:version: 0.11.0-M5
:milestone-name: 0.11.0-M5
:milestone: 76
:prev-version: 0.11.0-M4
_2023-03-09_

*This release is binary incompatible to {prev-version}.*

_Changes since {prev-version}:_

* `Cross` is no longer adding the cross parameters to the `millSourcePath`.
+
_You should review your cross modules setups to avoid build issues like incorrect source paths or missing files. ``CrossScalaModule`` is not affected by this change._
* API refactorings: `PathRef`, moved `JarManifest` to `mill.main`
* No longer inherit the Ammonite CLI config
* `scalalib`: Fixed loosing customized `mapDependencies` when `ScalaModule` get mixed in after
* `scalalib`: New `TestModule.Weaver`
* `scalajslib`: New `JsEnvConfig.Selenium`
* `testrunner`: Fixed concurrency issue with test event reporting
* Updated dependencies: ammonite 3.0.0-M0-3, coursier 2.1.0-RC6, jarajar-abrams-core 1.8.2, lambdatest 0.8.0, log4j-core 2.20.0, os-lib 0.9.1, scoverage 2.0.8, semanticdb-scalac 4.7.5, trees 4.7.5
* Documentation updates

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._

[#0-11-0-M4]
=== 0.11.0-M4
:version: 0.11.0-M4
:milestone-name: 0.11.0-M4
:milestone: 74
:prev-version: 0.11.0-M3
_2023-02-10_

*This release is binary incompatible to {prev-version}.*

_Changes since {prev-version}:_

* `scalalib`: New configuration target `zincReportCachedProblems` which, when `true`, enables reporting of all found problems, even for files which were not re-compiled
* `scalalib`: Improved SemanticDB support for Java and Scala
* `scalalib`: Mitigate another coursier download issue
* `scalajslib`: Fetch more tooling dependencies in `prepareOffline`
* `scalanativelib`: Fetch more tooling dependencies in `prepareOffline`
* `scalanativelib`: Updated tools to version 0.4.10
* `internal`: Improved support for the `mill-build` module which should improve the editing experience for `build.sc` and other build files
* Cleanups and internal improvements
* Updated dependencies: Ammonite 3.0.0-M0-1, junixsocket 2.6.2, semanticdb-java 0.8.13, upickle 3.0.0-M2

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._

[#0-11-0-M3]
=== 0.11.0-M3
:version: 0.11.0-M3
:milestone-name: 0.11.0-M3
:milestone: 73
:prev-version: 0.11.0-M2
_2023-01-23_

*This release is binary incompatible to {prev-version}.*

_Changes since {prev-version}:_

* Slightly changed the `out/` folder layout for overridden and private tasks.
Instead of `foo.overridden` we now use a `foo.super` path to hold the metadata and scratch files.
* Fixed the caching for private targets with same name but defined in different super traits.
* Fixed non-functional `clean` command when used with arguments denoting modules.
* `scalalib`: Fixed `GenIdea` issues on Windows, when the build uses plugins or additional libraries.
* `scalajslib`: `ScalaJSModule.ScalaJSTests` now extends `ScalaModule.ScalaTests` which improves consistency, better default values and compatibility with other modules like `ScoverageModule`.
* `scalanativelib`: `ScalaNativeModule.ScalaNativeTests` now extends `ScalaModule.ScalaTests` which improves consistency, better default values and compatibility with other modules.
* `contrib.gitlab`: Improved error handling for token lookup and documentation.
* Updated dependencies: coursier 2.1.0-RC5, jna 5.13.0, semanticdb-scala 4.7.3, trees 4.7.3
* Documentation improvements

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._

[#0-11-0-M2]
=== 0.11.0-M2
:version: 0.11.0-M2
:milestone-name: 0.11.0-M2
:milestone: 72
:prev-version: 0.11.0-M1
_2023-01-13_

*This release is binary incompatible to {prev-version}.*

_Changes since {prev-version}:_

* Splitted BSP module into `mill.bsp` and `mill.bsp.worker` and removed various dependencies (guava, bsp4j, xtends, lsp4j, ...) from Mill API
* `scalalib`: Added support to generate semanticdb data for Java source files
* `scalajslib`: Added support for `scalaJSOutputPattern`
* `scalajslib`: Added suport for `scalaJSSourceMap`
* `scalajslib`: Dropped support for Scala.js 0.6
* Updated dependencies: ammonite 2.5.6, coursier 2.1.0-RC4, semanticdb 4.7.1, requests 0.8.0, scalafmt 3.6.1, trees 4.7.1, upickle 3.0.0-M1, utest 0.8.1
* Various internal cleanups and improvements
* Documentation improvements

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._

[#0-11-0-M1]
=== 0.11.0-M1
:version: 0.11.0-M1
:prev-version: 0.10.10
:milestone: 70
:milestone-name: 0.11.0-M1
_2022-12-17_

*This release is binary incompatible to {prev-version}.*

_Changes since {prev-version}:_

* Greatly improved dependency resolution between modules, making it possible to mix Java and Scala modules
* `main`: Restrict `Cross` parameter to be of type `Module`
* `scalalib`: Performance improvements in Zinc worker module
* `scalalib`: Resources are no longer added to `compileClasspath`.
* `scalalib`: Added new `compileResources` which will end up in `compileClasspath`
* `scalalib`: Consolidated artifact and platform suffix handling
* `scalajslib` : Performance improvements in worker module
* `scalanativelib` : Performance improvements in worker module
* Updated dependencies: coursier 2.1.0-RC3, os-lib 0.9, scala 2.12.17, trees 4.7.0
* Removed lots of deprecated API
* Various internal cleanups and improvements

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._

[#0-10-15]
=== 0.10.15
_2024-01-07_

:version: 0.10.15
:milestone-name: 0.10.15
:milestone: 92
:prev-version: 0.10.13

_Changes since {prev-version}:_

* Make `semanticDbEnablePluginScalacOptions` protected and thus accessible for downstream use and customization

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-10-13]
=== 0.10.13
:version: 0.10.13
:milestone-name: 0.10.13
:milestone: 81
:prev-version: 0.10.12
_2023-11-12_

_Changes since {prev-version}:_

This version especially aids the transition from Mill 0.10 to Mill 0.11.

* Backport of Java 20 compatibility
* Deprecated `mill.define.SelectMode.Single`
* Backport of `mill.eval.Evaluator.evalOrThrow`
* Deprecated all inner `Tests` traits of modules derived from `JavaModule` and provide type aliases to use their successors
* Dependency updates: Ammonite 2.5.11, Coursier 2.1.7, jarjar-abrams 1.9.0, Junixxocket 2.8.2, Play 2.8.21, Scalameta Trees 4.8.12, Scala Native 0.4.16, Scoverage 2.0.11, Zinc 1.9.5

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-10-12]
=== 0.10.12
:version: 0.10.12
:milestone-name: 0.10.12
:milestone: 75
:prev-version: 0.10.11
_2023-03-20_

_Changes since {prev-version}:_

* `scalalib`: Mitigate another coursier download issue (backported from 0.11.0-M4)
* `testrunner`: Fixed a concurrency issue with test event reporting (backported from 0.11.0-M5)
* `scalajslib`: Deprecated `fastOpt` and `fullOpt`
* Updated dependencies: coursier 2.1.0, jarjar-abrams 1.8.2, jna 5.13.0, junixsocket 2.6.2, log4j-core 2.20.0, scalafmt-dynamic 3.6.1, trees 4.7.6

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-10-11]
=== 0.10.11
:version: 0.10.11
:milestone-name: 0.10.11
:milestone: 71
:prev-version: 0.10.10
_2023-01-24_

_Changes since {prev-version}:_

* Fixed non-functional `clean` command when used with arguments denoting modules.
* `scalalib`: Fixed `GenIdea` issues on Windows, when the build uses plugins or additional libraries.
* `scalajslib`: Performance improvements in worker module
* `scalajslib`: Pass more settings from `ScalaJSModule` to its `Tests`
+
_If you have issues after the update (like `org.scalajs.jsenv.UnsupportedInputException`, https://github.com/com-lihaoyi/mill/issues/2300), check your settings in the test modules for consistency._
* Some internal improvements backported from `0.11.0-M3`

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-10-10]
=== 0.10.10
:version: 0.10.10
:prev-version: 0.10.9
:milestone: 69
:milestone-name: 0.10.10
_2022-12-06_

After this release, the `main` branch is open for development of the next major version of Mill, which is probably `0.11`.
Further maintenance work will happen in the `0.10.x` branch.

_Changes since {prev-version}:_

* Lots of documentation improvements, additions and restructurings
* `core`: Fixed some rare issues with reading the `.mill-jvm-opts` file
* `core`: We made slight adaptions to the `T.dest` location of target defined in included files, to fix potential colliding cache locations
* `scalalib`: JAR archives created by Mill now by default contain directory entries
* `scalalib`: Updated zinc to 1.8.0
* `scalajslib`: Added support for more `JsEnv` providers
+
_If you get some issues (like `connect ECONNREFUSED`, https://github.com/com-lihaoyi/mill/issues/2204) after the update, review your settings for `JsEnv` providers._
* `scalanativelib`: Support for incremental compilation since Scala Native 0.4.9
* `contrib.testng`: The TestNG library is no longer provided transitively; you need to provide it explicitly
* `contrib.bloop`: Fixed re-generation of bloop config dir; previously, it could happen, that there where no config files at all
* `BSP`: implement `buildTarget/OutputPaths` request
* Various version bumps and internal improvements

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-10-9]
=== 0.10.9
:version: 0.10.9
:prev-version: 0.10.8
:milestone: 68
:milestone-name: 0.10.9
_2022-11-10_

_Changes since {prev-version}:_

* **Hardened Maven and Ivy artifact handling to prevent path-traversal attacks** (see https://github.com/advisories/GHSA-wv7w-rj2x-556x[CVE-2022-37866]), also updated coursier dependency to a non-vulnerable version
* Decoupled `mill-moduledefs` module into a {link-mill-moduledefs}[separate project], to better suite compiler plugin packaging and improve support for various Scala versions
* Applied more workarounds to coursier concurrency issues to make parallel builds more robust
* Added support for newer Scala versions in `GenIdea` (2.2 and 2.3)
* Fixed an issue where `PublishModule` dropped module dependencies when mixed-in after other trait which overrode `moduleDeps`
* new `JMH` contrib plugin
* Lots of internal improvements and dependency updates

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-10-8]
=== 0.10.8
:version: 0.10.8
:prev-version: 0.10.7
:milestone: 67
:milestone-name: 0.10.8
_2022-10-10_

_Changes since {prev-version}:_

* Improvements for better Scala 3.2 support
* Fixed non-working default commands in cross modules
* `CoursierModule`: mitigate more download failure situations (e.g. checksum failures)
* `PublishModule`: properly show `gpg` output in server mode
* `BSP`: Better compiler message handling (`logMessage` instead of `showMessage`) and support for diagnostic code
* `ScoverageModule`: Support for Scoverage 2.x
* New contrib module `GitlabPublishModule`
* Various internal improvements and version bumps
* Documentation improvements

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-10-7]
=== 0.10.7
:version: 0.10.7
:prev-version: 0.10.6
:milestone: 66
:milestone-name: 0.10.7
_2022-08-24_

_Changes since {prev-version}:_

* Don't print unwanted debug messages from zinc

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-10-6]
=== 0.10.6
:version: 0.10.6
:prev-version: 0.10.5
:milestone: 64
:milestone-name: 0.10.6
_2022-08-24_

_Changes since {prev-version}:_

* ``PathRef``s sigs are now more reproducible and independent of the used filesystem
* `JavaModule` can now use a non-local Java Compiler to support all options
* `Logger`: new `debugEnabled` to detect whether debug logging is enabled
* New `testkit` module, to use `UnitTester` in external projects
* Fixed reading of `.mill-jvm-opts` in server mode
* BSP: Automatic SemanticDB enablement to improve Metals support
* `mill.twirllib.TwirlModule` - new mandatory target `twirlScalaVersion` to configure the Scala version used by Twirl compiler, and support for newer versions
* Lots of documentation updates and additions
* Upgraded to Zinc 1.7.1 and various other dependency updates

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-10-5]
=== 0.10.5
:version: 0.10.5
:prev-version: 0.10.4
:milestone: 63
:milestone-name: 0.10.5
_2022-07-01_

_Changes since {prev-version}:_

* New `init` command, to create new Mill projects from Gitter8 (g8) templates
* `PathRef` now gracefully ignores socket files.
This also fixes an annoying issue when Mill was previously ran in a source directory.
* Fixed a bug with using `mill --repl` without any further arguments, which was introduced in Mill 0.10.2 and prevented proper no-server mode
* Fixed the `visualize` command which wasn't working on some newer JREs
* Improved Mill server support for Windows 11 and some Windows Server versions

* `ScalaModule` / `ZincWorkerModule`: Fixed incremental compilation issue with JRE 17 (and probably others)
* `TestModule` now better supports JUnit5 test suites
* `ScalaJsModule`: internal improvements to the stability of the Scala.js linker
* `ScalaNativeModule`: Added support for `nativeEmbedResources`
* `BSP`: improved handling of the `mill-build` module when the BSP client is IntelliJ IDEA

* Documentation updates and link fixes
* Various dependency updates

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-10-4]
=== 0.10.4
:version: 0.10.4
:prev-version: 0.10.3
:milestone: 62
:milestone-name: 0.10.4
_2022-05-06_

_Changes since {prev-version}:_

* Switched from ipcsocket to junixsocket library to enhance the robustness of Mill client server communication.
This should greatly improve the user experience on Windows.
* Internal improvements and better support of GraalVM
* The Mill Documentation site has now built-in search functionality

* `ScalaJsModule`: New targets `fastLinkJS` and `fullLinkJS` and deprecated `fastOpt` and `fullOpt`
* `ScalaJsModule`: Support for `ModuleSplitStyle`
* `BSP`: Updated to protocol version 2.1.0-M1, added support for test framework names and support for the JVM extension
* `GenIdea`: More consistent ordering of libraries and dependent modules and support for Scala 3.1 language level
* `Bloop`: Added support for runtime dependencies

* Enhanced test suite to cover Mill client server scenarios
* Various dependency updates

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-10-3]
=== 0.10.3
:version: 0.10.3
:prev-version: 0.10.2
:milestone: 61
:milestone-name: 0.10.3
_2022-04-11_

_Changes since {prev-version}:_

* Fixed `import $file` for files with hyphens and other symbols in its name
* Fixed an issues with truncated output just before Mill finishes

* Mill commands now support arguments of type `Task[T]`, which can improve writing re-usable commands, especially, they can be called from other tasks more easily

* `JavaModule`: Improved correctness and performance of `compileClasspath` and `bspCompileClasspath` targets.
This fixes an issue with BSP for large projects.
Also, compile-time dependencies no longer sneak into the classpath transitively.
* `JavaModule`: Added `docJarUseArgsFile` target and fix issue with Windows command length restrictions in `docJar`

* `BSP` and `Bloop`: Better detect foreign modules

* Various internal API refinements and improvements
* Reorganized integration test suite and build setup

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-10-2]
=== 0.10.2
:version: 0.10.2
:prev-version: 0.10.1
:milestone: 60
:milestone-name: 0.10.2
_2022-03-18_

_Changes since {prev-version}:_

* Mill workers can now implement `AutoCloseable` to properly free resources
* `ScalaModule`: Fixed `repl` start
* `CoursierModule`: Fixed concurrent download issues with coursier (we detect and retry)
* `MainModule`: Fixed potential match error with `show`  and `showNamed`
* Restructured contrib module documentation
* Internal improvements

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-10-1]
=== 0.10.1
:version: 0.10.1
:prev-version: 0.10.0
:milestone: 59
:milestone-name: 0.10.1
_2022-03-08_

_Changes since {prev-version}:_

* `MillClienMain` can now act as universal main to start mill with or without a server process
* Improved `show` command that always returns valid JSON
* Added `showNamed` command that includes the task names in the output
* Implemented more granular cache invalidation which keeps more caches intact when you split your build setup over multiple `.sc` files with `import $file`.
* The local `.mill-jvm-opts` file is no longer restricted to `-X` options

* `CoursierModule`: Added `coursierCacheCustomizer` to support a `FileCache` customizers
* `JavaModule`: the `docJar` target no longer includes hidden files
* `ScalaModule`: Updated to latest zinc version
* `ScalaModule`: Reworked scalac plugins handling for the better and to support Scala 3
* `ScalaNativeModule`: fixed `Dep.withDottyCompat` behavior
* `ScalaJSModule`: support for linking multiple modules
* `ScalafmtModule`: Support for newer Scalafmt versions

* Tool chain: Update to Mill 0.10.0
* Tool chain: we no longer create files outside the mill project directory (e.g. `~/mill-release` is now under `target/mill-release`)
* Various dependency updates
* Lots of internal improvements

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-10-0]
=== 0.10.0
:version: 0.10.0
:prev-version: 0.10.0-M5
:milestone: 57
:milestone-name: 0.10.0
_2022-01-14_

_Changes since {prev-version}:_

* Changed structure of `out` directory, `out/foo/dest` is now `out/foo.dest`
* Fixed issues with loading of predef scripts
* `--watch` now supports manual re-runs by pressing enter
* Improved subprocess handling
* Published poms can now contain properties and `versionScheme` information
* Improved Scala.js support, including more target configuration options and support for Node 17
* Improved Scala Native for version > 0.4.2 and support Scala 3
* Internal improvements, fixes and dependency version updates

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-10-0-M5]
=== 0.10.0-M5
:version: main
:prev-version: 0.10.0-M4
:milestone: 55
:milestone-name: 0.10.0-M5
_2021-12-18_

*This release breaks binary compatibility for external plugins.*

_Changes since {prev-version}:_

* Fixed Log4Shell security vulnerability in `ZincWorkerModule` (CVE-2021-44228)
* Factored out the testrunner into a new module, which also fixes some potential classloader issues when executing tests (e.g. with JNA)
* Removed the limitation of max 22 inputs for tasks
* `--watched` commands can now re-run when pressing enter-key
* task and arguments of commands can now have hyphens in their name
* Reworked and decluttered the out-folder structure
* `prepareOffline` now has a `all` flag to control if all or only some dependency should be prefetched
* Made caching more effective for targets overridden in stackable-traits
* Further BSP improvements, esp. for Metals and Scala 3
* Lots of other internal improvements and fixes
* Various dependency updates

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-10-0-M4]
=== 0.10.0-M4
:version: 0.10.0-M4
:prev-version: 0.10.0-M3
:milestone: 54
:milestone-name: 0.10.0-M4
_2021-11-08_

_Changes since {prev-version}:_

* BSP support rework and overhaul of built-in BSP server
* GenIdea: failures when inspecting and resolving the build are not properly reported
* Coursier: we now implemented a workaround to tackle concurrent downloads issues
* New `+` separator to provide multiple targets (with parameters) via cmdline
* New `--import` cmdline option to run ad-hoc plugins without editing of `build.sc`
* New `T.ctx().workspace` API to access the project root directory
* Various internal improvements and bug fixes
* Various refactorings and cleanups

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-1-0-M3]
=== 0.10.0-M3
:version: 0.10.0-M3
:prev-version: 0.10.0-M2
:milestone: 53
:milestone-name: 0.10.0-M3
_2021-09-29_

*This is a milestone release.
This release breaks binary compatibility for external plugins build for mill 0.9.x.
The API is suspected to change before a 0.10.0 releae.*

_Changes since {prev-version}:_

* `ScalaModule with PublishModule`: the `scala-library` artifact is now always part of the dependencies in published ``pom.xml``s and ``ivy.xml``s
* New `JavaModule.mandatoryMvnDeps` target to provide essential dependencies like scala-library without forcing the user to call `super.mvnDeps`
* `ScalaJSModule.scalaLibraryMvnDeps` no longer contains the scala-js-library, but only the scala-library; if you need that, use `ScalaJSModule.mandatoryMvnDeps` instead.
* `import $ivy` support `$MILL_BIN_PLATFORM` variable and a new sort notations for external plugins
* We fixed and enabled lots of tests to run on Windows
* Some generic targets like `plan` or `path` now also return their output
* `GenIdea`: improved support for Scala 3 projects *

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-10-0-M2]
=== 0.10.0-M2
:version: 0.10.0-M2
:prev-version: 0.9.9
:milestone: 51
:milestone-name: 0.10.0-M2
_2021-09-17_

_Changes since {prev-version}:_

*This is a early milestone release.
This release breaks binary compatibility for external plugins build for mill 0.9.x.
The API is suspected to change before a 0.10.0 releae.*

_Changes since {prev-version}:_

* Removed deprecated API
* `ScalaModule`: added `mandatoryScalacOptions` to avoid the common issue that users forget to include mandatory options when defining their own.
* Renamed `toolsClasspath` targets found in various modules to avoid hard to resolve clashes when mixing traits
* Fixed and improved our test suite on Windows
* Various fixes and improvements
* Various dependency updates

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-9-12]
=== 0.9.12

:version: 0.9.12
:prev-version: 0.9.11
:milestone: 58
:milestone-name: 0.9.12
_2022-01-07_

_Changes since {prev-version}:_

* fixed parsing of command parameters in `show` command
* zinc worker: Updated log4j2 to 2.17.1

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-9-11]
=== 0.9.11
:version: 0.9.11
:prev-version: 0.9.10
:milestone: 56
:milestone-name: 0.9.11
_2021-12-15_

_Changes since {prev-version}:_

* zinc worker: Updated log4j2 to 2.16.0 to fix Log4Shell (CVE-2021-44228) vulnerability

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-9-10]
=== 0.9.10
:version: 0.9.10
:prev-version: 0.9.9
:milestone: 52
:milestone-name: 0.9.10
_2021-11-13_

_Changes since {prev-version}:_

* Some feature backports from mill 0.10
* New `+` separator to provide multiple targets (with parameters) via cmdline
* New `--import` cmdline option to run ad-hoc plugins without editing of `build.sc`
* `import $ivy` support `$MILL_BIN_PLATFORM` variable and a new sort notations for external plugins

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-9-9]
=== 0.9.9
:version: 0.9.9
:prev-version: 0.9.8
:milestone: 50
:milestone-name: 0.9.9
_2021-07-15_

_Changes since {prev-version}:_

* BSP: Fixed/improved source item for root project
* Bloop: Prevent compilation during bloop config generation
* GenIdea: Fix content path of root project (mill-build)
* Various version bumps

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-9-8]
=== 0.9.8
:version: 0.9.8
:prev-version: 0.9.7
:milestone: 49
:milestone-name: 0.9.8
_2021-05-27_

_Changes since {prev-version}:_

* Fixed some potential binary incompatibilities with external plugins (builds against older os-lib versions)
* Fixed location and configuration of mills home path (used for caching of build scripts)
* Properly close jar resources - should fix issues in `assembly`, esp. on Windows where open resources are locked
* BSP: Repaired mills BSP server
* playlib: Fixed issues with the play-contrib module and added support for Play 2.8
* GenIdea: changed dir for generated mill modules to `.idea/mill_modules`
* Various version bumps, including Scala 2.13.5

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-9-7]
=== 0.9.7
:version: 0.9.7
:prev-version: 0.9.6
:milestone: 48
:milestone-name: 0.9.7
_2021-05-14_

_Changes since {prev-version}:_

* `ScalaModule`: Support for Scala 3
* `CoursierModule`: Support customized dependency resolution (needed to work with ScalaFX)
* `TestModule`: Added new `testFramework` target and only support one test framework.
Deprecated `testFrameworks` targets.
* `TestModule`: Added new convenience traits to configure popular test frameworks, e.g. `TestModule.Junit4`, `TestModule.ScalaTest`, `TestModule.Utest` and many more
* `Bloop`: Added support for foreign modules
* Better support for Windows environments
* Various internal improvements, cleanups, and deprecations
* Various dependencies updates
* Removed tut contrib module because of unmaintained/archived upstream dependency

_For details refer to
{link-milestone}/{milestone}?closed=1[milestone {milestone-name}]
and the {link-compare}/{prev-version}\...{version}[list of commits]._


[#0-9-6]
=== 0.9.6
_2021-04-03_


_The mill project home and repository has been moved to https://github.com/com-lihaoyi/mill._

* `repl` and `console` targets now support `forkArgs` and `forkEnv`
* Support for Scala 3 release candidates and new Scaladoc 3 tool
* Support for Scala.js on Scala 3
* Scala Native improvements
* Test runner now uses an args file to support running tests on Windows
* GenIdea: better supports source jars, full config contributions and provided/runtime dependencies
* Various dependency updates
* Documentation site reworked to support multiple release versions
* Improved CI setup to better test mill on Windows

_For details refer to
{link-milestone}/47?closed=1[milestone 0.9.6]
and the {link-compare}/0.9.5\...0.9.6[list of commits]._


[#0-9-5]
=== 0.9.5
_2021-01-26_


* Updated zinc to 1.4.4
* Support for Scala Native 0.4.0
* Support for Scala.js ESModule (including Bloop support)
* Inner `Tests` traits in modules like `JavaModule`, `ScalaModule` and others now have unique names (`JavaModuleTests`, `ScalaTests`, etc), to allow for easier customization
* Various version bumps of dependencies
* CI now runs all tests, it did miss some before

_For details refer to {link-milestone}/46?closed=1[milestone 0.9.5]
and the link:{link-compare}/0.9.4\...0.9.5[list of commits]._


[#0-9-4]
=== 0.9.4
_2020-12-21_


* Implemented more BSP protocol commands and fixed some glitches with IntelliJ
* Stabilized CI builds
* Various fixes and improvements
* Various version bumps

_For details refer to {link-milestone}/45?closed=1[milestone 0.9.4]
and the {link-compare}/0.9.3\...0.9.4[list of commits]._


[#0-9-3]
=== 0.9.3
_2020-11-26_


_(We also tagged `0.9.0`, `0.9.1`, and `0.9.2`, but due to release difficulties, we ask you not to use them.)_

* Replace the built in `@main` method functionality with the
https://github.com/lihaoyi/mainargs[MainArgs] library
* Note that the MainArgs replacement has some backwards incompatibilities: Short flags like `-i` can no longer be passed via `--i`, the `@doc("")` is now `@arg(doc = "")`, `Seq[T]` parameters are now passed via repeated `--foo`
flags rather than comma-separated.
* Add the ability to relocate/shade files in `.assembly` {link-pr}/947[#947]
* Twirl enhancements {link-pr}/952[#952]
* Add `scalacPluginClasspath` to Tests {link-pr}/956[#956]
* Add `toMap` methods to `BuildInfo` {link-pr}/958[#958]
* Bump coursier to version 2.0.0 {link-pr}/973[#973]
* Make BSP support a first-class citizen {link-pr}/969[#969]
* Omit the suffix in `artifactName` in cross modules {link-pr}/953[#953]
* Allow test classes with constructor parameters {link-pr}/982[#982]
* Proguard contrib module {link-pr}/972[#972]
* Support Scala.js useECMAScript2015 option and ModuleKind.ESModule
{link-pr}/1004[#1004]
* Support Scala.js incremental linking
{link-pr}/1007[#1007]

_For details refer to {link-milestone}/44?closed=1[milestone 0.9.3]
and the {link-compare}/0.8.0\...0.9.3[list of commits]._


[#0-8-0]
=== 0.8.0
_2020-07-20_


* Bump external dependencies: uPickle 1.2.0, Ammonite 2.2.0, etc.
* Use default coursier repos (#931)
* Work around relative paths issue on windows (#936)
* Support Scala.js versions &gt;1.0.0 (#934)

_For details refer to {link-milestone}/43?closed=1[milestone 0.8.0]
and the {link-compare}/0.7.4\...0.8.0[list of commits]._


[#0-7-4]
=== 0.7.4
_2020-07-03_


* new command line options `--repl` and `--no-server`, deprecated `--interactive` option
* Support for Scala.js 1.1
* Fixed missing source maps for Scala.js 1.0 and 1.1
* Improved BSP contrib module

_For details refer to {link-milestone}/42?closed=1[milestone 0.7.4]
and the {link-compare}/0.7.3\...0.7.4[list of commits]._


[#0-7-3]
=== 0.7.3

_For details refer to {link-milestone}/41?closed=1[milestone 0.7.3]
and the {link-compare}/0.7.2\...0.7.3[list of commits]._


[#0-7-2]
=== 0.7.2
_2020-05-19_



_For details refer to {link-milestone}/40?closed=1[milestone 0.7.2]
and the {link-compare}/0.7.1\...0.7.2[list of commits]._


[#0-7-1]
=== 0.7.1
_2020-05-17_


_For details refer to {link-milestone}/39?closed=1[milestone 0.7.1]
and the {link-compare}/0.7.0\...0.7.1[list of commits]._


[#0-7-0]
=== 0.7.0
_2020-05-15_


* Greatly improved parallel builds via `-j &lt;n&gt;`/`--jobs &lt;n&gt;`, with better scheduling and utilization of multiple cores
* `build.sc` files now uses Scala 2.13.2
* Avoid duplicate target resolution with `mill resolve __`
* Add ability to pass GPG arguments to publish via `--gpgArgs`
* `-w`/`--watch` now works for `Task.Source` targets

_For details refer to {link-milestone}/37?closed=1[milestone 0.7.0]
and the {link-compare}/0.6.3\...0.7.0[list of commits]._


[#0-6-3]
=== 0.6.3
_2020-05-10_


* Finished incomplete support to publish extra artifacts to IVY repositories (`publishLocal`)
* Improved Sonatype uploads
* `GenIdea`: improvements for shared source dirs and skipped modules
* `ScoverageModule`: Some refactorings to allow better customization
* More robust classpath handling under Windows

_For details refer to {link-milestone}/38?closed=1[milestone 0.6.3]
and the {link-compare}/0.6.2\...0.6.3[list of commits]._


[#0-6-2]
=== 0.6.2
_2020-04-22_


* Mill can now execute targets in parallel.
This is experimental and need to be enabled with `--jobs &lt;n&gt;` option.
* `PublishModule`: new `publishM2Local` to publish into local Maven repositories
* `PublishModule`: enhanced `publishLocal` to specify to ivy repository location
* Windows: Fixed windows launcher and more robust classpath handling
* `ScalaNativeModule`: improved compiling and linking support
* new contrib module `VersionFile`
* `Dependency`: improved dependency update checker and expose results for programmable use
* ǹew contrib module `Bintray`
* ǹew contrib module `Artifactory`
* fixed testCached support in various modules
* `GenIdea`: improvements, esp. related to source jars

_For details refer to {link-milestone}/36?closed=1[milestone 0.6.2]
and the {link-compare}/0.6.1\...0.6.2[list of commits]._


[#0-6-1]
=== 0.6.1
_2020-02-24_


* Bugfix: Mill now no longer leaks open files (version bump to uPickle 1.0.0)
* New `--version` option
* Added Support for Scala.js 1.0.0+
* Added Support for Scala Native 0.4.0-M2
* `JavaModule`: Enhanced `mvnDepsTree` to optionally include compile-time and runtime-time dependencies
* `JavaModule`: `allSourceFiles` no longer include Scala sources
* `JavaModule`: assembly supports configurable separator when merging resources
* `ScoverageModule`: respect `unmanagedClasspath`, added console reporter
* `ScalaPBModule`: added more configuration options
* Bloop: Fixed inconsistent working directory when executing tests via bloop (forces `-Duser.dir` when generating bloop config)

_For details refer to {link-milestone}/35?closed=1[milestone 0.6.1]
and the {link-compare}/0.6.0\...0.6.1[list of commits]._


[#0-6-0]
=== 0.6.0
_2020-01-20_


* Support for METALS 0.8.0 in VSCode

_For details refer to {link-milestone}/34?closed=1[milestone 0.6.0]
and the {link-compare}/0.5.9\...0.6.0[list of commits]._


[#0-5-9]
=== 0.5.9
_2020-01-14_


* Bump library versions again
* Alias `T.ctx.*` functions to `T.*`: `T.dest`, `T.log`, etc.
* Bump Mill's client-connect-to-server timeout, to reduce flakiness when the server is taking a moment to start up

_For details refer to the {link-compare}/0.5.7\...0.5.9[list of commits]._

*Version 0.5.8 has some binary compatibility issues in requests-scala/geny and should not be used.*

=== 0.5.7
_2019-12-28_


* Bump library versions: Ammonite 2.0.1, uPickle 0.9.6, Scalatags 0.8.3, OS-Lib 0.6.2, Requests 0.4.7, Geny 0.4.2

_For details refer to {link-milestone}/33?closed=1[milestone 0.5.7]
and the {link-compare}/0.5.5\...0.5.7[list of commits]._

[#0-5-6]
[#0-5-5]
=== 0.5.5 / 0.5.6 - 2019-12-20

_(we skipped version 0.5.4 as we had some publishing issues)_

* Bump library versions: Ammonite 1.9.2, uPickle 0.9.0, Scalatags 0.8.2, OS-Lib 0.5.0, Requests 0.3.0, Geny 0.2.0, uTest 0.7.1
* Fixed a long standing issue that output of sub-processes are only shown when `-i` option was used.
Now, you will always seen output of sub-process.
* Mill now properly restarts it's server after it's version has changed
* `PublishModule`: added ability to publish into non-staging repositories
* `ScalaPBModule`: added extra include path option

_For details refer to {link-milestone}/32?closed=1[milestone 0.5.5]
and the {link-compare}/0.5.3\...0.5.5[list of commits]._

[#0-5-3]
=== 0.5.3
_2019-12-07_


* `GenIdea/idea`: improved support for generated sources and use/download sources in more cases
* ScalaJS: improvements and support for ScalaJS 0.6.29+ and 1.0.1.RC1
* Introduced new `CoursierModule` to use dependency management independent from a compiler
* `ScoverageModule`: better handling of report directories
* `ScalaPBModule`: more configuration options
* various other fixes and improvements

_For details refer to {link-milestone}/31?closed=1[milestone 0.5.3]
and the {link-compare}/0.5.2\...0.5.3[list of commits]._

[#0-5-2]
=== 0.5.2
_2019-10-17_


* `TestModule`: new `testCached` target, which only re-runs tests after relevant changes
* `TestModule.test`: fixed issue when stacktraces have no filename info
* `Dependency/updates`: fixed issue with reading stale dependencies
* `GenIdea/idea`: no longer shared output directories between mill and IntelliJ IDEA
* support for Dotty &gt;= 0.18.1
* Fixed backwards compatibility of mill wrapper script
* Mill now support the Build Server Protocol 2.0 (BSP) and can act as a build server
* bloop: removed semanticDB dependency
* Documentation updates

_For details refer to {link-milestone}/30?closed=1[milestone 0.5.2]
and the {link-compare}/0.5.1\...0.5.2[list of commits]._

[#0-5-1]
=== 0.5.1
_2019-09-05_


* GenIdea: Bug fixes
* GenIdea: Support for module specific extensions (Facets) and additional config files
* Add ability to define JAR manifests
* Dotty support: Updates and support for binary compiler bridges
* Ivy: improved API to create optional dependendies
* Interpolate `$MILL_VERSION` in ivy imports
* Zinc: Fixed logger output
* Scoverage: Upgrade to Scoverage 1.4.0
* Flyway: Upgrade to Flyway 6.0.1
* Bloop: Updated semanticDB version to 4.2.2
* Documentation updates
* Improved robustness in release/deployment process

_For details refer to {link-milestone}/29?closed=1[milestone 0.5.1]
and the {link-compare}/0.5.0\...0.5.1[list of commits]._

[#0-5-0]
=== 0.5.0
_2019-08-08_


* Mill now supports a `./mill`
{link-current-doc-site}/#bootstrap-scripts-linuxos-x-only[bootstrap script], allowing a project to pin the version of Mill it requires, as well as letting contributors use `./mill ...` to begin development without needing to install Mill beforehand.

* Support for a `.mill-version` file or `MILL_VERSION` environment variable for
{link-current-doc-site}/#overriding-mill-versions[Overriding Mill Versions]

* Fix scoverage: inherit repositories from outer project {link-pr}/645[#645]

[#0-4-2]
=== 0.4.2
_2019-06-30_


* Improvements to IntelliJ project generation {link-pr}/616[#616]

* Allow configuration of Scala.js' JsEnv {link-pr}/628[#628]

[#0-4-1]
=== 0.4.1
_2019-06-13_


* Fixes for scala native test suites without test frameworks {link-issue}/627[#627]

* Fix publication of artifacts by increasing sonatype timeouts

* Bug fixes for Scoverage integration {link-issue}/623[#623]

[#0-4-0]
=== 0.4.0
_2019-05-20_


* Publish `compileMvnDeps` as provided scope ({link-issue}/535[535])

* Added contrib modules to integrate
{link-current-doc-site}/page/contrib-modules.html#bloop[Bloop],
{link-current-doc-site}/page/contrib-modules.html#flyway[Flyway],
{link-current-doc-site}/page/contrib-modules.html#play-framework[Play Framework],
{link-current-doc-site}/page/contrib-modules.html#scoverage[Scoverage]

* Allow configuration of GPG key names when publishing ({link-pr}/530[530])

* Bump Ammonite version to 1.6.7, making
https://github.com/lihaoyi/requests-scala[Requests-Scala] available to use in your `build.sc`

* Support for Scala 2.13.0-RC2

* ScalaFmt support now uses the version specified in `.scalafmt.conf`

[#0-3-6]
=== 0.3.6
_2019-01-17_


* Started to splitting out mill.api from mill.core

* Avoid unnecessary dependency downloading by providing fetches per cache policy

* Added detailed dependency download progress to the progress ticker

* Fixed internal code generator to support large projects

* Zinc worker: compiler bridge can be either pre-compiled or on-demand-compiled

* Zinc worker: configurable scala library/compiler jar discovery

* Zinc worker: configurable compiler cache supporting parallelism

* Version bumps: ammonite 1.6.0, scala 2.12.8, zinc 1.2.5

* Mill now by default fails fast, so in case a build tasks fails, it exits immediately

* Added new `-k`/`--keep-going` commandline option to disable fail fast behaviour and continue build as long as possible in case of a failure

[#0-3-5]
=== 0.3.5
_2018-11-18_


* Bump uPickle to 0.7.1

[#0-3-4]
=== 0.3.4
_2018-11-06_


* Mill is now bundled with https://github.com/lihaoyi/os-lib[OS-Lib], providing a simpler way of dealing with filesystem APIs and subprocesses

[#0-3-3]
=== 0.3.3
_2018-11-02_


* Added new `debug` method to context logger, to log additional debug info into the task specific output dir (`out/&lt;task&gt;/log`)

* Added `--debug` option to enable debug output to STDERR

* Fix `ScalaModule#docJar` task when Scala minor versions differ {link-issue}/475[475]

[#0-3-2]
=== 0.3.2
_2018-10-19_


* Automatically detect main class to make `ScalaModule#assembly` self-executable

[#0-3-0]
=== 0.3.0
_2018-10-19_


* Bump Ammonite to 1.3.2, Fastparse to 2.0.4

* Sped up `ScalaModule#docJar` task by about 10x, greatly speeding up publishing

* Add a flag `JavaModule#skipIdea` you can override to disable Intellij project generation {link-pr}/458[#458]

* Allow sub-domains when publishing {link-pr}/441[#441]

[#0-2-8]
=== 0.2.8
_2018-09-21_


* `mill inspect` now displays out the doc-comment documentation for a task.

* Avoid shutdown hook failures in tests {link-pr}/422[#422]

* Ignore unreadable output files rather than crashing {link-pr}/423[#423]

* Don't compile hidden files {link-pr}/428[#428]

[#0-2-7]
=== 0.2.7
_2018-08-27_


* Add `visualizePlan` command

* Basic build-info plugin in `mill-contrib-buildinfo`

* ScalaPB integration in `mill-contrib-scalapblib`

* Fixes for Twirl support, now in `mill-contrib-twirllib`

* Support for building Dotty projects
{link-pr}/397[#397]

* Allow customization of `run`/`runBackground` working directory via
`forkWorkingDir`

* Reduced executable size, improved incremental compilation in
{link-pr}/414[#414]

[#0-2-6]
=== 0.2.6
_2018-07-30_


* Improve incremental compilation to work with transitive module dependencies

* Speed up hot compilation performance by properly re-using classloaders

* Speed up compilation time of `build.sc` files by removing duplicate macro generated routing code

[#0-2-5]
=== 0.2.5
_2018-07-22_


* Add `.runBackground` and `.runMainBackground` commands, to run something in the background without waiting for it to return.
The process will keep running until it exits normally, or until the same `.runBackground` command is run a second time to spawn a new version of the process.
Can be used with `-w` for auto-reloading of long-running servers.

* {link-current-doc-site}/page/common-project-layouts.html#scala-native-modules[Scala-Native support].
Try it out!

* Add `--disable-ticker` to reduce spam in CI

* Fix propagation of `--color` flag

[#0-2-4]
=== 0.2.4
_2018-07-07_


* Fix resolution of `scala-{library,compiler,reflect}` in case of conflict

* Allow configuration of `JavaModule` and `ScalafmtModule` scala workers

* Allow hyphens in module and task names

* Fix publishing of ScalaJS modules to properly handle upstream ScalaJS dependencies

[#0-2-3]
=== 0.2.3
_2018-06-03_


* Added the {link-current-doc-site}/#visualize[mill visualize]
command, making it easy to visualize the relationships between various tasks and modules in your Mill build.

* Improve Intellij support ({link-pr}/351[351]):
better jump-to-definition for third-party libraries, no longer stomping over manual configuration, and better handling of `import $ivy` in your build file.

* Support for un-signed publishing and cases where your GPG key has no passphrase ({link-pr}/346[346])

* Basic support for Twirl, Play Framework's templating language ({link-pr}/271[271])

* Better performance for streaming large amounts of stdout from Mill's daemon process.

* Allow configuration of append/exclude rules in `ScalaModule#assembly`
({link-pr}/309[309])

[#0-2-2]
=== 0.2.2
_2018-05-20_


* Preserve caches when transitioning between `-i`/`--interactive` and the fast client/server mode ({link-issue}/329[329])

* Keep Mill daemon running if you Ctrl-C during `-w`/`--watch` mode ({link-issue}/327[327])

* Allow `mill version` to run without a build file ({link-issue}/328[328])

* Make `docJar` (and thus publishing) robust against scratch files in the source directories ({link-issue}/334[334]) and work with Scala compiler options ({link-issue}/336[336])

* Allow passing Ammonite command-line options to the `foo.repl` command ({link-pr}/333[333])

* Add `mill clean` ({link-pr}/315[315]) to easily delete the Mill build caches for specific targets

* Improve IntelliJ integration of ``MavenModule``s/``SbtModule``s' test folders ({link-pr}/298[298])

* Avoid showing useless stack traces when `foo.test` result-reporting fails or
`foo.run` fails

* ScalaFmt support ({link-pr}/308[308])

* Allow `ScalaModule#generatedSources` to allow single files (previous you could only pass in directories)

[#0-2-0]
=== 0.2.0
_2018-04-10_


* Universal (combined batch/sh) script generation for launcher, assembly, and release ({link-issue}/264[#264])

* Windows client/server improvements ({link-issue}/262[#262])

* Windows repl support (note: MSYS2 subsystem/shell will be supported when jline3 v3.6.3 is released)

* Fixed Java 9 support

* Remove need for running `publishAll` using `--interactive` when on OSX and your GPG key has a passphrase

* First-class support for ``JavaModule``s

* Properly pass compiler plugins to Scaladoc ({link-issue}/282[#282])

* Support for ivy version-pinning via `jvm"...".forceVersion()`

* Support for ivy excludes via `jvm"...".exclude()` ({link-pr}/254[#254])

* Make `mvnDepsTree` properly handle transitive dependencies ({link-issue}/226[#226])

* Fix handling of `runtime`-scoped ivy dependencies ({link-issue}/173[#173])

* Make environment variables available to Mill builds ({link-issue}/257[#257])

* Support ScalaCheck test runner ({link-issue}/286[#286])

* Support for using Typelevel Scala ({link-issue}/275[#275])

* If a module depends on multiple submodules with different versions of an ivy dependency, only one version is resolved ({link-issue}/273[#273])

[#0-1-7]
=== 0.1.7
_2018-03-26_


* Support for non-interactive (client/server) mode on Windows.

* More fixes for Java 9

* Bumped the Mill daemon timeout from 1 minute to 5 minutes of inactivity before it shuts down.

* Avoid leaking Node.js subprocesses when running `ScalaJSModule` tests

* Passing command-line arguments with spaces in them to tests no longer parses wrongly

* `ScalaModule#repositories`, `scalacPluginMvnDeps`, `scalacOptions`,
`javacOptions` are now automatically propagated to `Tests` modules

* `ScalaJSModule` linking errors no longer show a useless stack trace

* `ScalaModule#docJar` now properly uses the compileClasspath rather than runClasspath

* Bumped underlying Ammonite version to http://ammonite.io/#1.1.0[1.1.0], which provides the improved Windows and Java 9 support

[0-1-6]
=== 0.1.6
_2018-03-13_


* Fixes for non-interactive (client/server) mode on Java 9

* Windows batch (.bat) generation for launcher, assembly, and release

[#0-1-5]
=== 0.1.5
_2018-03-13_


* Introduced the `mill plan foo.bar` command, which shows you what the execution plan of running the `foo.bar` task looks like without actually evaluating it.

* Mill now generates an `out/mill-profile.json` file containing task-timings, to make it easier to see where your mill evaluation time is going

* Introduced `ScalaModule#mvnDepsTree` command to show dependencies tree

* Rename `describe` to `inspect` for consistency with SBT

* `mill resolve` now prints results sorted alphabetically

* Node.js configuration can be customised with `ScalaJSModule#nodeJSConfig`

* Scala.js `fullOpt` now uses Google Closure Compiler after generating the optimized Javascript output

* Scala.js now supports `NoModule` and `CommonJSModule` module kinds

* Include `compileMvnDeps` when generating IntelliJ projects

* Fixed invalid POM generation

* Support for Java 9 (and 10)

* Fixes for Windows support

* Fixed test classes discovery by skipping interfaces

* Include "optional" artifacts in dependency resolution if they exist

* `out/{module_name}` now added as a content root in generated IntelliJ project

[#0-1-4]
=== 0.1.4
_2018-03-04_


* Speed up Mill client initialization by another 50-100ms

* Speed up incremental ``assembly``s in the common case where upstream dependencies do not change.

* Make `ScalaJSModule#run` work with main-method discovery

* Make `ScalaWorkerModule` user-defineable, so you can use your own custom coursier resolvers when resolving Mill's own jars

* Simplify definitions of `SCM` strings

* Make the build REPL explicitly require `-i`/`--interactive` to run

* Log a message when Mill is initializing the Zinc compiler interface

[#0-1-3]
=== 0.1.3
_2018-02-26_


* Greatly reduced the overhead of evaluating Mill tasks, with a warm already-cached `mill dev.launcher` now taking ~450ms instead of ~1000ms

* Mill now saves compiled build files in `~/.mill/ammonite`, which is configurable via the `--home` CLI arg.

* Fixed linking of multi-module Scala.js projects

[#0-1-2]
=== 0.1.2
_2018-02-25_


* Mill now keeps a long-lived work-daemon around in between commands; this should improve performance of things like `compile` which benefit from the warm JVM.
You can use `-i`/`--interactive` for interactive consoles/REPLs and for running commands without the daemon

* Implemented the `ScalaModule#launcher` target for easily creating command-line launchers you can run outside of Mill

* `ScalaModule#docJar` no longer fails if you don't have `scala-compiler` on classpath

* Support for multiple `testFrameworks` in a test module.

[#0-1-1]
=== 0.1.1
_2018-02-19_


* Fixes for `foo.console`
* Enable Ammonite REPL integration via `foo.repl`

[#0-1-0]
=== 0.1.0
_2018-02-18_


* First public release

// end::changelogOld[]
