๐ Why Choose RESL? โ
RESL addresses the fundamental limitations of traditional configuration formats by bringing programming capabilities directly into the configuration language itself.
๐ Format Comparison โ
vs JSON โ
Problems with JSON:
- Heavy repetition and duplication
- No variables or computed values
- No comments (leading to unclear configurations)
- Verbose syntax for complex structures
- No way to express conditional logic
RESL Solutions:
JSON: Repetitive and verbose
{
"services": [
{ "name": "auth", "image": "app/auth:v1.2.0", "port": 8080 },
{ "name": "api", "image": "app/api:v1.2.0", "port": 8081 }
]
}
RESL: Variables and computed values
{
version = "v1.2.0";
base_port = 8080;
services = ["auth", "api"];
["services": services > (i, name): [
"name": name,
"image": concat("app/", name, ":", version),
"port": base_port + i
]]
}
vs YAML โ
Problems with YAML:
- Whitespace sensitivity causes errors
- Complex anchors/references syntax
- Still lacks programming constructs
- Inconsistent behavior across parsers
RESL Advantages:
- Explicit structure with clear delimiters
- True programming capabilities
- Consistent evaluation across environments
- Self-documenting through meaningful variables
vs TOML โ
Problems with TOML:
- Limited nesting capabilities
- No dynamic values or computations
- Verbose for complex configurations
- No conditional logic
RESL Benefits:
- Unlimited nesting with clear syntax
- Full expression evaluation
- Compact syntax for complex structures
- Built-in conditionals and loops
โจ Key Benefits โ
๐ Reduced File Size โ
Variables and computed values eliminate repetition, typically reducing config file sizes by 30-50% compared to JSON.
Before (JSON - 156 characters):
{
"db": { "host": "localhost", "port": 5432 },
"cache": { "host": "localhost", "port": 6379 },
"url": "http://localhost:8080"
}
After (RESL - 98 characters):
{host="localhost";["db":["host":host,"port":5432],"cache":["host":host,"port":6379],"url":concat("http://",host,":8080")]}
๐ง Maintainability โ
Change values in one place, not scattered throughout large configuration files.
๐จ Expressiveness โ
Use conditionals, loops, and functions for dynamic configuration that adapts to different environments.
๐ Familiarity โ
Syntax draws from JSON, JavaScript, and functional programming languages that developers already know.
๐ Performance โ
Compiled evaluation with built-in caching and optimization for fast configuration processing.
๐ก๏ธ Common Concerns Addressed โ
"Another Configuration Format?" โ
RESL isn't just another format - it's a solution to real problems:
- Eliminates configuration duplication
- Provides programming capabilities where needed
- Maintains simplicity for basic use cases
- Offers familiar syntax patterns
"Complexity vs Simplicity" โ
RESL maintains progressive complexity:
- Simple values work exactly like JSON
- Variables add power without complexity
- Advanced features are opt-in
- Learning curve is gradual
"Tooling Support" โ
RESL provides comprehensive tooling:
- CLI for formatting, validation, and conversion
- Language bindings for multiple platforms
- Clear error messages and debugging support
- Integration with existing workflows
๐ฏ When to Use RESL โ
Perfect for:
- Configurations with repeated patterns
- Environment-specific settings
- Complex data structures
- Dynamic value computation
- Infrastructure as Code
- Multi-service deployments
Consider alternatives when:
- Simple, static configurations (JSON may suffice)
- Team unfamiliar with programming concepts
- Tools only support specific formats
- Legacy system constraints
๐ฎ Future Roadmap โ
RESL continues to evolve with:
- More language bindings (Python, JavaScript, Go)
- IDE support with syntax highlighting and IntelliSense
- Schema validation for configuration contracts
- Hot reloading for development workflows
- Ecosystem integrations with popular tools
Ready to experience the benefits? Dive into the Syntax Guide to begin using RESL in your projects.