YAML Minification: When and How to Compress YAML Files
YAML's readability comes from its generous use of whitespace and indentation. But sometimes you need the data in a more compact form β for transmission, embedding in other formats, or reducing storage. This guide covers when minification makes sense and the techniques to achieve it.
What Is YAML Minification?
Minification removes unnecessary whitespace while preserving the data structure:
Before (168 bytes):
server:
host: localhost
port: 8080
features:
- auth
- logging
- monitoring
After β Flow Style (76 bytes):
server: {host: localhost, port: 8080, features: [auth, logging, monitoring]}
After β JSON (same data, 83 bytes):
{"server":{"host":"localhost","port":8080,"features":["auth","logging","monitoring"]}}
YAML's flow style is actually slightly more compact than JSON because it does not require quoting keys.
When to Minify
Do Minify
- Embedding YAML in other formats: Storing YAML strings inside JSON or database fields
- Network transmission: Reducing payload size for high-throughput systems
- Log output: Compact representations in log messages
- Generated output: Machine-generated YAML that humans rarely read
Don't Minify
- Configuration files: Readability is the whole point of using YAML
- Version-controlled files: Minified YAML creates terrible diffs
- Collaborative files: Team members need to read and edit them
- Templates and examples: Documentation value is lost
Minification Techniques
1. Convert to Flow Style
YAML supports inline notation for both mappings and sequences:
# Block style (readable)
database:
host: localhost
port: 5432
options:
- sslmode=require
- timeout=30
# Flow style (compact)
database: {host: localhost, port: 5432, options: [sslmode=require, timeout=30]}
2. Remove Comments
Comments add no data value and can be safely removed:
# Before
server:
host: localhost # Main server
port: 8080 # HTTP port
# After
server:
host: localhost
port: 8080
3. Remove Blank Lines
Extra blank lines improve readability but add bytes:
# Before (with separator lines)
database:
host: localhost
logging:
level: info
# After (compact)
database:
host: localhost
logging:
level: info
4. Convert to JSON
If YAML-specific features (comments, anchors) are not needed, converting to minified JSON is the most compact option:
# Using yq
yq -o=json '.' config.yaml | jq -c . > config.min.json
Command-Line Minification
# Convert to flow style with yq
yq -o=yaml '.. style="flow"' config.yaml
# Convert to compact JSON
yq -o=json -I=0 '.' config.yaml
# Remove comments with sed (basic)
sed '/^[[:space:]]*#/d' config.yaml | sed 's/[[:space:]]*#.*//'
# Python one-liner
python3 -c "
import yaml, sys
data = yaml.safe_load(sys.stdin)
yaml.dump(data, sys.stdout, default_flow_style=True, width=10000)
" < config.yaml
For interactive YAML formatting and minification, use our YAML Formatter.
Size Comparison
For a typical Docker Compose file (10 services):
| Format | Size | Ratio |
|---|---|---|
| Block YAML (readable) | 2,400 bytes | 1.0x |
| Flow YAML (minified) | 1,100 bytes | 0.46x |
| JSON (minified) | 1,200 bytes | 0.50x |
| Gzip (block YAML) | 650 bytes | 0.27x |
Key insight: Gzip compression is far more effective than minification. If you are transmitting YAML over HTTP with gzip enabled (standard practice), minification provides minimal additional benefit.
The Better Alternative: Compression
For network transmission, HTTP compression (gzip, brotli) is almost always better than minification:
- Gzip reduces block-style YAML by 70-80%
- The readable format compresses to a similar size as the minified format
- You maintain readability for debugging
Block YAML β Gzip: 2,400 β 650 bytes (73% reduction)
Flow YAML β Gzip: 1,100 β 580 bytes (47% reduction)
The difference between compressed block and compressed flow is minimal.
FAQ
Is minified YAML still valid YAML?
Yes. Flow-style YAML is fully valid and parseable by any YAML parser. It uses curly braces for mappings and square brackets for sequences β essentially JSON-like syntax within YAML. The data structure is identical; only the formatting differs.
Should I minify YAML for Kubernetes manifests?
No. Kubernetes manifests should be readable, version-controlled, and easily editable. Use standard block-style YAML. If you need to reduce transfer size, let your deployment tool handle compression. Helm charts and Kustomize overlays manage YAML complexity better than minification.
Related Resources
- YAML Formatter β Format or compact YAML files
- YAML Syntax Tutorial β Understand block vs flow style
- JSON to YAML Conversion β Convert between formats