Reference · Curie.toml

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.

KeyTypeRequiredDefaultNotes
namestringYesBase name of the output JAR; Docker image name default
versionstringYesEmbedded in the JAR filename and MANIFEST.MF
mainClassstringNoAuto-detected[application] only. Must be set when more than one main class exists
groupIdstringNoRequired for curie publish and SBOM metadata

[workspace]

Required in a workspace root; absent in member projects.

KeyTypeRequiredDefaultNotes
members(string | table)[]YesMember entries: plain strings for local dirs, or { path, git, branch? } tables for Git-sourced members. See Git members.
missingMembersstringNo"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.

KeyTypeInheritedDefaultNotes
releaseVersionstringWRunning JDKPassed to javac --release. Omit to target the running JDK's version automatically
enablePreviewboolWfalseAdds --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.

KeyTypeInheritedDefaultNotes
versionstringWKotlin compiler and stdlib version. Required when Kotlin sources are present

[groovy]

Enables Groovy compilation. Workspace-inheritable.

KeyTypeInheritedDefaultNotes
versionstringWGroovy version used for compilation and the Spock framework

[spock]

Configures Spock Framework integration. Workspace-inheritable.

KeyTypeInheritedDefaultNotes
enabledboolWfalseAdd org.spockframework:spock-core to the test classpath. A member can set false to opt out of a workspace-inherited true
versionstringWSpock version; required when enabled = true

[test]

Controls test execution. Workspace-inheritable.

KeyTypeInheritedDefaultNotes
junitPlatformVersionstringW6.0.3Version of JUnit Platform Console Standalone used to run tests
coverageboolWfalseEnable 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.

Curie.toml
[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 keyTypeNotes
versionstringEmpty string "" defers to a BOM import
repositorystringID of a [[repositories]] entry; routes this artifact to that repo
exclusionsstring[]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.

Curie.toml
[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.

Curie.toml
[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 keyTypeNotes
versionstringEmpty string defers to a BOM import
on-compile-classpathboolAlso 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.

KeyTypeRequiredNotes
idstringYesUnique identifier; referenced by repository = "id" in dependency entries
urlstringYesBase 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.

app/Curie.toml
[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.

KeyTypeDefaultNotes
builderstringdaemonlessdaemonless (default) or docker (alias daemon). A project-root Dockerfile always forces docker.
baseImagestringeclipse-temurin:21-jre-alpine, or debian:trixie-slim when [native-image]/[jlink] is enabledBase image (name:tag or name@sha256:…)
imageNamestringapplication.nameImage name
imageTagstringapplication.versionImage tag
platformstringlinux/amd64Platform selected from multi-arch base indexes (daemonless only)
jvmArgsstring[][]JVM flags in the entrypoint (daemonless only)
envtable{}Environment variables in the image config (daemonless only)
labelstable{}OCI labels (daemonless only)
userstringContainer user (daemonless only)
registryIdstring[[credentials]] id for registry auth (daemonless only)
tagsstring[][]Extra tags (daemonless only; reserved for push)

[native-image]

GraalVM native-image compilation.

KeyTypeDefaultNotes
outputNamestringapplication.nameName of the produced native binary
configDirstringDirectory containing native-image configuration files (reflect-config.json, etc.)
extraArgsstring[][]Extra flags passed to native-image, e.g. ["--no-fallback"]

Self-contained JDK runtime image assembled with the plain JDK's own jlink tool (no GraalVM).

KeyTypeDefaultNotes
modulesstring[][]JDK modules to link in. Empty ⇒ auto-detected via jdeps --print-module-deps against the built JAR
stripDebugboolfalseStrip debug information from the runtime image (jlink --strip-debug)
compressboolfalseCompress runtime image resources (--compress zip-6 when true, --compress zip-0 when false)
outputNamestringapplication.nameName 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.

KeyTypeDefaultNotes
enabledboolfalseWhen 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.

KeyTypeDefaultNotes
enabledbooltrueWhen 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.

KeyTypeRequiredNotes
repositorystringYesID of a [[repositories]] entry to publish to
signboolNoSign artifacts with GPG before publishing
descriptionstringNoHuman-readable description embedded in the POM
homepagestringNoProject URL embedded in the POM
licensesstring[]NoSPDX license identifiers, e.g. ["Apache-2.0"]
developersobject[]NoEach 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.

KeyTypeDefaultNotes
pinTransitiveboolfalseWhen 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.

KeyTypeDefaultNotes
enabledboolfalseEnables 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.