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 configuration management for Rust services - Define configuration schemas with native Rust structs and schemars, validate for cross-language interoperability, and fetch values from the centralized Smoo AI config server with async reqwest and local caching.
Rust Crate
A Rust port of @smooai/config that mirrors the feature set of the TypeScript and Python versions. The crate exposes a type-driven configuration API using schemars for JSON Schema generation, an async reqwest-based runtime client with local caching, and a local config manager that merges file and environment variable sources.
Why smooai-config?
Ever hardcoded configuration values across your Rust services or fought to keep configuration in sync between Rust backends and TypeScript frontends? Traditional config management gives you the values, but not the safety or cross-language consistency.
smooai-config provides:
- Three configuration tiers - Separate public config, secrets, and feature flags with distinct schema types
- Native Rust structs - Derive
JsonSchemaon your own types viaschemarsfor automatic JSON Schema generation define_config_typedAPI - Idiomatic generic function that converts Rust struct types to validated JSON Schema- Cross-language compatibility validation - Catches unsupported JSON Schema features at schema definition time
- Async runtime client - Fetch configuration from the Smoo AI config server with
tokio+reqwestand local caching - Environment variable fallback - Zero-config client setup via
SMOOAI_CONFIG_*environment variables from_env()constructor - Load all credentials from environment with a single call
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