Configuration¶
{: .no_toc }
Configure Vexy SVGO plugins and optimization settings
Table of contents¶
{: .no_toc .text-delta }
- TOC
Overview¶
Vexy SVGO uses the same configuration format as SVGO, ensuring easy migration and compatibility. Configuration can be provided through files, command-line options, or programmatically.
Configuration Priority¶
- Command-line options (highest priority)
- Configuration files (.svgo.config.js, .svgo.config.json)
- Default settings (lowest priority)
Configuration Files¶
.svgo.config.js (SVGO Compatible)¶
The standard SVGO configuration format:
module.exports = {
multipass: true,
js2svg: {
pretty: true,
indent: 2
},
plugins: [
// Enable plugin with default settings
'removeComments',
'removeEmptyAttrs',
// Enable plugin with custom parameters
{
name: 'convertColors',
params: {
currentColor: true,
names2hex: true
}
},
// Disable plugin that's enabled by default
{
name: 'removeViewBox',
enabled: false
}
]
};
.svgo.config.json (Native Format)¶
JSON format for simpler configurations:
{
"multipass": true,
"js2svg": {
"pretty": true,
"indent": 2
},
"plugins": [
"removeComments",
"removeEmptyAttrs",
{
"name": "convertColors",
"params": {
"currentColor": true,
"names2hex": true
}
}
]
}
Configuration Discovery¶
Vexy SVGO looks for configuration files in this order:
- File specified with
--configoption .svgo.config.jsin current directory.svgo.config.jsonin current directory.svgo.config.jsin parent directories (walking up).svgo.config.jsonin parent directories (walking up)
Core Settings¶
multipass¶
Run optimization multiple times until no further improvements are made.
{
multipass: true // Default: false
}
Command line: --multipass
js2svg¶
Controls SVG output formatting:
{
js2svg: {
pretty: true, // Pretty print with indentation
indent: 2, // Indentation spaces
eol: 'lf', // Line ending: 'lf' or 'crlf'
finalNewline: false // Add newline at end
}
}
Command line: --pretty, --indent 4, --eol crlf
floatPrecision¶
Numeric precision for coordinates and values:
{
floatPrecision: 3 // Default: 3 decimal places
}
Command line: -p 2, --precision 2
Plugin Configuration¶
Plugin Format¶
Plugins can be configured in several ways:
{
plugins: [
// Simple enable (uses default parameters)
'removeComments',
// Enable with custom parameters
{
name: 'cleanupNumericValues',
params: {
floatPrecision: 2,
leadingZero: false
}
},
// Explicitly disable
{
name: 'removeViewBox',
enabled: false
}
]
}
Default Plugin Preset¶
Vexy SVGO includes a default preset similar to SVGO's:
// Default plugins (applied when no config is specified)
const defaultPlugins = [
'removeDoctype',
'removeXMLProcInst',
'removeComments',
'removeMetadata',
'removeEditorsNSData',
'cleanupAttrs',
'mergeStyles',
'cleanupIds',
'removeUselessDefs',
'cleanupNumericValues',
'convertColors',
'removeUnknownsAndDefaults',
'removeNonInheritableGroupAttrs',
'cleanupEnableBackground',
'removeHiddenElems',
'removeEmptyText',
'convertShapeToPath',
'convertEllipseToCircle',
'collapseGroups',
'convertPathData',
'removeEmptyAttrs',
'removeEmptyContainers',
'removeUnusedNS',
'sortAttrs',
'sortDefsChildren',
'removeDesc'
];
Available Plugins¶
See the complete list with descriptions:
vexy-svgo --show-plugins
Common Configuration Examples¶
Web Development¶
Optimized for web use with readable output:
module.exports = {
multipass: true,
js2svg: {
pretty: true,
indent: 2
},
plugins: [
'removeComments',
'removeEmptyAttrs',
'convertColors',
'cleanupIds',
{
name: 'cleanupNumericValues',
params: { floatPrecision: 2 }
},
// Keep viewBox for responsive design
{ name: 'removeViewBox', enabled: false },
// Keep dimensions for img tags
{ name: 'removeDimensions', enabled: false }
]
};
Production Build¶
Maximum compression for production:
module.exports = {
multipass: true,
js2svg: {
pretty: false
},
plugins: [
// Enable all safe optimizations
'removeComments',
'removeTitle',
'removeDesc',
'removeEmptyAttrs',
'removeEmptyText',
'removeEmptyContainers',
'cleanupAttrs',
'cleanupNumericValues',
'convertColors',
'convertPathData',
'collapseGroups',
'mergePaths',
{
name: 'cleanupNumericValues',
params: { floatPrecision: 1 }
}
]
};
Icon Library¶
Preserve structure for icon systems:
module.exports = {
plugins: [
'removeComments',
'removeEmptyAttrs',
'cleanupAttrs',
'convertColors',
{
name: 'cleanupIds',
params: { remove: false, minify: true }
},
// Preserve viewBox for icon scaling
{ name: 'removeViewBox', enabled: false },
// Preserve groups for icon structure
{ name: 'collapseGroups', enabled: false }
]
};
Print/High Quality¶
Maintain precision for print graphics:
module.exports = {
js2svg: {
pretty: true,
indent: 2
},
plugins: [
'removeComments',
'removeEmptyAttrs',
'cleanupAttrs',
{
name: 'cleanupNumericValues',
params: { floatPrecision: 5 }
},
// Disable aggressive optimizations
{ name: 'convertShapeToPath', enabled: false },
{ name: 'mergePaths', enabled: false }
]
};
Command-Line Configuration¶
Override Settings¶
# Use config file but override specific settings
vexy-svgo --config base.config.js --multipass --precision 1 input.svg
# Disable specific plugins
vexy-svgo --disable removeViewBox --disable removeDimensions input.svg
# Enable additional plugins
vexy-svgo --enable cleanupIds --enable sortAttrs input.svg
Multiple Plugin Operations¶
# Complex plugin configuration
vexy-svgo \
--disable removeTitle \
--disable removeDesc \
--enable cleanupIds \
--precision 2 \
--multipass \
input.svg
Plugin Parameters¶
cleanupNumericValues¶
{
name: 'cleanupNumericValues',
params: {
floatPrecision: 3, // Decimal precision
leadingZero: true, // Keep leading zeros
defaultPrecision: 2, // Default for unspecified
jsFloatPrecision: 0 // JavaScript number precision
}
}
convertColors¶
{
name: 'convertColors',
params: {
currentColor: false, // Convert to currentColor
names2hex: true, // Named colors to hex
rgb2hex: true, // rgb() to hex
shorthex: true, // #rrggbb to #rgb
shortname: true // hex to named colors
}
}
cleanupIds¶
{
name: 'cleanupIds',
params: {
remove: true, // Remove unused IDs
minify: true, // Minify used IDs
prefix: '', // Add prefix to IDs
preserve: [] // IDs to never remove
}
}
convertPathData¶
{
name: 'convertPathData',
params: {
applyTransforms: true, // Apply transform matrices
applyTransformsStroked: true, // Apply to stroked paths
makeArcs: true, // Convert to arcs where possible
straightCurves: true, // Convert curves to lines
lineShorthands: true, // Use H/V commands
curveSmoothShorthands: true, // Use S/T commands
floatPrecision: 3, // Coordinate precision
transformPrecision: 5, // Transform precision
removeUseless: true, // Remove redundant commands
collapseRepeated: true, // Collapse repeated commands
utilizeAbsolute: true, // Convert to absolute when shorter
leadingZero: true, // Keep leading zeros
negativeExtraSpace: true // Add space before negative values
}
}
Environment Configuration¶
Environment Variables¶
# Set default precision
export VEXY_SVGO_PRECISION=2
# Default config file location
export VEXY_SVGO_CONFIG=/path/to/config.js
# Disable colors in output
export NO_COLOR=1
Project Settings¶
Create .vexysvgorc in your project root:
{
"precision": 2,
"multipass": true,
"configFile": "tools/svgo.config.js"
}
Migration from SVGO¶
Configuration Compatibility¶
Most SVGO configurations work directly:
# Your existing SVGO config should work
vexy-svgo --config .svgo.config.js input.svg
Key Differences¶
| SVGO | Vexy SVGO | Notes |
|---|---|---|
precision |
floatPrecision |
Both supported |
| Plugin order | Plugin order | May differ slightly |
| Custom plugins | Not supported | Rust plugins only |
Migration Checklist¶
- ✅ Copy your
.svgo.config.js - ✅ Test with sample files
- ⚠️ Check output differences
- ⚠️ Update custom plugins (if any)
- ✅ Update build scripts
Troubleshooting¶
Configuration Not Found¶
# Check current directory
ls -la .svgo.config.*
# Check config discovery
vexy-svgo --verbose input.svg
Plugin Errors¶
# List available plugins
vexy-svgo --show-plugins
# Test individual plugins
vexy-svgo --disable-all --enable removeComments input.svg
Output Differences¶
# Compare with SVGO
svgo input.svg -o svgo-output.svg
vexy-svgo input.svg -o vexy-output.svg
diff svgo-output.svg vexy-output.svg
Next Steps¶
- Plugins - Detailed plugin documentation
- CLI Usage - Command-line reference
- Interactive Demo - Test configurations online
Need help? Check our GitHub Discussions for configuration examples and community support.