Mill: A fast JVM build tool for Java and Scala
Overall impressions of Mill
- Many are excited about a faster, type-safe JVM build tool and like Mill’s “tasks as pure functions” model with caching and parallelism.
- Some report very positive real-world use, especially compared to Maven/Gradle/SBT.
- Others tried Mill and struggled to get even basic Java builds working, concluding Java support and documentation were (at that time) immature.
JVM build pain vs. Go/Rust/JS
- A recurring theme: JVM build tooling (especially Gradle, Maven, Kotlin Multiplatform) is seen as unusually complex and slow compared to Go (
go build/go test), Rust (cargo), and even npm. - Publishing JVM artifacts (Maven Central, signing, CI, multiplatform) is described as days of work vs minutes for source-based ecosystems.
- Some counter that Maven “just works” for many use cases, especially inside companies using internal repositories, and that JS tooling often devolves into fragile ad‑hoc scripts.
Configuration language & typing
- Mill uses Scala as its configuration language; supporters argue this gives real types, IDE support, discoverability, and avoids “half-baked DSLs” embedded in XML/YAML.
- Critics dislike having to learn Scala just to build Java, and worry about version mismatches between build-language compiler and project code (as with Gradle+Kotlin).
- Broader debate: general-purpose languages vs “config languages” (Starlark, CUE, Pkl) and whether static typing meaningfully helps in small scripts vs large, evolving build logic.
Performance & dependency resolution
- Mill claims large speedups over Maven and Gradle; some agree JVM compilers aren’t the bottleneck, others say incremental performance vs tools like sbt is mixed.
- Mill uses Coursier for dependency resolution, which several posters say is dramatically faster than Maven/Gradle’s resolvers.
- There is skepticism about daemon-based designs but acknowledgment they are key to perceived speed.
Comparisons to other build tools
- Gradle is widely criticized for complexity, poor docs, plugin/version hell, and fragile old builds; Kotlin DSL is seen by some as marginally better than Groovy, others as missing the point.
- Maven is praised for declarative simplicity and longevity, but criticized for XML verbosity, slow resolution, and limited extensibility.
- Bazel is respected for sound fundamentals but described as extremely hard to adopt, with setup efforts measured in “person‑years”; Mill is positioned as a lighter-weight alternative.
Ecosystem, UX, and future
- Requests include better Java-first onboarding, zero-config “go-style” workflows, clearer comparisons against modern Gradle/Kotlin and Bazel, and stable 1.0 semantics.
- Mill’s extensibility (new language support in ~100 LOC, bounties for integrations like Python/Quarkus) is seen as promising but not yet broadly proven.