SuperConfig
Advanced configuration management with hierarchical cascading, intelligent array merging, smart format detection, and performance optimizations.
Built on Figment's foundation, SuperConfig adds advanced features while maintaining 100% compatibility.
🚀 Core Features
Core Capabilities
-
🏗️ Hierarchical Configuration: Git-like config inheritance across system → user → project levels
-
🔄 Advanced Array Merging: Compose configurations with
_add/_removepatterns across all sources -
🧠 Intelligent Format Detection: Content-based parsing with caching and performance optimizations
-
🌐 Enhanced Environment Variables: JSON parsing, nested structures, and smart type detection
-
🔧 Production Optimizations: Lazy loading, modification time caching, and optimized data structures
-
🔍 Configuration Debugging: Built-in introspection, source tracking, and validation tools
-
🗣️ Verbosity System: CLI-style debugging with
-v,-vv,-vvvlevels for troubleshooting configuration issues -
Production-Ready: Performance optimized for real-world applications
-
Figment Compatible: Seamless upgrade path for existing Figment users
🔌 Enhanced Providers
Universal Provider - Intelligent Format Detection
- 4-Scenario Detection Strategy: Handles standard files, misnamed files, unknown extensions, and auto-extension search
- Performance Optimized: Content-based detection with modification time caching
- Format Support: JSON, TOML, YAML with automatic fallback chains
- Example:
Universal::file("config")triesconfig.toml,config.yaml,config.jsonautomatically
Nested Provider - Advanced Environment Variables
- JSON Parsing:
APP_FEATURES='["auth", "cache"]'→featuresarray - Automatic Nesting:
APP_DATABASE_HOST=localhost→database.host - Smart Type Detection: Strings, numbers, booleans, arrays, objects
- Performance Caching: Optimized parsing with intelligent caching
Empty Provider - Clean Configuration
- Smart Filtering: Removes empty strings, arrays, objects while preserving meaningful falsy values
- CLI Integration: Perfect for filtering meaningless CLI arguments
- Preserves Intent: Keeps
false,0, and other intentional values
Hierarchical Provider - Configuration Cascade
- Search Hierarchy:
~/.config/app/,~/.app/,~/, ancestor directories, current directory - Automatic Merging: Later configs override earlier ones with array merging support
- Git-like Behavior: Similar to
.gitconfighierarchical resolution
🚀 Built-In Features
Array Merging & Export
// Built into SuperConfig - no extension traits needed
let config = new
.with_file // Smart format detection
.with_env // Enhanced environment variables
.with_hierarchical_config; // Git-style discovery
// Rich export and debugging capabilities
let json = config.as_json?; // Export as JSON
let yaml = config.as_yaml?; // Export as YAML
let host = config.get_string?; // Extract values
let exists = config.has_key?; // Check existence
let debug = config.debug_config?; // Full debug output
🚀 Quick Start
use SuperConfig; // Only import you need
use ;
let cli_args = AppConfig ;
let config: AppConfig = new
.with_defaults // Set smart defaults
.with_verbosity // Enable configuration debugging
.with_hierarchical_config // System → user → project cascade
.with_file // Auto-detects .toml/.json/.yaml
.with_env // JSON parsing + nesting
.with_cli_opt // Filtered CLI overrides
.extract?; // Direct extraction
# Ok::
💡 Real-World Examples
Production Configuration Setup
use SuperConfig;
use ;
let config: AppConfig = new
.with_defaults
.with_hierarchical_config // System-wide configs
.with_file // Project config
.with_env // Environment overrides
.with_cli_opt // Runtime overrides
.extract?;
# Ok::
Hierarchical Configuration Discovery
// with_hierarchical_config("myapp") searches in priority order:
//
// 1. ~/.config/myapp/myapp.{toml,yaml,json} (XDG system config)
// 2. ~/.myapp/myapp.{toml,yaml,json} (User home config)
// 3. ~/myapp.{toml,yaml,json} (Home root config)
// 4. ../../myapp.{toml,yaml,json} (Ancestor directories)
// 5. ../myapp.{toml,yaml,json} (Parent directory)
// 6. ./myapp.{toml,yaml,json} (Current directory)
//
// Later configs override earlier ones with smart array merging
let config = new
.with_hierarchical_config
.with_env
.extract?;
Advanced Array Composition
# ~/.config/myapp/myapp.toml (system defaults)
[]
= ["auth", "logging", "metrics"]
= ["*.tmp", "*.log"]
[]
= ["https://app.example.com"]
# ./myapp.toml (project overrides)
[]
= ["debug", "hot-reload"] # Adds to existing array
= ["metrics"] # Removes from array
= ["*.cache", "build/*"] # Extends ignore patterns
[]
= ["http://localhost:3000"] # Add dev origin
# Final result:
# features = ["auth", "logging", "debug", "hot-reload"]
# ignore_paths = ["*.tmp", "*.log", "*.cache", "build/*"]
# allowed_origins = ["https://app.example.com", "http://localhost:3000"]
Advanced Environment Variable Scenarios
# Simple nesting
# → database.host
# → database.port
# JSON arrays and objects
# → features (parsed as array)
# → redis.config
# Array composition via environment
# Adds "debug" to features array
# Removes "cache" from features
# Nested object construction
# → server.tls.cert_path and server.tls.key_path
Configuration Debugging & Introspection
use ;
let config = new
.with_hierarchical_config
.with_file
.with_env;
// Export in different formats
let json_config = config.as_json?; // Pretty JSON
let yaml_config = config.as_yaml?; // YAML format
let toml_config = config.as_toml?; // TOML format
// Value extraction and validation
let db_host = config.get_string?;
let features = config.?;
let has_redis = config.has_key?;
let all_keys = config.keys?;
// Full debug output with source tracking
let debug_output = config.debug_config?;
println!;
// Shows final merged config + which providers contributed each value
// Source metadata for troubleshooting
let sources = config.debug_sources;
for source in sources
# Ok::
Performance Features
let config = new
.with_hierarchical_config
.with_file
.with_env_ignore_empty
.extract?;
# Ok::
🎯 When to Use SuperConfig
✅ Use Cases
- Complex applications with multiple environments
- Advanced configuration patterns and array merging
- Performance-critical systems
- Multi-source configuration loading
- Development teams needing debugging capabilities
- Production deployments requiring robust error handling
🔄 Figment Migration
Existing Figment users can easily migrate to SuperConfig's enhanced capabilities.
⚡ Performance
- Lazy Loading: Files cached by modification time
- Smart Detection: Content-based format detection
- Conditional Processing: Array merging only when needed
- Efficient Caching: Parsed data cached for reuse
🛠️ Advanced Features
Configuration Validation
use ;
use ;
let config = new
.with_hierarchical_config
.with_env;
// Validate configuration exists and is accessible
if !config.has_key?
// Extract with validation
let db_config: DatabaseConfig = config.extract_inner?;
Error Handling & Diagnostics
use ;
let config = new
.with_file
.with_env;
match config.
Custom Provider Integration
use ;
use Provider;
// Your custom provider
let config = new
.with_hierarchical_config
.with_provider // Automatic array merging
.with_env;
📚 Documentation & Resources
- API Documentation - Complete API reference with examples
- Examples - Practical examples including verbosity system usage
- Figment Documentation - Core concepts (SuperConfig is compatible)
- GitHub Repository - Source code and issue tracking
🤝 Contributing
We welcome contributions! SuperConfig is designed to become the universal configuration standard.
- Issues: Bug reports, feature requests
- Pull Requests: Code improvements, documentation, examples
- Discussions: Architecture decisions, use cases, integrations
📄 License
Licensed under the MIT License. See LICENSE for details.
SuperConfig - Configuration management that scales with your application.