@@ -12,107 +12,57 @@ endif::[]
12
12
_The changelog below is for tagged, stable releases. For unstable releases,
13
13
see the list at https://repo1.maven.org/maven2/com/lihaoyi/mill-dist_
14
14
15
- [#1-0-0-RC3 ]
16
- === 1.0.0-RC3
17
- _2025-07-01_
15
+ [#1-0-0]
16
+ === 1.0.0
17
+ _2025-07-10_
18
18
19
+ :version: 1.0.0
20
+ :milestone-name: 1.0.0
21
+ :milestone: 121
22
+ :prev-version: 1.0.0-RC3
19
23
20
- :version: 1.0.0-RC3
21
- :milestone-name: 1.0.0-RC3
22
- :milestone: 120
23
- :prev-version: 1.0.0-RC2
24
-
25
- 1.0.0-RC3 is likely to be the last RC before 1.0.0 final is cut
26
-
27
- Changes since 1.0.0-RC2
28
-
29
- * Improvements to Bash/Zsh tab-completion logic ({link-pr}/5296[#5296])
30
- * Improvements to BSP support ({link-pr}/5310[#5310])
31
- * Replace `Task.workspace` / `TaskCtx.workspace` with `BuildCtx.workspaceRoot` ({link-pr}/5322[#5322])
32
- * Fix `Task.Sources` customization in `./mill init` ({link-pr}/5325[#5325]), and add support
33
- for importing `.jvmopts` file ({link-pr}/5339[#5339])
34
- * Simplify configuration of JVM version ({link-pr}/5327[#5327])
35
- * Fix `./mill init` crasher on windows ({link-pr}/5330[#5330])
36
- * Add `--no-filesystem-checker` flag to globally disable filesystem read/write checks ({link-pr}/5278[#5278])
37
- * Rename `def defaultCommandName` to `def defaultTask` ({link-pr}/5405[#5405])
38
- * Consolidate `mill.define` and `mill.api` into a single `mill.api` namespace ({link-pr}/5407[#5407])
39
- * Re-organize `mill.scalalib` and `mill.javalib` packages ({link-pr}/5411[#5411])
40
-
41
- [#1-0-0-RC2]
42
- === 1.0.0-RC2
43
- _2025-06-12_
44
-
45
-
46
- :version: 1.0.0-RC2
47
- :milestone-name: 1.0.0-RC2
48
- :milestone: 119
49
- :prev-version: 1.0.0-RC1
50
-
51
- Changes since 1.0.0-RC1
52
-
53
- * Add support for Bash/Zsh tab-completion, installable via `./mill mill.tabcomplete/install`
54
- ({link-pr}/5279[#5279])
55
-
56
- * Better classloader re-use for improved performance when compiling Kotlin/Scala.js/Scala-Native
57
- modules ({link-pr}/5269[#5269])
58
-
59
- * Lots of BSP/Intellij/VSCode bugfixes ({link-pr}/5275[#5275], {link-pr}/5265[#5265],
60
- {link-pr}/5220[#5220], {link-pr}/5202[#5202], {link-pr}/5200[#5200])
61
-
62
- * Lots of error-reporting improvements ({link-pr}/52825[#5282], {link-pr}/5267[#5267],
63
- {link-pr}/5235[#5235], {link-pr}/5233[#5233], {link-pr}/5213[#5213])
64
-
65
-
66
- [#1-0-0-RC1]
67
- === 1.0.0-RC1
68
- _2025-05-25_
69
-
70
- :version: 1.0.0-RC1
71
- :milestone-name: 1.0.0-RC1
72
- :milestone: 118
73
- :prev-version: 0.12.14
74
-
75
- `1.0.0-RC1` is the first release candidate of the upcoming Mill 1.0.0 release. This is a major
76
- backwards incompatible release that aims to clean up years of technical debt, and build a strong
24
+ `1.0.0` is a major backwards incompatible release that fixes many long-standing
25
+ issues and aims to build a strong
77
26
technical foundation for the next few years of development. Any breakages or problems surfaced
78
27
by RC1 will be fixed in following RC releases, with the hope to release 1.0.0 final on 30 June
79
- 2025. For any questions or discussion about `1.0.0-RC1 `, please use the following thread:
28
+ 2025. For any questions or discussion about `1.0.0`, please use the following thread:
80
29
81
- - https://github.com/com-lihaoyi/mill/discussions/5189
30
+ - https://github.com/com-lihaoyi/mill/discussions/5497
82
31
83
- Any Mill plugins you use will need to be re-published for Mill 1.0.0-RC1 if you would like to
84
- try out the RC out in your builds, and re-published again for Mill 1.0.0 final (which may
85
- have further changes and be incompatible with the RC1)
32
+ Any third-party Mill plugins you use will need to be re-published for Mill 1.0.0 if you would
33
+ like to use them in your builds. Builtin functionality in `mill.*lib` packages or contrib
34
+ plugins in `mill.contrib` are available immediately
86
35
87
- We expect it will take some work from projects on Mill 0.12.x or earlier to migrate to 1.0.0-RC1 .
36
+ We expect it will take some work from projects on Mill 0.12.x or earlier to migrate to 1.0.0.
88
37
There are a lot of breaking changes in the release, but we hope that these breaking changes will
89
38
greatly simplify the Mill user experience going forward, and allow it to remain stable for more
90
39
years before further breaking changes are necessary. Updated docs are available on the Mill
91
- doc-site's `main-branch` tab :
40
+ doc-site:
92
41
93
- - https://mill-build.org/mill/main-branch/ index.html
42
+ - https://mill-build.org/mill/index.html
94
43
95
44
But for most people upgrading, the most relevant changes are listed in the changelog below:
96
45
97
- * NOTE: Mill 1.0.0-RC1 (and all other versions since 0.12.13) requires an updated bootstrap
98
- script in order to work, due to changes in Sonatype Central that forced a change in the
99
- download URLs for new releases going forward. To update your bootstrap script, you can use
46
+ * NOTE: Mill 1.0.0 (and all other versions since 0.12.13) requires an updated bootstrap
47
+ script in order to work, due to changes in the Sonatype Central package registry that
48
+ forced a change in the download URLs for new releases going forward. To update your
49
+ bootstrap script, you can use
100
50
101
51
```
102
52
# linux
103
- curl -L https://repo1.maven.org/maven2/com/lihaoyi/mill-dist/1.0.0-RC1 /mill-dist-1.0.0-RC1 -mill.sh -o mill
53
+ curl -L https://repo1.maven.org/maven2/com/lihaoyi/mill-dist/1.0.0/mill-dist-1.0.0-mill.sh -o mill
104
54
chmod +x mill
105
- echo 1.0.0-RC1 > .mill-version
55
+ echo 1.0.0 > .mill-version
106
56
107
57
# windows
108
- curl -L https://repo1.maven.org/maven2/com/lihaoyi/mill-dist/1.0.0-RC1 /mill-dist-1.0.0-RC1 -mill.bat -o mill.bat
109
- echo 1.0.0-RC1 > .mill-version
58
+ curl -L https://repo1.maven.org/maven2/com/lihaoyi/mill-dist/1.0.0/mill-dist-1.0.0-mill.bat -o mill.bat
59
+ echo 1.0.0 > .mill-version
110
60
```
111
61
112
62
==== Major Breaking Changes
113
63
114
64
* `build.mill` and `package.mill` files are now written in Scala 3.7.1 ({link-pr}/3369[#3369],
115
- see https://www.youtube.com/watch?v=Aos6vp81I7Q[bishabosha's talk at Scala.IO Paris]).
65
+ see https://www.youtube.com/watch?v=Aos6vp81I7Q[bishabosha's talk at Scala.IO Paris]).
116
66
Any third-party libraries used must be Scala 3 compatible (most already are). You may now
117
67
use Scala 3 language features such as https://docs.scala-lang.org/scala3/reference/other-new-features/indentation.html[Optional Braces]
118
68
in your `.mill` files
@@ -163,8 +113,7 @@ package build
163
113
164
114
165
115
* The `Agg()`/`Agg[T]` collection types have been removed and replaced by `Seq()`/`Seq[T]`
166
- ({link-pr}/4525[#4525]). Aliases were left in place to ease in the migration, but you
167
- should replace all usage of `Agg` with `Seq` and use `Seq` going forward
116
+ ({link-pr}/4525[#4525]):
168
117
169
118
170
119
```diff
@@ -195,12 +144,15 @@ package build
195
144
to a new `mill.define.BuildCtx` object that centralizes all these build-level APIs
196
145
({link-pr}/5142[#5142])
197
146
198
- * Many Task-related renamings in `mill.define`: `Target` -> `Task.Simple`, `TargetImpl` -> `Task.Computed`,
147
+ * Replaced `Task.workspace` / `TaskCtx.workspace` with `BuildCtx.workspaceRoot` ({link-pr}/5322[#5322])
148
+
149
+ * Many Task-related renamings in `mill.define`: `Target` -> `Task.Simple` (still aliased as the `T[_]` type),
150
+ `TargetImpl` -> `Task.Computed`,
199
151
`Worker` -> `Task.Worker`, `Command` -> `Task.Command`, `AnonImpl` -> `Task.Anon`, `InputImpl` -> `Task.Input`,
200
152
`SourcesImpl` -> `Task.Sources`, `SourceImpl` -> `Task.Sources` ({link-pr}/5168[#5168]).
201
153
202
154
* `mill.testkit.TestBaseModule` has been renamed `mill.testkit.TestRootModule` ({link-pr}/5143[#5143]),
203
- to make it clear it is meant to be the root of the module hierarchy
155
+ to make it clear it is meant to be the root of the module hierarchy, and not the class hierarchy
204
156
205
157
* The `T.*` methods have been removed. These were replaced by `Task.*` equivalents in 0.12.x.
206
158
@@ -213,20 +165,28 @@ package build
213
165
+ }
214
166
```
215
167
216
- * `def zincWorker`, `ZincWorkerModule`, and `ZincWorkerUtil` have been renamed to
168
+ * `def zincWorker`, `ZincWorkerModule`, and `ZincWorkerUtil` have been renamed to
217
169
`jvmWorker`, `JvmWorkerModule`, and `JvmWorkerUtil` {link-pr}/4834[#4834])
218
170
219
171
* `millSourcePath` has been renamed to `moduleDir`
220
172
221
173
* The terms `client`/`server` throughout the codebase have been renamed to `launcher`/`daemon` ({link-pr}/5135[#5135])
222
174
175
+ * Rename `def defaultCommandName` to `def defaultTask` ({link-pr}/5405[#5405])
176
+
177
+ * Consolidate `mill.define` and `mill.api` into a single `mill.api` namespace ({link-pr}/5407[#5407])
178
+
179
+ * Separate `mill.scalalib` and `mill.javalib` into two separate modules, with `scalalib`
180
+ depending on `javalib` but not vice versa. Most classes are left unchanged, although a few
181
+ were moved from `scalalib` to `javalib` as part of this refactor ({link-pr}/5411[#5411], {link-pr}/5469[#5469], {link-pr}/5470[#5470])
182
+
223
183
* `def test` has been renamed `def testForked` ({link-pr}/4577[#4577]). This allows you to distinguish
224
184
between running all modules named `test` (`./mill __.test`) and running all modules which are test suites
225
185
(`./mill __.testForked`) that may include `integration` tests modules or modules with other names
226
186
227
187
* Removed `PublishModule.publishSelfDependency` in favor of `artifactMetadata` ({link-pr}/5118[#5118])
228
188
229
- * `os.*` filesystem operations are now restricted by default:
189
+ * `os.*` filesystem operations are now restricted by default:
230
190
231
191
** During the execution phase, Task implementations can only write
232
192
to their own `.dest` folder, and only read from their own or upstream `.dest` folders
@@ -237,7 +197,8 @@ package build
237
197
** These restrictions are best effort guardrails to guide users towards best practices, and
238
198
are not intended to be a fully-hermetic sandbox. You can disable them via
239
199
`mill.define.BuildCtx.withFilesystemCheckerDisabled { ... }` if you need to do something
240
- outside of the sandbox and are sure you know what you are doing.
200
+ outside of the sandbox and are sure you know what you are doing, or pass the
201
+ `--no-filesystem-checker` flag to globally disable filesystem read/write checks
241
202
242
203
* `build.mill` files are now compiled with a minimized classpath containing only
243
204
the necessary APIs, without all of Mill's internal code on the classpath
@@ -252,22 +213,14 @@ package build
252
213
** `mill.resolve`, `mill.runner`, `mill.eval`, etc. are no longer on the classpath.
253
214
In general, a lot of Mill packages that were previously
254
215
on the classpath by happenstance have been removed, and only the core APIs you really
255
- need remain exposed under `mill.api`, `mill.define`, `mill. util`, and the various
256
- `mill.foolib` packages.
216
+ need remain exposed under `mill.api`, `mill.util`, and the various
217
+ `mill.foolib` packages. `mill.define` has been removed and its classes moved to `mill.api`
257
218
258
219
** Similarly, many third-party libraries that were on the Mill classpath by happenstance
259
220
have been removed, and others that are not intended for public use are present at runtime
260
221
but removed from the compile-time classpath so you cannot compile against them in your
261
222
`build.mill` code. You can re-include any third party libraries you need
262
- via the `//| mvnDeps: ` YAML header
263
-
264
- ** `mill.api`, `mill.define` and `mill.util` have been re-organized. Many classes have been
265
- moved around, so if your imports no longer compile you may need to try the other two packages
266
- to see where the class ended up.
267
-
268
- *** `mill.api` now contains `build.mill` code that has zero third-party dependencies
269
- *** `mill.define` contains the code used in `build.mill` that has dependencies
270
- *** `mill.util` contains code used in `build.mill` that is also used in other parts of Mill.
223
+ via the `//| mvnDeps: ` YAML build header
271
224
272
225
* Root modules in `build.mill` and `package.mill` files no longer need an explicit `extends RootModule`
273
226
superclass, as they can be identified unambiguously by the `object package` name, so
@@ -303,23 +256,30 @@ package build
303
256
304
257
* Mill's plugin infrastructure has changed with the release of Mill 1.0.0: plugins now need
305
258
to use Scala 3.7.0, should now depend on `mill-libs` rather than `mill-dist`, and integration
306
- and example tests should use a `MILL_LOCAL_TEST_OVERRIDE_CLASSPATH ` environment variable
259
+ and example tests should use `MILL_LOCAL_TEST_OVERRIDE_* ` environment variables
307
260
rather than the previous `mill/local-test-overrides` classpath resource. See the latest
308
261
documentation for how plugins are currently defined and published at
309
262
https://mill-build.org/mill/main-branch/extending/writing-plugins.html[Writing Mill Plugins]
310
263
311
264
* Mill's uPickle dependency has been updated from 3.3.1 to 4.2.1, which introduces some backwards
312
- incompatible changes to the serialized JSON output. This should only affect you if you are
265
+ incompatible changes to the serialized JSON output. This should only affect you if you are
313
266
processing Mill's `out` folder `.json` files via external tools
314
267
268
+ * Simplify configuration of JVM version, they are now configured by overriding `def jvmId`
269
+ directly on `JavaModule` or `ScalaModule` without needing to go through `def jvmWorker`
270
+ ({link-pr}/5327[#5327])
271
+
315
272
==== Other Changes
316
273
317
274
* Mill's bootstrap scripts now use the native launcher by the default, except for
318
- Windows-ARM which is not supported by the Graal tooling we used to build these native
319
- image. To use the JVM-based launcher, you need to explicitly use a `-jvm` suffix in
275
+ Windows-ARM which is not supported by the underlying Graal tooling. To use the
276
+ JVM-based launcher, you need to explicitly use a `-jvm` suffix in
320
277
your `.mill-version` file e.g. `1.0.0-jvm`. We expect this should be mostly transparent
321
278
and have no visible impact to users.
322
279
280
+ * Add support for Bash/Zsh tab-completion, installable via `./mill mill.tabcomplete/install`
281
+ ({link-pr}/5279[#5279], {link-pr}/5296[#5296])
282
+
323
283
* Mill's server-client model has been simplified, from having an elastic pool of JVM daemons
324
284
each connected to a single client at a time, to a single shared JVM that handles potentially
325
285
multiple client simultaneously ({link-pr}/5066[#5066]). This should result in reduced resource
@@ -344,7 +304,7 @@ object `package` extends Cross[FooModule]("3.6.2", "2.13.16") {
344
304
}
345
305
```
346
306
347
- * Mill now supports a `--offline` option to run in offline mode.
307
+ * Mill now supports a `--offline` option to run in offline mode.
348
308
Custom tasks that need to download remote resources should respect that mode via
349
309
the `Task.offline` API. ({link-pr}/4914[#4914])
350
310
@@ -362,8 +322,8 @@ object `package` extends Cross[FooModule]("3.6.2", "2.13.16") {
362
322
help mitigate problems we've seen in the past with long-lived Mill processes becoming
363
323
unstable or unresponsive ({link-pr}/5079[#5079], {link-pr}/5080[#5080], {link-pr}/5082[#5082])
364
324
365
- * Mill now uses uPickle 4.2.1, providing support for
366
- https://docs.scala-lang.org/sips/named-tuples.html[Scala 3.7.0 Named Tuples] :
325
+ * Scala 3.7 https://docs.scala-lang.org/sips/named-tuples.html[Scala 3.7.0 Named Tuples]
326
+ can be used as task return values :
367
327
368
328
```scala
369
329
import upickle.implicits.namedTuples.default.given
@@ -375,22 +335,42 @@ def namedTupleTask = Task {
375
335
* `def repositories: T[Seq[String]]` is now provided as a simpler alternative to
376
336
`def repositoriesTask`, making it easier to add the most common URL/file-based repositories
377
337
to your project. `repositoriesTask` still exists, but is now only necessary for
378
- more complex custom repository setups beyond the simple cases that `repositories` supports.
338
+ more complex custom repository setups beyond the simple cases that `repositories` supports
339
+ (see https://get-coursier.io/upcoming/reference-repositories/[Coursier Repositories Reference]
340
+ for documentation on what repository strings are supported).
341
+
342
+ * Fix `Task.Sources` customization in `./mill init` ({link-pr}/5325[#5325]), and add support
343
+ for importing `.jvmopts` file ({link-pr}/5339[#5339])
344
+
345
+ * Fix `./mill init` crasher on windows ({link-pr}/5330[#5330])
346
+
347
+ * Support for publishing `-SNAPSHOT` versions to Sonatype Central ({link-pr}/5489[#5489])
348
+
349
+ * Fix Sonatype Central publishing for users with multiple GPG keys ({link-pr}/5471[#5471])
350
+
351
+ * Fix `-Dfoo=bar` property passing when using Graal native image launcher ({link-pr}/5440[#5440])
352
+
353
+ * Added support for using https://pmd.github.io/[PMD] to lint Java modules ({link-pr}/5393[#5393])
354
+
355
+ * Improve multi-line terminal prompt, preserving the last-shown prompt when interrupted
356
+ via `Ctrl-C` ({link-pr}/5452[#5452]), and fix an issue with the last character on each line
357
+ missing in the output ({link-pr}/5336[#5336])
379
358
380
- * Lots of miscellaneous improvements:
359
+ * Many BSP support and IDE integration improvements, which should hopefully smoothen out
360
+ the process of using Mill from IDEs like IntelliJ and VSCode ({link-pr}/4851[#4851],
361
+ {link-pr}/4873[#4873], {link-pr}/4876[#4876], {link-pr}/4881[#4881], {link-pr}/4873[#4873],
362
+ {link-pr}/4940[#4940], {link-pr}/4941[#4941], {link-pr}/5275[#5275], {link-pr}/5265[#5265],
363
+ {link-pr}/5220[#5220], {link-pr}/5202[#5202], {link-pr}/5200[#5200], {link-pr}/5310[#5310])
381
364
382
- ** BSP support and IDE integration ({link-pr}/4851[#4851],{link-pr}/4873[#4873],
383
- {link-pr}/4876[#4876], {link-pr}/4881[#4881], {link-pr}/4873[#4873],
384
- {link-pr}/4940[#4940], {link-pr}/4941[#4941])
365
+ * Testing and enforcement to prevent Classloader and Thread leaks ({link-pr}/5079[#5079], {link-pr}/5082[#5082])
385
366
386
- ** Classloader and Thread leak prevention ({link-pr}/5079[#5079], {link-pr}/5082[#5082])
367
+ * Major improvements to Android Support ({link-pr}/4485[#4485], {link-pr}/4540[#4540], {link-pr}/4583[#4583],
368
+ {link-pr}/4626[#4626], {link-pr}/4759[#4759], {link-pr}/4892[#4892], {link-pr}/4947[#4947],
369
+ {link-pr}/5013[#5013], {link-pr}/5053[#5053])
387
370
388
- ** Android Support ({link-pr}/4485[#4485], {link-pr}/4540[#4540], {link-pr}/4583[#4583],
389
- {link-pr}/4626[#4626], {link-pr}/4759[#4759], {link-pr}/4892[#4892], {link-pr}/4947[#4947],
390
- {link-pr}/5013[#5013], {link-pr}/5053[#5053])
371
+ * Major improvements to Kotlin Support in Mill, which is now marked as stable ({link-pr}/4557[#4557],
372
+ {link-pr}/4786[#4786], {link-pr}/4771[#4771], {link-pr}/4779[#4779], {link-pr}/4797[#4797], {link-pr}/4963[#4963])
391
373
392
- ** Kotlin Support ({link-pr}/4557[#4557], {link-pr}/4786[#4786], {link-pr}/4771[#4771],
393
- {link-pr}/4779[#4779], {link-pr}/4797[#4797], {link-pr}/4963[#4963])
394
374
395
375
[#0-12-14]
396
376
=== 0.12.14
0 commit comments