About SmooAI
SmooAI is an AI-powered platform for helping businesses multiply their customer, employee, and developer experience.
Learn more on smoo.ai
SmooAI Packages
Check out other SmooAI packages at smoo.ai/open-source
About smooai-config (Rust)
Type-safe config, secrets, and feature flags for Rust - Same schema, same keys, same source of truth as your TypeScript, Python, Go, and .NET services. All strongly typed, all async.
Rust Crate
Rust port of @smooai/config. Derive JsonSchema on your own Rust structs, generate the exact schema every other service in your stack reads, and resolve values through a cached async client.
What you get
- Three tiers, one schema - public config, secrets, and feature flags as three Rust structs with
#[derive(JsonSchema)]. - Strongly-typed, idiomatic Rust -
define_config_typed::<Public, Secret, Flags>()turns your structs into the schema every other service reads. - Any environment, any key - same API for
development,staging,productionwith per-stage overrides. - Cross-language source of truth - the same schema lives in TypeScript, Python, Go, and .NET services.
- Zero-config client setup -
ConfigClient::from_env()picks upSMOOAI_CONFIG_*and goes. - Async + cached - fetched values stay in-process between calls; invalidate on demand or set a TTL.
Install
Add to your Cargo.toml:
[]
= "0.1"
or using cargo:
All Language Packages
| Language | Package | Install |
|---|---|---|
| TypeScript | @smooai/config |
pnpm add @smooai/config |
| Python | smooai-config |
pip install smooai-config |
| Rust | smooai-config |
cargo add smooai-config |
| Go | github.com/SmooAI/config/go/config |
go get github.com/SmooAI/config/go/config |
Usage
Define Configuration Schemas with Native Rust Types
The preferred way to define configuration is with Rust structs that derive JsonSchema. Use EmptySchema for tiers that have no configuration values:
use ;
use JsonSchema;
use ;
// Generates JSON Schema from your Rust types and validates cross-language compatibility
let config = ;
println!;
Define Configuration Schemas from Raw JSON Schema
Alternatively, pass raw JSON Schema values directly:
use define_config;
let public_schema = json!;
let config = define_config;
Runtime Client - Fetch Values from Server
The ConfigClient is async and uses reqwest under the hood. Fetched values are cached locally until invalidate_cache is called or a TTL expires:
use ConfigClient;
async
Caching
Cache TTL can be configured with set_cache_ttl. By default the cache never expires (manual invalidation only):
use ConfigClient;
use Duration;
let mut client = new;
// Set a 5-minute TTL
client.set_cache_ttl;
// Fetched from server and cached
let value = client.get_value.await?;
// Served from cache
let value = client.get_value.await?;
// Invalidate all cached values
client.invalidate_cache;
// Invalidate cached values for one environment
client.invalidate_cache_for_environment;
Local Configuration Manager
For local development or offline environments, LocalConfigManager loads configuration from .smooai-config/ files and environment variables:
use LocalConfigManager;
let manager = new?;
// Fetch values from local file config + env vars
let api_url = manager.get_public_config?;
let db_url = manager.get_secret_config?;
let new_ui = manager.get_feature_flag?;
Environment Variables
All clients read from the same set of environment variables:
| Variable | Description | Required |
|---|---|---|
SMOOAI_CONFIG_API_URL |
Base URL of the config API | Yes |
SMOOAI_CONFIG_API_KEY |
Bearer token for authentication | Yes |
SMOOAI_CONFIG_ORG_ID |
Organization ID | Yes |
SMOOAI_CONFIG_ENV |
Default environment name (defaults to "development") |
No |
Set these in your environment and the client will use them automatically:
Configuration Tiers
| Tier | Purpose | Examples |
|---|---|---|
| Public | Client-visible settings | API URLs, feature toggles, UI config |
| Secret | Server-side only | Database URLs, API keys, JWT secrets |
| Feature Flags | Runtime toggles | A/B tests, gradual rollouts, beta access |
Built With
- Rust 2021 Edition - Memory safety and performance
- schemars - JSON Schema generation from Rust types
- serde / serde_json - JSON serialization
- reqwest - Async HTTP client
- tokio - Async runtime
Development
Running tests
Building
Linting and Formatting
Related Packages
- @smooai/config - TypeScript/JavaScript version
- smooai-config (Python) - Python version
- smooai-config (Rust) - This package
- SmooAI/config - GitHub repository
Contact
Brent Rager
Smoo Github: https://github.com/SmooAI
License
MIT © SmooAI