Research project · v0.1

A build tool for the JVM, distilled to its stable isotope.

Curie is a fast, minimal build tool for Java and Kotlin projects, written in Rust. One Curie.toml file replaces hundreds of lines of POM XML or Gradle DSL — and the binary starts in milliseconds, not seconds.

~20 lines of config
parallel downloads
SHA-256 verified by default
The toolkit

Eight elements. One build tool.

Every feature you'd expect from a modern build system — and nothing you wouldn't. Click any element for details.

A complete build

One file in. A signed JAR out.

Curie.toml
# Everything Curie needs to build a Jackson-using app.
[application]
name      = "greeter"
version   = "0.1.0"
mainClass = "com.example.Greeter"

[dependencies]
"com.fasterxml.jackson.core:jackson-databind" = "2.17.2"

[test-dependencies]
"org.junit.jupiter:junit-jupiter" = "5.11.0"
$ curie build
Building greeter v0.1.0
  Resolve deps    3 JAR(s)
  Compile         1 source file(s)  [no class files]
  Compile tests   1 source file(s)
  Tests           ✔ 4 tests successful
  Package         greeter-0.1.0.jar
  Done            target/greeter-0.1.0.jar
Where it fits

Maven and Gradle, condensed.

Curie Maven Gradle
Configuration Curie.toml (~20 lines) pom.xml (100+ XML) build.gradle DSL
Startup Native binary — instant JVM cold start (~1–2 s) JVM + daemon
Incremental builds Built-in Plugin-dependent Built-in (complex)
Reproducible output Yes, default Extra plugin Extra plugin
Checksum verification SHA-256, default Extra config Extra config
Docker support First-class External plugin External plugin
Multi-module One workspace Curie.toml Aggregator POM + per-module settings.gradle + per-module
Workspaces

A monorepo in 12 lines.

Curie inherits Cargo's workspace model. Declare members, share BOM imports and Java version once, build in topological order with a single command.

./Curie.toml — workspace root
[workspace]
members = ["app", "core", "utils"]

[java]
sourceCompatibility = "21"

[bom-imports]
"com.fasterxml.jackson:jackson-bom" = "2.17.2"

[test-bom-imports]
"org.junit:junit-bom" = "5.11.0"
$ curie build
Workspace . build (3 members)

[1/3] utils
[2/3] core
[3/3] app
  Resolve deps    7 JAR(s)
  Compile         12 source file(s)
  Tests           ✔ 27 tests successful
  Done            target/app-0.1.0.jar
Design pillars

Built on three principles.

01 — fast

Compiled, parallel, incremental.

Curie is a native binary that starts in milliseconds. Dependency downloads run on eight parallel threads. Recompilation is gated by per-source class manifests and an mtime check that's tied to your JDK version — change the JDK, get a clean rebuild for free.

02 — verifiable

SHA-256 by default. Reproducible by default.

Every artifact pulled from Maven Central is checksum-verified on download. The sidecar hash is cached locally and re-checked on every build — your ~/.m2 is now a tamper-evident store. Outputs are deterministic: re-run a build with the same inputs, get a byte-identical JAR.

03 — minimal

One file, no plugins, no DSL.

Curie.toml is a flat, declarative TOML document. There are no lifecycle phases to memorise, no task graph, no extension points to learn. If a feature isn't in the core binary, it's not in Curie. The complexity ceiling is low on purpose.

04 — polyglot

Java and Kotlin in the same project.

Drop a .kt file next to your .java files — Curie detects it, resolves the Kotlin compiler from Maven Central, and runs a two-phase compile (kotlinc → javac) so Java sees Kotlin types and vice versa. Auto-detects your main entry point in either language.

Status

Research project — and shipping.

Curie is an experiment in what a Java build tool looks like if it starts from Cargo's conventions instead of Maven's. The core build pipeline works end-to-end — resolve, compile, test, package, optionally containerise — and is in active development.