Appearance
CLI Reference
Complete command-line reference for Konfigo. Start with the essentials, then explore advanced options as needed.
Command Decision Tree
Choose the right command pattern for your task:
mermaid
graph TD
A[What do I need to do?] --> B[Convert Format]
A --> C[Merge Files]
A --> D[Apply Schema]
A --> E[Batch Generate]
B --> B1[konfigo -s file.yaml -oj]
B --> B2[konfigo -s file.json -ot]
B --> B3[konfigo -s file.toml -oy]
C --> C1{Runtime overrides?}
C1 -->|No| C2[konfigo -s base.yaml,prod.yaml]
C1 -->|Yes| C3[KONFIGO_KEY_*=value konfigo -s files...]
D --> D1{Validate only?}
D1 -->|Yes| D2[konfigo -s config.yaml -S schema.yaml --validate-only]
D1 -->|No| D3[konfigo -s config.yaml -S schema.yaml]
E --> E1[konfigo -S schema.yaml -V variables.yaml]
style B1 fill:#e8f5e8
style C2 fill:#fff3e0
style D3 fill:#f3e5f5
style E1 fill:#e1f5feEssential Commands
These commands handle 90% of common use cases:
bash
# Merge configurations
konfigo -s base.yaml,prod.yaml
# Output to file
konfigo -s config.yaml -of final.json
# Convert formats
konfigo -s config.yaml -oj # YAML to JSON
konfigo -s config.json -oy # JSON to YAML
# Use environment overrides
KONFIGO_KEY_app.port=9000 konfigo -s config.yaml
# Apply schema processing
konfigo -s config.yaml -S schema.yaml
# Batch generation
konfigo -s base.yaml -S schema.yaml -V variables.yamlQuick Reference
| Task | Command | Notes |
|---|---|---|
| Basic merge | konfigo -s file1.yaml,file2.json | Merge multiple files |
| Format conversion | konfigo -s config.yaml -oj | Convert YAML to JSON |
| Save output | konfigo -s config.yaml -of result.json | Save to file |
| Environment override | KONFIGO_KEY_app.port=8080 konfigo -s config.yaml | Override any value |
| Schema processing | konfigo -s config.yaml -S schema.yaml | Apply schema |
| Batch generation | konfigo -s base.yaml -V vars.yaml | Generate multiple outputs |
| Validation only | konfigo -s config.yaml -S schema.yaml --validate-only | Check without output |
| Debug output | konfigo -v -s config.yaml | See what's happening |
Command Structure
bash
konfigo [global-flags] -s <sources> [processing-flags] [output-flags]Examples by Use Case
Configuration Merging
bash
# Basic merge
konfigo -s base.yaml,env.yaml,local.yaml
# With output file
konfigo -s base.yaml,prod.yaml -of production.json
# Recursive directory merge
konfigo -r -s configs/ -of merged.yaml
# Case-insensitive merging
konfigo -c -s config1.yaml,config2.yamlFormat Conversion
bash
# Single format output
konfigo -s config.yaml -oj # → JSON
konfigo -s config.json -oy # → YAML
konfigo -s config.toml -oe # → ENV
# Multiple format output
konfigo -s config.yaml -oj -oy -ot -of base # → base.json, base.yaml, base.tomlEnvironment Integration
bash
# Single override
KONFIGO_KEY_database.host=prod-db konfigo -s config.yaml
# Multiple overrides
KONFIGO_KEY_app.port=9000 KONFIGO_KEY_app.debug=false konfigo -s config.yaml
# From environment file
source .env && konfigo -s config.yamlSchema Processing
bash
# Basic schema application
konfigo -s config.yaml -S schema.yaml
# With variables
konfigo -s config.yaml -S schema.yaml -V variables.yaml
# Validation only
konfigo -s config.yaml -S schema.yaml --validate-only
# Batch processing
konfigo -s template.yaml -S schema.yaml -V batch-vars.yamlInput Sources (-s, --sources)
Specify configuration sources to merge.
Syntax
bash
-s <source1>[,<source2>,...]
--sources <source1>[,<source2>,...]Source Types
| Type | Example | Notes |
|---|---|---|
| File | -s config.yaml | Single configuration file |
| Multiple files | -s base.yaml,prod.yaml | Comma-separated list |
| Directory | -s configs/ | All files in directory |
| Recursive | -r -s configs/ | Include subdirectories |
| Stdin | -s - | Read from standard input |
Format Detection
Konfigo automatically detects formats by extension:
| Extension | Format | Alternative Extensions |
|---|---|---|
.json, .jsonc | JSON | Comments supported in .jsonc |
.yaml, .yml | YAML | Both extensions supported |
.toml | TOML | TOML v1.0.0 |
.env, .envrc | ENV | Key=value pairs |
Explicit Format Flags
Override automatic detection:
bash
konfigo -sj -s data.txt # Treat as JSON
konfigo -sy -s config.conf # Treat as YAML
konfigo -st -s settings.txt # Treat as TOML
konfigo -se -s vars.txt # Treat as ENVAdvanced Source Options
bash
# Recursive directory processing
konfigo -r -s configs/
# Case-insensitive key merging
konfigo -c -s config1.yaml,config2.yaml
# Include hidden files
konfigo --include-hidden -s configs/
# File pattern matching
konfigo -s "configs/*.{yaml,json}"Schema Processing (-S, --schema)
Apply schema-driven processing for validation, transformation, and advanced features.
Basic Usage
bash
konfigo -s config.yaml -S schema.yamlSchema Capabilities
| Feature | Description | Example |
|---|---|---|
| Validation | Enforce data constraints | Required fields, type checking |
| Variables | Template substitution | ${DATABASE_HOST} |
| Transformation | Modify data structure | Rename keys, change values |
| Generation | Create new data | UUIDs, timestamps |
| Batch processing | Multiple outputs | Environment-specific configs |
Schema with Variables
bash
# Variables from file
konfigo -s config.yaml -S schema.yaml -V variables.yaml
# Variables from environment (KONFIGO_VAR_*)
KONFIGO_VAR_ENV=prod konfigo -s config.yaml -S schema.yamlValidation Options
bash
# Validate configuration without output
konfigo -s config.yaml -S schema.yaml --validate-only
# Strict validation mode
konfigo -s config.yaml -S schema.yaml --strict
# Skip validation errors
konfigo -s config.yaml -S schema.yaml --skip-validationOutput Control
Output Formats
bash
# Format flags (can combine multiple)
-oj, --output-json # JSON output
-oy, --output-yaml # YAML output
-ot, --output-toml # TOML output
-oe, --output-env # ENV outputOutput Destinations
bash
# Output to file
-of <filename>, --output-file <filename>
# Output to directory (for batch processing)
-od <directory>, --output-dir <directory>
# Output to stdout (default)
# No flag neededExamples
bash
# Single format to file
konfigo -s config.yaml -oj -of result.json
# Multiple formats with base name
konfigo -s config.yaml -oj -oy -ot -of config
# Creates: config.json, config.yaml, config.toml
# Directory output for batch processing
konfigo -s template.yaml -S schema.yaml -V vars.yaml -od outputs/Format-Specific Options
JSON Options
bash
--json-indent <n> # Indentation spaces (default: 2)
--json-compact # Compact output (no whitespace)
--json-escape-html # Escape HTML charactersYAML Options
bash
--yaml-indent <n> # Indentation spaces (default: 2)
--yaml-flow # Use flow style
--yaml-fold # Fold long linesENV Options
bash
--env-prefix <prefix> # Add prefix to all keys
--env-quote # Quote all values
--env-uppercase # Convert keys to uppercaseEnvironment Variables
Configuration Overrides (KONFIGO_KEY_*)
Override any configuration value:
bash
# Simple values
KONFIGO_KEY_app.port=8080
KONFIGO_KEY_database.host=localhost
# Nested structures
KONFIGO_KEY_database.connection.pool_size=20
KONFIGO_KEY_features.auth.enabled=true
# Array elements (if supported)
KONFIGO_KEY_servers.0.host=server1.comSchema Variables (KONFIGO_VAR_*)
Supply variables for schema processing:
bash
# Set variables for schema substitution
KONFIGO_VAR_ENVIRONMENT=production
KONFIGO_VAR_DATABASE_HOST=prod-db.company.com
KONFIGO_VAR_API_KEY=secret123
konfigo -s config.yaml -S schema.yamlSystem Variables
Control Konfigo behavior:
bash
KONFIGO_LOG_LEVEL=debug # Set log level
KONFIGO_NO_COLOR=1 # Disable colored output
KONFIGO_CONFIG_FILE=~/.konfigo # Custom config file locationGlobal Flags
Logging and Output
bash
-v, --verbose # Verbose output
-q, --quiet # Quiet mode (errors only)
-d, --debug # Debug output
--no-color # Disable colored output
--log-format <format> # json, text (default: text)Behavior Control
bash
-r, --recursive # Process directories recursively
-c, --case-insensitive # Case-insensitive key merging
--dry-run # Show what would be done
--fail-fast # Stop on first errorPerformance
bash
--parallel <n> # Parallel processing (default: CPU count)
--memory-limit <size> # Memory limit (e.g., 1GB)
--timeout <duration> # Processing timeout (e.g., 30s)Advanced Usage Patterns
Piping and Streams
bash
# Read from stdin
echo '{"key": "value"}' | konfigo -s - -oy
# Chain with other tools
curl -s api.com/config | konfigo -s - -S schema.yaml | jq '.app'
# Process multiple streams
cat config1.json | konfigo -s -,config2.yaml -of merged.yamlBatch Processing
bash
# Generate multiple environment configs
konfigo -s base.yaml -S schema.yaml -V environments.yaml -od configs/
# Process multiple templates
for template in templates/*.yaml; do
name=$(basename "$template" .yaml)
konfigo -s "$template" -S schema.yaml -V "vars/$name.yaml" -of "output/$name.json"
doneConditional Processing
bash
# Only process if schema exists
[[ -f schema.yaml ]] && konfigo -s config.yaml -S schema.yaml || konfigo -s config.yaml
# Environment-specific processing
if [[ "$ENVIRONMENT" == "production" ]]; then
konfigo -s base.yaml,prod.yaml -S prod-schema.yaml -of prod.json
else
konfigo -s base.yaml,dev.yaml -of dev.json
fiIntegration with Build Tools
Make
makefile
configs/%.json: configs/%.yaml schema.yaml
konfigo -s $< -S schema.yaml -of $@
all-configs: configs/dev.json configs/staging.json configs/prod.jsonDocker
dockerfile
# Multi-stage build with configuration generation
FROM konfigo:latest AS config-builder
COPY configs/ /configs/
COPY schema.yaml /schema.yaml
RUN konfigo -s /configs/base.yaml,/configs/prod.yaml -S /schema.yaml -of /app-config.json
FROM alpine:latest
COPY --from=config-builder /app-config.json /etc/app/config.jsonError Handling and Debugging
Debug Output
bash
# Verbose mode - see processing steps
konfigo -v -s config.yaml -S schema.yaml
# Debug mode - detailed internal information
konfigo -d -s config.yaml -S schema.yaml
# Trace mode - maximum detail
KONFIGO_LOG_LEVEL=trace konfigo -s config.yaml -S schema.yamlCommon Error Scenarios
File Not Found
bash
# Error: source file not found
konfigo -s nonexistent.yaml
# Solution: Check file paths and permissionsInvalid Format
bash
# Error: YAML parsing failed
konfigo -s invalid.yaml
# Solution: Validate YAML syntax, use explicit format flagsSchema Validation Failed
bash
# Error: validation failed
konfigo -s config.yaml -S strict-schema.yaml
# Solution: Check validation rules, use --validate-only for testingEnvironment Variable Issues
bash
# Error: variable not found
KONFIGO_VAR_MISSING=value konfigo -s config.yaml -S schema.yaml
# Solution: Check variable names and schema requirementsValidation and Testing
bash
# Test configuration without output
konfigo -s config.yaml -S schema.yaml --validate-only
# Dry run to see what would happen
konfigo --dry-run -s config.yaml -S schema.yaml -V vars.yaml
# Check syntax only
konfigo --syntax-only -s config.yamlPerformance Considerations
Large Files
bash
# Streaming mode for large files
konfigo --stream -s large-config.json -oy
# Memory limit
konfigo --memory-limit 512MB -s huge-config.yaml
# Parallel processing
konfigo --parallel 4 -r -s configs/Optimization Tips
- Use specific formats: Avoid auto-detection for better performance
- Limit recursion depth: Use
--max-depthfor deep directory structures - Enable parallel processing: Use
--parallelfor multiple files - Stream large files: Use
--streamfor files > 100MB
Exit Codes
| Code | Meaning | Description |
|---|---|---|
0 | Success | Operation completed successfully |
1 | General error | Command failed |
2 | Invalid arguments | Bad command line arguments |
3 | File not found | Source file doesn't exist |
4 | Parse error | Invalid file format |
5 | Schema error | Schema validation failed |
6 | Write error | Cannot write output file |
130 | Interrupted | Process interrupted (Ctrl+C) |
Using Exit Codes
bash
# Check if command succeeded
if konfigo -s config.yaml -S schema.yaml; then
echo "Configuration valid"
else
echo "Configuration failed validation"
exit 1
fi
# Save exit code
konfigo -s config.yaml -S schema.yaml
EXIT_CODE=$?
if [[ $EXIT_CODE -eq 5 ]]; then
echo "Schema validation failed"
fiConfiguration File
Create ~/.konfigo/config.yaml for default settings:
yaml
# Default configuration file
defaults:
output_format: "yaml"
indent: 2
case_sensitive: true
recursive: false
logging:
level: "info"
format: "text"
performance:
parallel: 4
memory_limit: "1GB"
timeout: "30s"Environment Override
bash
# Use custom config file
KONFIGO_CONFIG_FILE=/path/to/config.yaml konfigo -s input.yamlQuick Troubleshooting
| Problem | Solution |
|---|---|
| Command not found | Check installation and PATH |
| Permission denied | Check file permissions |
| Invalid YAML | Validate syntax with yamllint |
| Schema errors | Use --validate-only to debug |
| Memory issues | Use --memory-limit and --stream |
| Slow performance | Enable --parallel processing |
Next Steps
- User Guide - Task-oriented guides
- Recipes & Examples - Real-world patterns
- Schema Guide - Advanced processing
- Troubleshooting - Detailed problem solving
This CLI reference covers all Konfigo capabilities. Start with the essentials and gradually explore advanced features as your needs grow!
Flags
Flags are used to control Konfigo's behavior, from specifying input sources and output formats to enabling schema processing and managing logging.
Input & Sources
These flags control how Konfigo discovers and parses your input configuration files.
-s <paths>:- Description: A comma-separated list of source files or directories. Konfigo will read and merge these sources in the order they are provided.
- Use
-to specify reading from standard input (stdin). When using stdin, you must also specify the input format using one of the-s<format>flags (e.g.,-syfor YAML). - Example:
konfigo -s base.json,env/dev.yml,secrets.env - Example (stdin):
cat my_config.json | konfigo -s - -sj
-r:- Description: Recursively search for configuration files in subdirectories of any directories specified in
-s. - Konfigo identifies files by common configuration extensions (e.g.,
.json,.yaml,.yml,.toml,.env). - Example:
konfigo -s ./configs -r
- Description: Recursively search for configuration files in subdirectories of any directories specified in
-sj:- Description: Force input to be parsed as JSON.
- This is required if reading JSON content from stdin (
-s -). - Example:
echo '{"key": "value"}' | konfigo -s - -sj
-sy:- Description: Force input to be parsed as YAML.
- This is required if reading YAML content from stdin (
-s -). - Example:
echo 'key: value' | konfigo -s - -sy
-st:- Description: Force input to be parsed as TOML.
- This is required if reading TOML content from stdin (
-s -). - Example:
echo 'key = "value"' | konfigo -s - -st
-se:- Description: Force input to be parsed as an ENV file.
- This is required if reading ENV content from stdin (
-s -). - Example:
echo 'KEY=value' | konfigo -s - -se
Schema & Variables
These flags enable Konfigo's powerful schema-driven processing and variable substitution features.
-S, --schema <path>:- Description: Path to a schema file (must be YAML, JSON, or TOML). This schema defines how the merged configuration should be processed, including variable resolution, data generation, transformations, and validation.
- Refer to the Schema Documentation for details on schema structure and capabilities.
- Example:
konfigo -s config.yml -S schema.yml
-V, --vars-file <path>:- Description: Path to a file (YAML, JSON, or TOML) providing high-priority variables for substitution within your schema and configuration.
- Variables from this file override those defined in the schema's
varsblock but are themselves overridden byKONFIGO_VAR_...environment variables. - This file can also contain the
konfigo_forEachdirective for batch processing. - Example:
konfigo -s config.yml -S schema.yml -V prod-vars.yml - See Variable Precedence and Batch Processing with
konfigo_forEachfor more details.
Variable Precedence
Konfigo resolves variables used in ${VAR_NAME} substitutions with the following priority (1 is highest):
- Environment Variables: Set as
KONFIGO_VAR_VARNAME=value. (See Environment Variables) - Variables File: Variables defined in the file specified by
-Vor--vars-file.- In batch mode (
konfigo_forEach), iteration-specific variables take precedence over global variables within this file.
- In batch mode (
- Schema
varsBlock: Variables defined within thevars:section of the schema file specified by-S.
Output & Formatting
These flags control the format and destination of Konfigo's output.
-of <path>:- Description: Write the final processed configuration to the specified file path.
- If the filename has an extension (e.g.,
.json,.yaml,.toml,.env), Konfigo will use that extension to determine the output format. - If used in conjunction with specific format flags (
-oj,-oy, etc.), this path acts as a base name, and the format flag's extension will be appended. For example,konfigo -s c.json -of out/config -oywould write toout/config.yaml. - If this flag is not provided, output is sent to standard output (stdout), defaulting to YAML format unless overridden by an
-o<format>flag. - Example (extension determines format):
konfigo -s c.json -of config.yaml - Example (used as base name):
konfigo -s c.json -of config -oj -oy(writesconfig.jsonandconfig.yaml)
-oj:- Description: Output the final configuration in JSON format.
- Example:
konfigo -s c.yml -oj(outputs JSON to stdout)
-oy:- Description: Output the final configuration in YAML format. This is the default output format if no other output flags are specified.
- Example:
konfigo -s c.json -oy(outputs YAML to stdout)
-ot:- Description: Output the final configuration in TOML format.
- Example:
konfigo -s c.json -ot(outputs TOML to stdout)
-oe:- Description: Output the final configuration in ENV file format.
- Example:
konfigo -s c.json -oe(outputs ENV to stdout)
Behavior & Logging
These flags adjust Konfigo's operational behavior and the verbosity of its logging.
-c:- Description: Use case-sensitive key matching during merging.
- By default, Konfigo performs case-insensitive key matching (e.g.,
keyandKeywould be treated as the same key, with the latter overriding the former if it appears later in the merge sequence). - Example:
konfigo -s config.json -c - Use case: When working with configurations that intentionally use different cases for similar keys
-v:- Description: Enable verbose (INFO) logging. Shows processing steps and decision points.
- Overrides default quiet behavior but is overridden by
-d. - Example:
konfigo -s config.json -v - Output includes: File discovery, merge operations, schema processing steps
-d:- Description: Enable debug (DEBUG + INFO) logging. Shows detailed internal processing information.
- Most verbose logging level, overrides both
-vand default quiet behavior. - Example:
konfigo -s config.json -d - Output includes: Variable resolution, transformation details, validation steps
-h:- Description: Show the help message with a summary of all available flags and basic usage instructions.
- Example:
konfigo -h
Advanced Usage Patterns
Multiple Source Patterns
bash
# Mixed file types
konfigo -s base.yaml,overrides.json,secrets.env
# Directory with specific files
konfigo -s configs/,local/dev.yaml
# Recursive discovery
konfigo -s ./configs -r
# Stdin combined with files
cat dynamic.yaml | konfigo -s base.yaml,- -syOutput Control Patterns
bash
# Multiple output formats
konfigo -s config.yaml -oj -oy -ot -oe
# File output with stdout
konfigo -s config.yaml -of final.json -oy
# Different file formats
konfigo -s config.yaml -of app.json -of settings.toml
# Conditional output based on extension
konfigo -s config.yaml -of final.json # JSON format (from extension)
konfigo -s config.yaml -of final -oj # JSON format (from flag)Schema and Variable Combinations
bash
# Schema validation only
konfigo -s config.yaml -S validation-schema.yaml
# Variables without schema
export KONFIGO_VAR_ENV=production
konfigo -s config.yaml
# Complete processing pipeline
konfigo -s base.yaml,env.yaml -S full-schema.yaml -V variables.yaml
# Batch processing
konfigo -s template.yaml -S schema.yaml -V batch-definitions.yamlEnvironment Variable Patterns
bash
# Direct configuration overrides
export KONFIGO_KEY_database.host="prod-db.example.com"
export KONFIGO_KEY_app.debug=false
konfigo -s config.yaml
# Schema variable overrides
export KONFIGO_VAR_ENVIRONMENT="production"
export KONFIGO_VAR_VERSION="v1.2.3"
konfigo -s config.yaml -S schema.yaml
# Combined approach
export KONFIGO_KEY_app.replicas=5 # Direct override
export KONFIGO_VAR_NAMESPACE="production" # Schema variable
konfigo -s config.yaml -S k8s-schema.yaml -V prod-vars.yamlExit Codes
Konfigo uses standard exit codes to indicate the result of operations:
- 0: Successful execution - all operations completed without errors
- 1: General error - file not found, parsing failed, permission denied
- 2: Validation error - schema validation failed, constraint violations
- 3: Schema processing error - transformation or generation failures
- 4: Environment/variable error - missing required variables or invalid values
Exit Code Usage in Scripts
bash
#!/bin/bash
# Check if configuration is valid
if konfigo -s config.yaml -S validation.yaml >/dev/null 2>&1; then
echo "Configuration is valid"
else
case $? in
1) echo "File or parsing error" ;;
2) echo "Validation failed" ;;
3) echo "Schema processing error" ;;
4) echo "Variable/environment error" ;;
*) echo "Unknown error" ;;
esac
exit 1
fi
# Generate production configuration
konfigo -s base.yaml,prod.yaml -S prod-schema.yaml -of prod-config.yamlPerformance Considerations
Large Configuration Files
For large configuration files or complex processing:
bash
# Use streaming for very large files
cat large-config.yaml | konfigo -sy -S schema.yaml
# Process in parallel (automatic for multiple sources)
konfigo -s dir1/,dir2/,dir3/ -r
# Limit memory usage in containers
docker run --memory=512m myapp konfigo -s config.yamlDebugging Performance
bash
# Time operations
time konfigo -s large-config.yaml -S complex-schema.yaml
# Profile with debug output
konfigo -d -s config.yaml -S schema.yaml 2>&1 | grep -E "(Processing|Timing)"Integration Examples
CI/CD Integration
bash
# Validate in CI pipeline
konfigo -s configs/ -r -S validation-schema.yaml || exit 1
# Generate deployment configs
for env in dev staging prod; do
konfigo -s base.yaml,envs/$env.yaml -S deploy-schema.yaml -V vars/$env.yaml -of deploy-$env.yaml
doneDocker Integration
dockerfile
# Multi-stage build with config generation
FROM konfigo:latest as config-builder
COPY configs/ /configs/
COPY schemas/ /schemas/
RUN konfigo -s /configs/ -r -S /schemas/app.yaml -of /app-config.yaml
FROM alpine:latest
COPY --from=config-builder /app-config.yaml /etc/app/config.yamlKubernetes Integration
bash
# Generate ConfigMap from multiple sources
konfigo -s base.yaml,k8s-overrides.yaml -S k8s-schema.yaml | \
kubectl create configmap app-config --from-file=/dev/stdin --dry-run=client -o yamlCommon Troubleshooting
Debug Mode Usage
Always start troubleshooting with debug mode:
bash
# See what Konfigo is doing
konfigo -d -s config.yaml -S schema.yaml
# Check specific processing stages
konfigo -v -s config.yaml # Merge only
konfigo -v -s config.yaml -S schema.yaml # With schemaValidation Issues
bash
# Test components individually
konfigo -s config.yaml # Test merging
konfigo -s config.yaml -S validation.yaml # Test validation
yamllint config.yaml # Test YAML syntaxEnvironment Variable Issues
bash
# Check environment variables
env | grep KONFIGO_
echo "KONFIGO_KEY_app.port=$KONFIGO_KEY_app.port"
echo "KONFIGO_VAR_ENV=$KONFIGO_VAR_ENV"For more detailed troubleshooting guidance, see the Troubleshooting Guide. For environment variable specifics, refer to Environment Variables. For comprehensive schema information, see the Schema Guide.