Get started · 5 min

Your first build with Curie.

Install the binary, drop in a Curie.toml, and run curie build. That's the whole onboarding.

1. Prerequisites

  • JDK 21 or newer on PATH — Curie shells out to javac.
  • Cargo, if you're building Curie from source. Pre-built binaries land on the GitHub releases page.

2. Install

From source (until the first release is cut):

shell
$ git clone https://github.com/example/curie.git
$ cd curie
$ cargo install --path curie-build
$ curie --version
curie 0.1.0

3. Create a project

Anywhere on disk, lay out:

tree
hello/
├── Curie.toml
└── src/
    └── com.example/
        └── Hello.java

Curie.toml describes the build target. The flat-package layout (src/com.example/...) keeps the source tree shallow — the directory name is the package.

Curie.toml
[application]
name      = "hello"
version   = "0.1.0"
mainClass = "com.example.Hello"
src/com.example/Hello.java
package com.example;

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, Curie.");
    }
}

4. Build

$ curie build
Building hello v0.1.0
  Compile         1 source file(s)  [no class files]
  Tests           no test sources found
  Package         hello-0.1.0.jar
  Done            target/hello-0.1.0.jar

A second run with no edits short-circuits — every step prints up to date and exits in milliseconds.

5. Run it

$ curie run --no-docker
  Compile         up to date
  Package         up to date
Hello, Curie.

Or run the JAR directly: java -jar target/hello-0.1.0.jar.

6. Add a dependency

Open Curie.toml and add a [dependencies] table. Curie resolves from Maven Central, verifies the SHA-256 sidecar, and caches under ~/.m2/repository — the same layout Maven uses.

Curie.toml
[application]
name      = "hello"
version   = "0.1.0"
mainClass = "com.example.Hello"

[dependencies]
"com.fasterxml.jackson.core:jackson-databind" = "2.17.2"
On the next build you'll see Resolve deps  3 JAR(s) as Jackson and its transitive closure are fetched in parallel, checksum-verified, and put on the classpath. Subsequent builds verify the cached files against their .sha256 sidecars with zero network calls.

Next steps