svgo

english | русский


logo

Why?

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.

What it can do

SVGO has a plugin-based architecture, so almost every optimization is a separate plugin.

Today we have:

PluginDescriptionDefault

cleanup attributes from newlines, trailing, and repeating spaces

enabled

move and merge styles from <style> elements to element style attributes

enabled

remove doctype declaration

enabled

remove XML processing instructions

enabled

remove comments

enabled

remove <metadata>

enabled

remove <title>

enabled

remove <desc>

enabled

remove elements of <defs> without id

enabled

removes xmlns attribute (for inline svg)

disabled

remove editors namespaces, elements, and attributes

enabled

remove empty attributes

enabled

remove hidden elements

enabled

remove empty Text elements

enabled

remove empty Container elements

enabled

remove viewBox attribute when possible

enabled

remove or cleanup enable-background attribute when possible

enabled

minify <style> elements content with CSSO

enabled

convert styles into attributes

enabled

convert colors (from rgb() to #rrggbb, from #rrggbb to #rgb)

enabled

convert Path data to relative or absolute (whichever is shorter), convert one segment to another, trim useless delimiters, smart rounding, and much more

enabled

collapse multiple transforms into one, convert matrices to the short aliases, and much more

enabled

remove unknown elements content and attributes, remove attrs with default values

enabled

remove non-inheritable group's "presentation" attributes

enabled

remove useless stroke and fill attrs

enabled

remove unused namespaces declaration

enabled

prefix IDs and classes with the SVG filename or an arbitrary string

disabled

remove unused and minify used IDs

enabled

round numeric values to the fixed precision, remove default px units

enabled

round numeric values in attributes that take a list of numbers (like viewBox or enable-background)

disabled

move elements' attributes to their enclosing group

enabled

move some group attributes to the contained elements

enabled

collapse useless groups

enabled

remove raster images

disabled

merge multiple Paths into one

enabled

convert some basic shapes to <path>

enabled

convert non-eccentric <ellipse> to <circle>

enabled

sort element attributes for epic readability

disabled

sort children of <defs> in order to improve compression

enabled

remove width/height and add viewBox if it's missing (opposite to removeViewBox, disable it first)

disabled

remove attributes by pattern

disabled

removes attributes of elements that match a css selector

disabled

remove arbitrary elements by ID or className

disabled

add classnames to an outer <svg> element

disabled

adds attributes to an outer <svg> element

disabled

removes elements that are drawn outside of the viewbox

disabled

remove <style> elements

disabled

remove <script> elements

disabled

Find duplicated elements and replace them with links

disabled

Want to know how it works and how to write your own plugin? Of course you want to. (동작방법)

Installation

$ [sudo] npm install -g svgo

Usage

CLI

Usage:
  svgo [OPTIONS] [ARGS]

Options:
  -h, --help : Help
  -v, --version : Version
  -i INPUT, --input=INPUT : Input file, "-" for STDIN
  -s STRING, --string=STRING : Input SVG data string
  -f FOLDER, --folder=FOLDER : Input folder, optimize and rewrite all *.svg files
  -o OUTPUT, --output=OUTPUT : Output file or folder (by default the same as the input), "-" for STDOUT
  -p PRECISION, --precision=PRECISION : Set number of digits in the fractional part, overrides plugins params
  --config=CONFIG : Config file or JSON string to extend or replace default
  --disable=PLUGIN : Disable plugin by name, "--disable=PLUGIN1,PLUGIN2" for multiple plugins
  --enable=PLUGIN : Enable plugin by name, "--enable=PLUGIN3,PLUGIN4" for multiple plugins
  --datauri=DATAURI : Output as Data URI string (base64, URI encoded or unencoded)
  --multipass : Pass over SVGs multiple times to ensure all optimizations are applied
  --pretty : Make SVG pretty printed
  --indent=INDENT : Indent number when pretty printing SVGs
  -r, --recursive : Use with '-f'. Optimizes *.svg files in folders recursively.
  -q, --quiet : Only output error messages, not regular status messages
  --show-plugins : Show available plugins and exit

Arguments:
  INPUT : Alias to --input
  • with files:

    $ svgo test.svg

    or:

    $ svgo *.svg
    $ svgo test.svg -o test.min.svg
    $ svgo test.svg other.svg third.svg
    $ svgo test.svg other.svg third.svg -o test.min.svg -o other.min.svg -o third.min.svg
  • with STDIN / STDOUT:

    $ cat test.svg | svgo -i - -o - > test.min.svg
  • with folder

    $ svgo -f ../path/to/folder/with/svg/files

    or:

    $ svgo -f ../path/to/folder/with/svg/files -o ../path/to/folder/with/svg/output
    $ svgo *.svg -o ../path/to/folder/with/svg/output
  • with strings:

    $ svgo -s '<svg version="1.1">test</svg>' -o test.min.svg

    or even with Data URI base64:

    $ svgo -s 'data:image/svg+xml;base64,...' -o test.min.svg
  • with SVGZ:

    from .svgz to .svg:

    $ gunzip -c test.svgz | svgo -i - -o test.min.svg

    from .svg to .svgz:

    $ svgo test.svg -o - | gzip -cfq9 > test.svgz

Other Ways to Use SVGO

Backers

Donations

  • PayPal: https://www.paypal.me/deepsweet

This software is released under the terms of the MIT license.

Logo by Yegor Bolshakov.

Last updated