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[] | Yes | — | Relative paths to member directories, each containing its own Curie.toml |
[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 target/jacoco.exec and an HTML report |
[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 Docker image building. The section is activated by its presence or by a Dockerfile at the project root.
| Key | Type | Default | Notes |
|---|---|---|---|
baseImage | string | eclipse-temurin:21-jre-alpine | Base image for the generated Dockerfile |
imageName | string | application.name | Docker image name |
imageTag | string | application.version | Docker image tag |
[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"] |
[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.