Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

MSRV & Features

Cargo features

FeatureDefaultEffect
json.json sources
toml.toml sources
yaml.yaml / .yml sources
watchstart_watch() and the file watcher
asyncload_async, init_async, changes, AsyncRemoteSource — no runtime dependency
tokioasync, plus tokio's blocking pool instead of a thread per load
clapbind_clap
schemaschema() — a JSON Schema for the config files
decryptDecryptor and set_decryptor, for a scheme of your own
agedecrypt, plus transparent decryption and encryption of age files
dotenvenv_files — a .env read as the environment layer
figmentSource::provider, and figment re-exported
tracingWatcher diagnostics via tracing instead of stderr
fullall of the above

Using a format, watch or tokio whose feature is off is a compile error naming the feature to add — not a runtime surprise on the one machine that reads YAML.

Minimum supported Rust version

ConfigurationMSRV
any format, tokio, tracing, dotenv, figment1.71
watch enabled1.85 (notify 8 requires it)
schema enabled1.74 (schemars requires it)
age enabled1.85 — measured, not declared (see below)
the companion crates (etcd, Consul, Vault, Firestore)1.85
dynamic-config-nats, -redis, -s31.88 (their clients require it)
dynamic-config-embedded1.83 (core::error::Error in no_std needs 1.81)

Only watch, schema and age raise the floor for the core crate; tokio does not.

age declares 1.74 for itself, and the figure above is 1.85 because that is what actually builds: age pulls rust-embed for its translations, which pulls sha2 0.11, which is edition 2024. The number here is the one the CI job verifies against a real toolchain, not the one a manifest claims. A companion pays for what it pulls in — a gRPC stack, a streaming client, an HTTP client — and the core stays where it is.

MSRV is treated as a breaking change, and both figures are verified in CI against the real toolchains.

Contributors: this repository sets resolver.incompatible-rust-versions = "fallback" in .cargo/config.toml. Without it, cargo resolves to the newest release of every transitive dependency and the floor silently becomes 1.85 — hashbrown 0.17, reached through toml, requires edition 2024. Generating the lockfile needs cargo 1.84 or newer.