Fork of svg/svgo with additional features and all upstream bug fixes applied.
SVGO, short for SVG Optimizer, is a Node.js library and command-line application for optimizing SVG files.
This fork adds the preserve option — the ability to protect specific SVG elements from being modified by any plugin. It also includes 9 upstream bug fixes that have not been merged into the main project.
pnpm add svgoProcess single files:
svgo one.svg two.svg -o one.min.svg two.min.svgProcess a directory of files recursively with -r/--recursive and -f/--folder:
svgo -rf path/to/directory_with_svgs -o path/to/output_directoryHelp for advanced usage:
svgo --helpSVGO has a plugin architecture. You can read more about all plugins in Plugins | SVGO Documentation, and the default plugins in Preset Default | SVGO Documentation.
SVGO reads the configuration from svgo.config.mjs (or .js/.cjs) or the --config path/to/config.mjs command-line option. Some other parameters can be configured through command-line options too.
svgo.config.mjs
export default {
multipass: false, // boolean
datauri: 'base64', // 'base64'|'enc'|'unenc'
js2svg: {
indent: 4, // number
pretty: false, // boolean
},
plugins: [
'preset-default', // built-in plugins enabled by default
'prefixIds', // enable built-in plugins by name
// enable built-in plugins with an object to configure plugins
{
name: 'prefixIds',
params: {
prefix: 'uwu',
},
},
],
};Instead of configuring SVGO from scratch, you can tweak the default preset to suit your needs by configuring or disabling the respective plugin.
svgo.config.mjs
export default {
plugins: [
{
name: 'preset-default',
params: {
overrides: {
// disable a default plugin
cleanupIds: false,
// customize the params of a default plugin
inlineStyles: {
onlyMatchedOnce: false,
},
},
},
},
],
};You can find a list of the default plugins in the order they run in Preset Default | SVGO Documentation.
You can protect specific elements from being modified by any plugin using the preserve option. Matched elements and all their children are left completely untouched.
export default {
preserve: {
ids: ['my-logo', 'icon-star'],
classes: ['no-optimize'],
},
plugins: ['preset-default'],
};You can also specify custom plugins:
svgo.config.mjs
import importedPlugin from './imported-plugin.js';
export default {
plugins: [
// plugin imported from another JavaScript file
importedPlugin,
// plugin defined inline
{
name: 'customPlugin',
params: {
paramName: 'paramValue',
},
fn: (ast, params, info) => {},
},
],
};SVGO provides a few low level utilities.
The core of SVGO is the optimize function.
import { optimize } from 'svgo';
const result = optimize(svgString, {
path: 'path-to.svg', // recommended
multipass: true, // all other config fields are available here
preserve: {
ids: ['keep-this'],
},
});
const optimizedSvgString = result.data;If you write a tool on top of SVGO you may want to resolve the config file.
import { loadConfig } from 'svgo';
const config = await loadConfig();You can also specify a path and customize the current working directory.
const config = await loadConfig(configFile, cwd);This software is released under the terms of the MIT license.