# ch-config
`ch-config` loads typed runtime configuration from explicit defaults,
environment variables, and optional secret files.
More information is available in the [API documentation](https://docs.rs/ch-config).
## High-level features
- Typed configuration sections with validation
- Direct environment values or mutually exclusive `_FILE` companions
- Explicit dotenv loading with predictable precedence
- Redacted diagnostics for credentials and secret-bearing URLs
- No application discovery or repository-layout assumptions
`AppConfig` includes optional MariaDB, SpacetimeDB, media-library, CAPTCHA, and
email sections. Applications provide stable defaults in code; deployment values
come from the process environment.
## Usage
```rust,no_run
use std::sync::Arc;
use ch_config::{
config::{AppConfig, CaptchaConfig, EmailConfig},
load_app_config,
};
fn load() -> ch_config::config::Result<Arc<AppConfig>> {
load_app_config(AppConfig {
captcha: CaptchaConfig::standard(),
email: EmailConfig::mailersend("sender@example.com", "Example"),
..AppConfig::default()
})
}
```
Supported environment families include `DATABASE_*`, Railway's `MYSQL*`
connection values, `SPACETIMEDB_*`, `MEDIA_LIBRARY_*`, `CAPTCHA_*`, `EMAIL_*`,
and `SMTP_*`. Every supported value also accepts an `_FILE` companion such as
`DATABASE_URL_FILE`.
## Dotenv files
Environment files are opt-in and loaded only from the supplied paths. The base
file fills missing process variables; the override file replaces values and is
intended for local development.
```rust,no_run
use std::path::PathBuf;
use ch_config::environment::EnvFiles;
fn load(base: PathBuf, local: PathBuf) -> Result<(), Box<dyn std::error::Error>> {
EnvFiles {
base: Some(base),
override_file: Some(local),
}
.load()?;
Ok(())
}
```
`environment::value` exposes the same direct-or-file resolution for
application-owned settings. `environment::public_url` validates and normalizes
the conventional `PUBLIC_URL` value.
## Minimum supported Rust version
`ch-config` requires Rust 1.96 or newer.
## License
Licensed under the Sustainable Use License 1.0. See
[`LICENSE.md`](LICENSE.md).