Docs

Curie, end to end.

Curie's surface area is intentionally small — a single binary, a single config file. The docs below cover each subsystem you'll hit as your project grows, from the first compile to publishing a release and auditing it for vulnerabilities.

Where to start

If you haven't built anything yet, run through Get started first. It takes about five minutes and leaves you with a working JAR you can run. Once that's clicking, the topics below dive into each piece.

Topics

Language support

01

Java

Default language — no config needed. Two source layouts (flat-package and Maven), Java version via [java], main-class scanning, instance main methods, annotation processors.

02

Kotlin

Auto-detected .kt sources, two-phase Kotlin/Java compile, automatic Kotlin main-class detection, stale-class cleanup.

03

Groovy & Spock

Auto-detected .groovy sources, joint Java/Groovy compilation via FileSystemCompiler, Spock 2.x test specs discovered and run through JUnit Platform.

Project types

04

Application

Compiles sources, runs tests, packages a JAR with embedded classpath manifest. Optional Docker image and GraalVM native binary. Full Curie.toml reference.

05

Library

Produces a plain JAR for use as a dependency. No main class, no Docker. Publishable to Maven repositories. Works as a workspace member with [workspace-dependencies].

06

Workspaces

Multi-module projects under one root Curie.toml. Topo-sorted builds, inherited BOM imports, shared Java version.

07

BOM projects

Author and publish a Maven Bill of Materials with [bom]. curie build produces a .pom with <packaging>pom</packaging> and a <dependencyManagement> block.

Build & test

08

Incremental builds

The mtime check, the JDK fingerprint, the per-source class manifest the wrapper emits, and how all three combine into a precise rebuild gate.

09

Adding dependencies

Declare [dependencies] and [bom-imports] by hand, or use curie add to resolve the latest version and write the entry automatically. curie remove cleans up.

10

Resolver & checksums

Breadth-first transitive resolution with nearest-wins conflict rules, parallel JAR downloads, .sha256 sidecar verification, offline mode, mirrors, and per-artifact repository routing.

11

Testing

JUnit 5 platform console runner with configurable version, co-located *Test.java/*Spec.java and top-level tests/ integration sources, optional filter argument.

12

Resource filtering

Opt-in variable substitution over resources with the collision-safe @var@ delimiter, independent [resources]/[test-resources] scopes, chained pluggable engines, per-file include/exclude, and binary safety.

13

Plugins

Extend the build with external source generators. Any binary named curie-<name> on PATH is activated via [plugin.<name>]. Curie handles staleness, artifact downloading, and source-root wiring.

Deploy

14

Docker

Generated layer-friendly Dockerfile + .dockerignore, eclipse-temurin JRE base by default, configurable baseImage, dep JARs in their own cached layer.

15

Publishing

curie publish generates a POM, sources jar, javadoc jar, and GPG signatures, then uploads everything via HTTP PUT to any Maven 2-layout repository.

16

GraalVM native-image

curie native compiles the project to a standalone native binary using GraalVM's native-image tool. Configure reachability metadata, output name, and extra flags via [native-image].

Tools

17

Formatter

curie fmt runs palantir-java-format (Java) and ktfmt (Kotlin) in one command. --check mode for CI; workspace fan-out shares one resolved classpath across all members.

18

Dependency tree

curie deps prints the full transitive tree. --why org.foo:bar explains which path introduced an artifact and why nearest-wins chose its version.

19

Audit (SBOM)

curie audit emits a CycloneDX 1.6 SBOM and cross-references every artifact against the OSV vulnerability database, printing findings grouped by artifact with ANSI-coloured severity.

20

Scaffolding

curie new app|lib|bom <name> generates a ready-to-build project skeleton in one command. curie init does the same in the current directory.

21

Build Inspect

Terminal UI for browsing build logs across an entire workspace. Drill into per-test output, grep log content with live highlights, filter by member name, and reload without restarting.

22

Maven sync

curie maven sync generates a pom.xml from Curie.toml so mvn verify matches curie build — for IDEs, CI, and incremental migration. [maven] sync = true keeps it regenerated automatically.

Examples

All examples live in the examples/ directory and build end-to-end with curie build.

ExampleWhat it shows
proto-greeterPlugin framework — curie-protobuf generates Java stubs from .proto files before compilation
openapi-greeterPlugin framework — curie-openapi generates Java model classes from an OpenAPI 3 spec
hello-worldFlat-package source layout — src/com.example/HelloWorld.java
simplified-mainInstance main methods (Java 21+ preview) — bare void main() with no class or package
json-greeterFlat-package layout with a Jackson dependency
string-utilsLibrary — flat-package, co-located unit tests and separate tests/ integration tests
maven-string-utilsLibrary — Maven layout (src/main/java/ + src/test/java/)
string-utils-cliApplication with [workspace-dependencies] on a sibling library
jackson-bom-greeterBOM imports inherited from the workspace root
hello-kotlinKotlin sources — Maven layout, auto-detected main class
hello-mixedMixed Java + Kotlin in a single flat-package directory
groovy-greeterGroovy language support — joint Java/Groovy compilation
spock-demoSpock 2.x test specs run through JUnit Platform
lombok-greeterAnnotation processors — Lombok with on-compile-classpath = true
auto-value-demoAnnotation processors — Google AutoValue generates immutable value classes
graalvm-helloGraalVM native-image compilation — [native-image] configuration
spring-boot-demoProduction-quality Spring Boot 3 app — REST API, JPA, Spring Security
google-mirror-demoRepository mirror — route Maven Central downloads through a mirror
shibboleth-demoPer-dependency repository selection — artifact served from a custom registry
add-remove-democurie add and curie remove — managing dependencies from the CLI
publish-democurie publish — JAR + sources + javadoc + POM + GPG signatures via HTTP PUT
my-platform-bomBOM project — [bom] section produces a .pom with <dependencyManagement>
nested-workspace-demoNested workspaces — three levels of workspace nesting
verbose-test-demoHigh-volume test output (~20k lines) — exercises curie inspect's virtualized log renderer

Reference

The Resolver page lists every TOML key in the dependency section. Workspaces covers the inheritance rules. If something isn't documented, treat it as not yet stable — Curie is a research project and the surface area is intentionally small until each piece has had time to settle.

Source & issues

The codebase lives on GitHub. Issues, design discussions, and merge requests are all welcome.