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.