![Maven Central Adds Sigstore Signature Validation](https://cdn.sanity.io/images/cgdhsj6q/production/7da3bc8a946cfb5df15d7fcf49767faedc72b483-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Maven Central Adds Sigstore Signature Validation
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.
@kingyue/svgo
Advanced tools
SVG Optimizer is a Node.js-based tool for optimizing SVG vector graphics files.
This fork remove dependency stable
from original repo which results into package manager warning svg/svgo#1681.
SVG files, especially those exported from various editors, usually contain a lot of redundant and useless information. This can include editor metadata, comments, hidden elements, default or non-optimal values and other stuff that can be safely removed or converted without affecting the SVG rendering result.
# Via npm
npm -g install svgo
# Via yarn
yarn global add svgo
# Processing single files:
svgo one.svg two.svg -o one.min.svg two.min.svg
# Processing directory of svg files, recursively using `-f`, `--folder` :
svgo -f ./path/to/folder/with/svg/files -o ./path/to/folder/with/svg/output
# Help for advanced usage
svgo --help
SVGO has a plugin-based architecture, separate plugins allows various xml svg optimizations. See built-in plugins.
SVGO automatically loads configuration from svgo.config.js
or from --config ./path/myconfig.js
. Some general options can be configured via CLI.
// svgo.config.js
module.exports = {
multipass: true, // boolean. false by default
datauri: 'enc', // 'base64' (default), 'enc' or 'unenc'.
js2svg: {
indent: 2, // string with spaces or number of spaces. 4 by default
pretty: true, // boolean, false by default
},
plugins: [
// set of built-in plugins enabled by default
'preset-default',
// enable built-in plugins by name
'prefixIds',
// or by expanded notation which allows to configure plugin
{
name: 'sortAttrs',
params: {
xmlnsOrder: 'alphabetical',
},
},
],
};
When extending default configuration specify preset-default
plugin to enable optimisations.
Each plugin of default preset can be disabled or configured with "overrides" param.
module.exports = {
plugins: [
{
name: 'preset-default',
params: {
overrides: {
// customize default plugin options
inlineStyles: {
onlyMatchedOnce: false,
},
// or disable plugins
removeDoctype: false,
},
},
},
],
};
Default preset includes the following list of plugins:
It's also possible to specify a custom plugin:
const anotherCustomPlugin = require('./another-custom-plugin.js');
module.exports = {
plugins: [
{
name: 'customPluginName',
type: 'perItem', // 'perItem', 'perItemReverse' or 'full'
params: {
optionName: 'optionValue',
},
fn: (ast, params, info) => {},
},
anotherCustomPlugin,
],
};
SVGO provides a few low level utilities.
The core of SVGO is optimize
function.
const { optimize } = require('svgo');
const result = optimize(svgString, {
// optional but recommended field
path: 'path-to.svg',
// all config fields are also available here
multipass: true,
});
const optimizedSvgString = result.data;
If you write a tool on top of SVGO you might need a way to load SVGO config.
const { loadConfig } = require('svgo');
const config = await loadConfig();
// you can also specify a relative or absolute path and customize the current working directory
const config = await loadConfig(configFile, cwd);
Plugin | Description | Default |
---|---|---|
cleanupAttrs | cleanup attributes from newlines, trailing, and repeating spaces | enabled |
mergeStyles | merge multiple style elements into one | enabled |
inlineStyles | move and merge styles from <style> elements to element style attributes | enabled |
removeDoctype | remove doctype declaration | enabled |
removeXMLProcInst | remove XML processing instructions | enabled |
removeComments | remove comments | enabled |
removeMetadata | remove <metadata> | enabled |
removeTitle | remove <title> | enabled |
removeDesc | remove <desc> | enabled |
removeUselessDefs | remove elements of <defs> without id | enabled |
removeXMLNS | removes the xmlns attribute (for inline SVG) | disabled |
removeEditorsNSData | remove editors namespaces, elements, and attributes | enabled |
removeEmptyAttrs | remove empty attributes | enabled |
removeHiddenElems | remove hidden elements | enabled |
removeEmptyText | remove empty Text elements | enabled |
removeEmptyContainers | remove empty Container elements | enabled |
removeViewBox | remove viewBox attribute when possible | enabled |
cleanupEnableBackground | remove or cleanup enable-background attribute when possible | enabled |
minifyStyles | minify <style> elements content with CSSO | enabled |
convertStyleToAttrs | convert styles into attributes | disabled |
convertColors | convert colors (from rgb() to #rrggbb , from #rrggbb to #rgb ) | enabled |
convertPathData | convert Path data to relative or absolute (whichever is shorter), convert one segment to another, trim useless delimiters, smart rounding, and much more | enabled |
convertTransform | collapse multiple transforms into one, convert matrices to the short aliases, and much more | enabled |
removeUnknownsAndDefaults | remove unknown elements content and attributes, remove attributes with default values | enabled |
removeNonInheritableGroupAttrs | remove non-inheritable group's "presentation" attributes | enabled |
removeUselessStrokeAndFill | remove useless stroke and fill attributes | enabled |
removeUnusedNS | remove unused namespaces declaration | enabled |
prefixIds | prefix IDs and classes with the SVG filename or an arbitrary string | disabled |
cleanupIDs | remove unused and minify used IDs | enabled |
cleanupNumericValues | round numeric values to the fixed precision, remove default px units | enabled |
cleanupListOfValues | round numeric values in attributes that take a list of numbers (like viewBox or enable-background ) | disabled |
moveElemsAttrsToGroup | move elements' attributes to their enclosing group | enabled |
moveGroupAttrsToElems | move some group attributes to the contained elements | enabled |
collapseGroups | collapse useless groups | enabled |
removeRasterImages | remove raster images | disabled |
mergePaths | merge multiple Paths into one | enabled |
convertShapeToPath | convert some basic shapes to <path> | enabled |
convertEllipseToCircle | convert non-eccentric <ellipse> to <circle> | enabled |
sortAttrs | sort element attributes for epic readability | disabled |
sortDefsChildren | sort children of <defs> in order to improve compression | enabled |
removeDimensions | remove width /height and add viewBox if it's missing (opposite to removeViewBox, disable it first) | disabled |
removeAttrs | remove attributes by pattern | disabled |
removeAttributesBySelector | removes attributes of elements that match a CSS selector | disabled |
removeElementsByAttr | remove arbitrary elements by ID or className | disabled |
addClassesToSVGElement | add classnames to an outer <svg> element | disabled |
addAttributesToSVGElement | adds attributes to an outer <svg> element | disabled |
removeOffCanvasPaths | removes elements that are drawn outside of the viewbox | disabled |
removeStyleElement | remove <style> elements | disabled |
removeScriptElement | remove <script> elements | disabled |
reusePaths | Find duplicated elements and replace them with links | disabled |
![]() | |
---|---|
SheetJS LLC | Fontello |
This software is released under the terms of the MIT license.
Logo by André Castillo.
FAQs
Nodejs-based tool for optimizing SVG vector graphics files
The npm package @kingyue/svgo receives a total of 0 weekly downloads. As such, @kingyue/svgo popularity was classified as not popular.
We found that @kingyue/svgo demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.
Security News
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
Research
Security News
Socket researchers uncovered a backdoored typosquat of BoltDB in the Go ecosystem, exploiting Go Module Proxy caching to persist undetected for years.