| Crates.io | feagi-config |
| lib.rs | feagi-config |
| version | 0.0.1-beta.4 |
| created_at | 2025-12-21 16:34:26.365768+00 |
| updated_at | 2026-01-25 21:42:13.432786+00 |
| description | Configuration loader for FEAGI - Cross-platform TOML-based configuration with override support |
| homepage | https://feagi.org |
| repository | https://github.com/feagi/feagi-core |
| max_upload_size | |
| id | 1998260 |
| size | 68,864 |
Cross-platform, type-safe configuration loader for FEAGI with support for TOML files, environment variable overrides, and CLI argument overrides.
feagi_configuration.tomlno_std)use feagi_config::{load_config, validate_config};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Load configuration with automatic file discovery and overrides
let config = load_config(None, None)?;
// Validate configuration
validate_config(&config)?;
// Access type-safe configuration values
println!("API Host: {}", config.api.host);
println!("API Port: {}", config.api.port);
println!("ZMQ Host: {}", config.zmq.host);
Ok(())
}
use feagi_config::load_config;
use std::collections::HashMap;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Prepare CLI overrides
let mut cli_args = HashMap::new();
cli_args.insert("api_host".to_string(), "192.168.1.100".to_string());
cli_args.insert("api_port".to_string(), "9000".to_string());
// Load with overrides
let config = load_config(None, Some(&cli_args))?;
assert_eq!(config.api.host, "192.168.1.100");
assert_eq!(config.api.port, 9000);
Ok(())
}
# Set environment variables
export FEAGI_API_HOST=0.0.0.0
export FEAGI_API_PORT=8080
export FEAGI_ZMQ_HOST=127.0.0.1
# Run your application
cargo run
use feagi_config::load_config;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Environment variables automatically applied
let config = load_config(None, None)?;
// config.api.host will be "0.0.0.0" from environment
// config.api.port will be 8080 from environment
Ok(())
}
Place feagi_configuration.toml in one of these locations:
FEAGI_CONFIG_PATH environment variableExample feagi_configuration.toml:
[system]
max_cores = 0 # 0 = auto-detect
debug = true
log_level = "WARNING"
[api]
host = "0.0.0.0"
port = 8000
workers = 1
[ports]
zmq_req_rep_port = 5555
zmq_pub_sub_port = 5556
zmq_sensory_port = 5558
[timeouts]
graceful_shutdown = 8.0
service_startup = 3.0
[neural]
burst_engine_timestep = 0.1
batch_size = 1000
| Environment Variable | Config Path | Type |
|---|---|---|
FEAGI_API_HOST |
api.host |
String |
FEAGI_API_PORT |
api.port |
u16 |
FEAGI_API_WORKERS |
api.workers |
usize |
FEAGI_ZMQ_HOST |
zmq.host |
String |
FEAGI_DATA_DIR |
system.data_dir |
PathBuf |
FEAGI_MAX_CORES |
system.max_cores |
usize |
FEAGI_LOG_LEVEL |
system.log_level |
String |
FEAGI_AGENT_DEFAULT_HOST |
agents.default_host |
String |
FEAGI_ZMQ_REQ_REP_PORT |
ports.zmq_req_rep_port |
u16 |
FEAGI_ZMQ_PUB_SUB_PORT |
ports.zmq_pub_sub_port |
u16 |
FEAGI_ZMQ_SENSORY_PORT |
ports.zmq_sensory_port |
u16 |
| ... and more |
The validation module checks for:
std (default)Full configuration loading with TOML file parsing and filesystem access.
[dependencies]
feagi-config = "2.0"
no_stdFor embedded/RTOS targets. Configuration must be provided at compile-time.
[dependencies]
feagi-config = { version = "2.0", default-features = false }
wasmFor WebAssembly targets. Configuration provided via JavaScript.
[dependencies]
feagi-config = { version = "2.0", default-features = false, features = ["wasm"] }
This crate enforces FEAGI 2.0 architecture principles:
❌ FORBIDDEN (Hardcoded values):
// DON'T DO THIS
let host = "127.0.0.1";
let timeout = 30;
✅ REQUIRED (Configuration-driven):
// DO THIS INSTEAD
let config = load_config(None, None)?;
let host = &config.api.host;
let timeout = config.timeouts.graceful_shutdown;
Apache-2.0
Neuraville Inc. feagi@neuraville.com