See the configuration surface

Version 0.9.1 Updated Sep 04, 2026

Different sources suit different moments. Start with durable team settings in .acme.toml:

host = "0.0.0.0"
port = 9000
log_level = "debug"

At deployment time, an environment variable can change the host without rewriting the file. For a one-off run, a CLI option can change the port again:

$ ACME_HOST=api.internal cargo run -- --port 3000
host=api.internal port=3000 log_level=debug

The result shows all three surfaces working together: log_level comes from TOML, ACME_HOST supplies host, and --port wins for port. The command uses POSIX shell syntax; in PowerShell, set $env:ACME_HOST = "api.internal" before running the same Cargo command.

TOML is available by default. Enable the yaml or json5 crate feature when those formats are a better fit for application users; the file-format section covers the details.

By default, discovery checks an explicit --config-path, the ACME_CONFIG_PATH environment variable, project and home dotfiles, and the platform configuration directory. Explicitly requested files are required: a missing --config-path is an error rather than a silent fallback.

TOML naturally handles lists and nested values. For example, an application could add workers: Vec<Worker> and labels: BTreeMap<String, String> to its configuration struct, then use:

[[workers]]
name = "queue-a"
concurrency = 4

[[workers]]
name = "queue-b"
concurrency = 2

[labels]
region = "eu-west"
tier = "worker"

For vectors, merge_strategy = "append" appends higher-precedence values; merge_strategy = "replace" replaces the collection. Use merge_strategy = "keyed" for keyed collection merging. Choose the policy deliberately when operators may combine file, environment, and CLI values.

Configuration files can also contain extends entries. Relative paths are resolved from the file that declares them, and parent layers are merged before the child. OrthoConfig reports a missing parent with its absolute path and the referencing file so the failure is actionable.