TOML reference
Every key accepted by Curie.toml, with its type, default value, and whether it can be declared in a workspace root and inherited by members.
Keys marked W in the Inherited column are workspace-inheritable: declare them in the root Curie.toml and every member picks them up. A member that declares the same key overrides the inherited value (for scalar fields) or merges with it (for maps — member entries take precedence on collision).
[application] / [library] / [bom]
Exactly one of these sections must appear in every non-workspace Curie.toml. A workspace root has [workspace] and none of these.
| Key | Type | Required | Default | Notes |
|---|---|---|---|---|
name | string | Yes | — | Base name of the output JAR; Docker image name default |
version | string | Yes | — | Embedded in the JAR filename and MANIFEST.MF |
mainClass | string | No | Auto-detected | [application] only. Must be set when more than one main class exists |
groupId | string | No | — | Required for curie publish and SBOM metadata |
[workspace]
Required in a workspace root; absent in member projects.
| Key | Type | Required | Default | Notes |
|---|---|---|---|---|
members | (string | table)[] | Yes | — | Member entries: plain strings for local dirs, or { path, git, branch? } tables for Git-sourced members. See Git members. |
missingMembers | string | No | "clone" | "clone" auto-clones missing Git members; "error" fails with a manual instruction |
[java]
Controls Java compilation. Workspace-inheritable — a root-level [java] block applies to every member that does not declare its own.
| Key | Type | Inherited | Default | Notes |
|---|---|---|---|---|
releaseVersion | string | W | Running JDK | Passed to javac --release. Omit to target the running JDK's version automatically |
enablePreview | bool | W | false | Adds --enable-preview to javac and the test JVM. When no releaseVersion is set, Curie supplies --release <running-jdk> as required by javac |
[kotlin]
Enables Kotlin compilation. Only needed when .kt source files are present. Workspace-inheritable.
| Key | Type | Inherited | Default | Notes |
|---|---|---|---|---|
version | string | W | — | Kotlin compiler and stdlib version. Required when Kotlin sources are present |
[groovy]
Enables Groovy compilation. Workspace-inheritable.
| Key | Type | Inherited | Default | Notes |
|---|---|---|---|---|
version | string | W | — | Groovy version used for compilation and the Spock framework |
[spock]
Configures Spock Framework integration. Workspace-inheritable.
| Key | Type | Inherited | Default | Notes |
|---|---|---|---|---|
enabled | bool | W | false | Add org.spockframework:spock-core to the test classpath. A member can set false to opt out of a workspace-inherited true |
version | string | W | — | Spock version; required when enabled = true |
[test]
Controls test execution. Workspace-inheritable.
| Key | Type | Inherited | Default | Notes |
|---|---|---|---|---|
junitPlatformVersion | string | W | 6.0.3 | Version of JUnit Platform Console Standalone used to run tests |
coverage | bool | W | false | Enable JaCoCo coverage instrumentation. Produces a report under target/coverage/ (open html/index.html). See Code coverage |
[dependencies] / [test-dependencies]
Maps of "group:artifact" to a version string or inline table. Not workspace-inheritable — each member declares its own dependencies.
[dependencies] "com.fasterxml.jackson.core:jackson-databind" = "2.17.2" "net.shibboleth.oidc:oidc-common" = { version = "3.3.0", repository = "shibboleth" } "com.google.guava:guava" = { version = "", exclusions = ["com.google.guava:listenablefuture"] } [test-dependencies] "org.assertj:assertj-core" = "3.26.0"
| Inline key | Type | Notes |
|---|---|---|
version | string | Empty string "" defers to a BOM import |
repository | string | ID of a [[repositories]] entry; routes this artifact to that repo |
exclusions | string[] | Transitive artifacts to drop, as "group:artifact" coordinates |
[bom-imports] / [test-bom-imports]
BOM imports for version management. Workspace-inheritable — member entries are merged in and take precedence on collision.
[bom-imports] "com.fasterxml.jackson:jackson-bom" = "2.17.2" [test-bom-imports] "org.junit:junit-bom" = "5.11.0"
[annotation-processors] / [test-annotation-processors]
Processors placed on the annotation processor path during compilation. Workspace-inheritable — member entries are merged in and take precedence on collision.
[annotation-processors] "org.projectlombok:lombok" = "1.18.32" "com.google.auto.value:auto-value" = { version = "1.11.0", on-compile-classpath = true } [test-annotation-processors] "com.example:test-proc" = "1.0.0"
| Inline key | Type | Notes |
|---|---|---|
version | string | Empty string defers to a BOM import |
on-compile-classpath | bool | Also place on the regular compile classpath — required by Lombok and some other processors whose annotations must be visible to javac |
[[repositories]]
Additional Maven repositories. Array of tables; workspace-inheritable (member entries are appended). Maven Central is always included and does not need to be declared.
| Key | Type | Required | Notes |
|---|---|---|---|
id | string | Yes | Unique identifier; referenced by repository = "id" in dependency entries |
url | string | Yes | Base URL of the repository |
[workspace-dependencies]
Declares intra-workspace dependencies. Each key is a logical name; the value is an inline table with a path pointing to another workspace member.
[workspace-dependencies] core = { path = "../core" } utils = { path = "../utils" }
[docker]
Enables container image building. Activated by the section's presence or by a Dockerfile at the project root. Default builder is daemonless (Jib-style OCI assembly, no Docker daemon). See Docker docs.
| Key | Type | Default | Notes |
|---|---|---|---|
builder | string | daemonless | daemonless (default) or docker (alias daemon). A project-root Dockerfile always forces docker. |
baseImage | string | eclipse-temurin:21-jre-alpine, or debian:trixie-slim when [native-image]/[jlink] is enabled | Base image (name:tag or name@sha256:…) |
imageName | string | application.name | Image name |
imageTag | string | application.version | Image tag |
platform | string | linux/amd64 | Platform selected from multi-arch base indexes (daemonless only) |
jvmArgs | string[] | [] | JVM flags in the entrypoint (daemonless only) |
env | table | {} | Environment variables in the image config (daemonless only) |
labels | table | {} | OCI labels (daemonless only) |
user | string | — | Container user (daemonless only) |
registryId | string | — | [[credentials]] id for registry auth (daemonless only) |
tags | string[] | [] | Extra tags (daemonless only; reserved for push) |
[native-image]
GraalVM native-image compilation.
| Key | Type | Default | Notes |
|---|---|---|---|
outputName | string | application.name | Name of the produced native binary |
configDir | string | — | Directory containing native-image configuration files (reflect-config.json, etc.) |
extraArgs | string[] | [] | Extra flags passed to native-image, e.g. ["--no-fallback"] |
[jlink]
Self-contained JDK runtime image assembled with the plain JDK's own jlink tool (no GraalVM).
| Key | Type | Default | Notes |
|---|---|---|---|
modules | string[] | [] | JDK modules to link in. Empty ⇒ auto-detected via jdeps --print-module-deps against the built JAR |
stripDebug | bool | false | Strip debug information from the runtime image (jlink --strip-debug) |
compress | bool | false | Compress runtime image resources (--compress zip-6 when true, --compress zip-0 when false) |
outputName | string | application.name | Name of the launcher script written to target/runtime/bin/ |
[fat-jar]
Enables fat JAR (uber JAR) packaging — all dependency classes merged into a single JAR.
| Key | Type | Default | Notes |
|---|---|---|---|
enabled | bool | false | When true, extracts dependency JARs and merges them into the output JAR. The Class-Path manifest entry is omitted |
[build-info]
Controls embedding of git metadata in the JAR.
| Key | Type | Default | Notes |
|---|---|---|---|
enabled | bool | true | When true and the project is inside a git repo, embeds META-INF/build-info.properties containing git.commit.id. Suffixed with -dirty if there are uncommitted changes |
[publish]
Controls curie publish — publishing artifacts to a Maven repository.
| Key | Type | Required | Notes |
|---|---|---|---|
repository | string | Yes | ID of a [[repositories]] entry to publish to |
sign | bool | No | Sign artifacts with GPG before publishing |
description | string | No | Human-readable description embedded in the POM |
homepage | string | No | Project URL embedded in the POM |
licenses | string[] | No | SPDX license identifiers, e.g. ["Apache-2.0"] |
developers | object[] | No | Each entry has id, name, and email string fields |
[maven]
Controls curie maven sync — generating a pom.xml from Curie.toml. See Maven sync for full details.
| Key | Type | Default | Notes |
|---|---|---|---|
pinTransitive | bool | false | When true, resolves the full transitive closure and emits every version into <dependencyManagement> so Maven's version mediation cannot diverge from Curie's resolver |
[modules]
Java Platform Module System (JPMS) configuration. See JPMS for full details.
| Key | Type | Default | Notes |
|---|---|---|---|
enabled | bool | false | Enables JPMS mode. Requires a module-info.java at the source root |
[plugins.*]
Declares Maven plugins for use with curie maven sync. Each sub-key is a group:artifact coordinate for a Maven plugin. See Plugins and Maven sync for details.