figue

figue builds typed configuration from CLI arguments, environment variables, config files, and code defaults.

It uses Facet metadata to derive the shape of your configuration type, then applies layers in a predictable order: CLI arguments override environment variables, environment variables override config files, and config files override defaults.

rust
use facet::Facet;
use figue as args;

#[derive(Facet)]
struct Config {
    #[facet(args::positional)]
    path: String,

    #[facet(args::named, args::short = 'v')]
    verbose: bool,
}

let config: Config = figue::from_slice(&["--verbose", "config.json"])?;

Source: figue