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.
Every feature you'd expect from a modern build system — and nothing you wouldn't. Click any element for details.
# 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"
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
| 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 |
Curie inherits Cargo's workspace model. Declare members, share BOM imports and Java version once, build in topological order with a single command.
[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"
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
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.
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.
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.
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.
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.