Installation
Install the Curie binary, keep it up to date, and configure shell completions.
Prerequisites
- JDK 21 or newer on
PATH— Curie shells out tojavac. - Cargo (from rustup) — required for the install methods below.
Install via Cargo
Curie is published on crates.io. Cargo pulls the sources, builds a release binary, and drops it on your PATH:
$ cargo install curie-build $ curie --version curie 0.6.0
Upgrading
Re-run the install command with --force to upgrade to the latest release. To pin to a specific version, pass --version:
$ cargo install curie-build --force $ cargo install curie-build --version 0.5.0
Build from source
Clone the repository and install from the workspace. This is useful when contributing to Curie or testing unreleased changes:
$ git clone https://github.com/atteo/curie-build.git $ cd curie-build $ cargo install --path curie-build
Shell completions
Run curie setup to automatically detect your shell and install the matching completion script:
$ curie setup
Shell fish
Downloading https://raw.githubusercontent.com/atteo/curie-build/<commit>/completions/curie.fish
Installed /home/you/.config/fish/completions/curie.fish
Open a new terminal, or run: source /home/you/.config/fish/completions/curie.fish
The script is downloaded at the exact commit matching your installed binary, so it always reflects the correct subcommands and flags. Override shell detection with --shell:
$ curie setup --shell zsh
Alternatively, copy the scripts manually from the completions/ directory of the repository:
fish (manual)
$ cp completions/curie.fish ~/.config/fish/completions/
bash (manual)
$ cp completions/curie.bash ~/.local/share/bash-completion/completions/curie
zsh (manual)
$ mkdir -p ~/.zsh/completions $ cp completions/curie.zsh ~/.zsh/completions/_curie
Add to ~/.zshrc if not already present, then open a new terminal:
fpath=(~/.zsh/completions $fpath) autoload -Uz compinit && compinit
Creating a project manually
The scaffolding commands (curie new, curie init) are the recommended way to start a project. If you prefer to lay out files by hand, Curie expects this structure:
hello/
├── Curie.toml
└── src/
└── com.example/
└── Hello.java
The flat-package layout (src/com.example/...) keeps the source tree shallow — the directory name is the package. Maven-style layout (src/main/java/com/example/) is equally supported; both can coexist in the same project.
[application] name = "hello" version = "0.1.0" mainClass = "com.example.Hello"
package com.example; public class Hello { public static void main(String[] args) { System.out.println("Hello, Curie."); } }