Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@catenda/svgo

svg2MIT1.3.2-color.2

Nodejs-based tool for optimizing SVG vector graphics files

svgo, svg, optimize, minify

readme

english | русский


logo

SVGO NPM version Build Status Coverage Status

SVG Optimizer is a Nodejs-based tool for optimizing SVG vector graphics files.

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:

Plugin Description Default
cleanupAttrs cleanup attributes from newlines, trailing, and repeating spaces 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 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 enabled
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 attrs with default values enabled
removeNonInheritableGroupAttrs remove non-inheritable group's "presentation" attributes enabled
removeUselessStrokeAndFill remove useless stroke and fill attrs 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 <path> elements and replace them with <use> 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

SheetJS LLC Fontello

Donations

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

Logo by Yegor Bolshakov.

changelog

[ > ] 1.3.2 / 30.10.2019

  • Fixed TypeError: Cannot set property 'multipassCount' of undefined

[ > ] 1.3.1 / 29.10.2019

  • Updated CSSO version to 4.0.2 fixing the issue with empty semicolons ";;" in styles (thanks to @strarsis and @lahmatiy).
  • prefixIds plugin now runs only once with --multipass option (by @strarsis).
  • cleanupIDs plugin is prevented from producing a preserved ID, including one which matches a preserved prefix, when minifying (by @thomsj).

[ > ] 1.3.0 / 14.07.2019

  • Custom plugins now can be loaded from external js through path plugin param.
  • New plugin convertEllipseToCircle to convert ellipse with equal radius measures to circle (by @tigt).
  • New plugin sortDefsChildren for improved compression (by @davidleston).
  • SVGO now removes unnecessary spaces after arcto path command flags.
  • removeDimensions plugin now adds viewBox if it's missing (by @adipascu).
  • Fixed removeUnusedNS not counting attributes in <svg> tag itself.
  • Fixed an issue with incorrect processing multiple images (by @cyberalien).
  • Fixed an error with incorrect converting multiple segmented curve to an arc.
  • Fixed an error with matrix decomposition in convertTransform due to rounding error leading to illegal value.
  • Added force option for mergePaths plugin (by @goyney).
  • Added options to prefixIds plugin for selectively prefixing IDs and/or classes (by @strarsis).
  • Exported config function (by @1000ch).

[ > ] 1.2.2 / 16.04.2019

  • Update js-yaml for Code Injection warning (by @kaungst).

[ > ] 1.2.1 / 04.04.2019

Some goodness from pull-requests.

  • Bump up js-yaml version to fix DoS vulnerability (by @eugestarr).

[ > ] 1.2.0 / 24.02.2019

Some goodness from pull-requests.

  • Fixed extra blank lines when processing many files (by @panczarny).
  • Added --recursive option to process folders recursevely with option -f (by @dartess).
  • Added removeAttributesBySelector plugin to remove elements matching a css selector (by @bmease).
  • Added removeOffCanvasPaths plugin to remove elements outside of the viewbox (by @JoshyPHP).
  • removeAttrs plugin: added preserveCurrentColor color (by @roblevintennis) and 3rd optional filter for a value (by @Herman-Freund).
  • Added reusePaths plugin to replace duplicated elements with link (by @jhowcrof).
  • Added support of comma-separated plugins list in --disable and --enable options (by @jmwebservices).
  • Added option to preserve IDs based on prefix in cleanupIDs plugin (by @bkotzz).
  • Replaced colors dependency with chalk (by @xPaw).

[ > ] 1.1.1 / 17.09.2018

  • Fixed crash in SVGO.optimize() when ‘info’ is absent.
  • Removed extra space after cleanupListOfValues plugin.

[ > ] 1.1.0 / 16.09.2018

  • Fixed collapseGroups plugin removing property with a child having inherit value.
  • version attribute value is not more being rounded.
  • Fixed jsAPI clone method with respect to the introduced CSS classes.
  • Fixed scaling strokes with vector-effect="non-scaling-stroke" (by @alexjlockwood).
  • Fixed passing properties from groups in collapseGroups plugin if child have a filter (by @stristr).
  • Fixed arc path commands parsing without separators after flags, effectively producing a JS error.
  • Fixed viewBox separators parsing.
  • Fixed removeNonInheritableGroupAttrs plugin to work as intended.
  • Fixed removing path segments without length in presence of stroke-linecap.
  • Fixed removeUnknownsAndDefaults plugin removing attributes from elements with id.
  • Fixed converting to large arcs from nearly straight lines curves.
  • Fixed collapseGroups plugin affecting <switch> and its subgroups.
  • Fixed convertTransform plugin converting to rotate() with wrong sign in some case.
  • Fixed cleanupListOfValues plugin not preserving non-numeric values.
  • Fixed !important being passed to attributes in convertStyleToAttrs plugin.
  • Added option keepImportant to convertStyleToAttrs plugin to preserve styles with !important.
  • removeHiddenElems plugin now also removes elements with visibility="hidden" attribute (by @mikolaj92).
  • Added forceAbsolutePath option to convertPathData plugin to always use absolute coordinates (by @cool).
  • Added keepRoleAttr for removeUnknownsAndDefaults plugin to preserve role- attributes (by @himedlooff).
  • Added xmlns order option in sortAttrs plugin (by @hellatan).
  • Added an option to prefixIds plugin to pass prefix as false or as a function that returns false (by @vzaidman).
  • prefixIds plugin now adds prefix to every class (by @vzaidman).
  • Updated and improved docs a bit (multiple authors).

[ > ] 1.0.5 / 26.02.2018

  • Fixed issue with prefixIDs plugin not replacing url() values correctly (by @harrisjose).

[ > ] 1.0.4 / 30.01.2018

  • Fixed bug with removing groups that are direct child of "<switch>".
  • Fixed bug with shorthand path points counting (thanks @alexjlockwood for noticing).
  • Fixed crash on parsing invalid transform, e.g. without close parenthesis.

[ > ] 1.0.3 / 08.11.2017

  • Fixed removeViewBox plugin to check for zero start coordinates.
  • Removed extra info from STDOUT when it set to output.

[ > ] 1.0.2 / 03.11.2017

  • Fixed a couple of errors related to inlineStyles plugin.
  • Updated some lost details in documentation to reflect v1.0 changes.

[ > ] 1.0.1 / 31.10.2017

  • Fixed error “Object.defineProperty called on non-object” in images with <foreignObject/>.

[ > ] 1.0.0 / 30.10.2017

  • SVGO now requires Node 4 or higher.
  • Changed CLI syntax to treat filenames as input, thus allowing svgo *.svg syntax.
  • SVGO.optimize() now returns Promise.
  • Added datauri option to JS API.
  • Added support for SVG 2 href attribute.
  • cleanupIDs now don't removes IDs if an image consists only of defs.
  • New plugin inlineStyles for converting styles from <style> element to attributes if possible (by @strarsis).
  • cleanupNumericValues now rounds values in viewBox (by @caub).
  • New plugin: removeScriptElement (disabled by default) to align with removeStyleElement (by @pklingem).
  • minifyStyles now removes styles based on usage with controlling options (by @lahmatiy).
  • New option except in cleanupIDs to keep IDs (by @Velenir).
  • New option force in cleanupIDs to work even if SVG contains style or script elements (by @Velenir).
  • Fixed arcs transforming with different signed scale parameters (by @JoshyPHP).
  • Fixed removeUselessStrokeAndFill to check for style or script elements per file (by @caub).
  • New option keepAriaAttrs in removeUnknownsAndDefaults (by @davidtheclark).
  • Corrected parsing in cleanupIDs to account animation syntax (by @caub).
  • #ff0000 now converts to red as well as #f00 (by @davidleston).
  • Added “gray” variation to colors list per CSS Color Module Level 4 (by @ydaniv).
  • Fixed error on empty files.
  • A separator character in removeAttrs now can be changed per elemSeparator option (by @mikestreety).
  • addAttributesToSVGElement now can add values to attributes.

[ > ] 0.7.2 / 29.01.2017

  • Extended currentColor match conditions (string, rx, bool) (by @AlimovSV)
  • Fixed removing <animate> in <stop>.
  • Fixed removing same transform in inner element in removeUnknownsAndDefaults.
  • Fixed collapsing groups with same non-inheritable attribute.
  • Corrected removing of leading zero in case of exponential notation.

[ > ] 0.7.1 / 27.09.2016

  • Reverted the requirement of Node.js to version 0.10.
  • Added addAttributesToSVGElement to the default config to allow using it with --enable option.
  • Added korean translation of “How it works” doc (by @primeiros).

[ > ] 0.7.0 / 25.08.2016

  • Required Node.js version has increased to 0.12.
  • New plugins: removeElementsByAttr (by IDs or classes) by @elidupuis, addAttributesToSVGElement by @gjjones, removeXMLNS (for SVG inlining) by @ricardobeat.
  • Tests now correctly pass in Windows with CRLF line endings. Pretty print now accounts system line endings.
  • Fixed bugs with collapsing groups with masks and transforms in collapseGroups.
  • Fixed bugs with erroneous removing IDs in cleanupIDs.
  • Improved attributes sorting in sortAttrs by @darktrojan.
  • addClassesToSVGElement no more repeats classes (by @ricardobeat).

[ > ] 0.6.6 / 25.04.2016

  • Corrected CSSO API usage

[ > ] 0.6.5 / 25.04.2016

  • Extra content inserted by editors are now being removed within <foreignObject> as well thus fixing bug “Namespace prefix … is not defined“ after applying SVGO.
  • Doctype with entities declaration is now also being removed since svgo correctly parses them starting from the version 0.6.2.
  • Corrected moveGroupAttrsToElems not to move attributes to g content if it's referenced (has an id).
  • collapseGroups now don't collapse a group if it has an animated attribute (SMIL).

[ > ] 0.6.4 / 05.04.2016

  • Fixed bug in “convertStyleToAttrs” plugin with converting styling properties to non-existent attributes (which are normally removed later by removeUnknownsAndDefaults).
  • Added --indent option to style pretty-printed SVG. (e.g. --indent 2) (by @scurker).
  • Added currentColor param to convertColors plugin for converting values like fill and stroke to currentColor (by @scurker).
  • Bumped CSSO to the current version and used its new shiny API (thanks to @lahmatiy).

[ > ] 0.6.3 / 20.03.2016

  • Smart rounding (introduced in 0.4.5) now applies only when rounding is needed, thus making subsequent passes more stable.
  • Fixed regression in converting curves to arcs.
  • xlink:href references are now being checked by local name href, thus correctly working with another namespace prefix.
  • Fixed id removing with disabled plugins/convertStyleToAttrs.js.

[ > ] 0.6.2 / 08.03.2016

  • Better error handling and messaging improvements.
  • SVG files with XML entities (e.g. from Adobe Illustrator) are now correctly being parsed.
  • Fixed error on converting curves to arcs.
  • Corrected rounding in subsequent passes with --multipass option.
  • Data URI option now handles charset (by @holymonson)
  • Transformations are no longer moved to group if there is a mask (plugins/moveElemsAttrsToGroup.js).
  • Fixed matrix decomposition losing sign in case like [1, 0, 0, -1, 0, 0] (scale(1 -1)).
  • Fixed crash on uppercased color name.
  • Paths with id and without stroke-width aren't being transformed now since stroke-width may be applied later.

[ > ] 0.6.1 / 21.11.2015

  • Added option --quiet to suppress output (by @phihag).
  • Removed lib-cov folder from the package, which was erroneously included before.
  • Fixed errors in “minifyStyles” when there are <style> elements with CDATA content or without content at all.
  • Amended transform functions parsing to prevent errors when there are no separators between numbers (which isn't allowed by syntax, but understood by browsers).

[ > ] 0.6.0 / 08.11.2015

  • New optimization: circular curves now being converted to arcs. A notable improvement for circles within paths.
  • New plugin “minifyStyles” which minifies <style> elments content with CSSO by @strarsis (svgo still doesn't understand its content)
  • New plugin “removeStyleElement” (disabled by default) by @betsydupuis.
  • Fixed issues with parsing numbers with exponent fraction (could happen with high precision >= 7).
  • Fixed rounding error due to incorrect preserving of precision in transformations.
  • Fixed shorthand curve distortion due to converted previous curve to not a curve.
  • Fixed interoperability issue with precision cli-option and full config.
  • Fixed an error produced by “removeUnknownsAndDefaults” by @thiakil
  • Another Inkscape prefix namespace is being removed.
  • Fixed an issue in moveElemsAttrsToGroup“” with transforms moved around clip-path.

[ > ] 0.5.6 / 13.08.2015

  • Fixed paths removing.

[ > ] 0.5.5 / 05.08.2015

  • Reverted debugging changes.

[ > ] 0.5.4 / 05.08.2015

  • New parameter useShortTags by @bradbarrow. Now svgo can produce correct non-selfclosing tags (useful in HTML in old browsers).
  • Fixed failing on empty transformation (which could be produced by two opposite).
  • Fixed removing paths which have numbers with exponent notation.
  • Fixed a bug with arc transformation.
  • Some typo fixes.

[ > ] 0.5.3 / 21.06.2015

  • Fixed breaking related to rounding functions in “convertTransform”.
  • Fixed a bug with ID in animations not being worked on by “cleanupIDs”.
  • Fixed a bug with quoted reference in url().
  • Now, if there are several same IDs in the document, then the first one is used and others are being removed.
  • New command-line option --show-plugins displaying list of plugins.
  • Two new optional plugins: “removeDimensions” (removes width and height if there is viewBox) and “removeAttrsPlugin” (by @bennyschudel).

[ > ] 0.5.2 / 24.05.2015

  • Introduced new transformPrecision option for better image quality (defaults to 5) in “convertTransform” and “convertPathData” (for the purpose of applying transformations) plugins.
  • Matrix transformations now can be decomposed into a combination of few simple transforms like translate, rotate, scale.
  • Arcs (paths arcto command) are now correctly being transformed into another arcs without being converting to Bezier curves.
  • Fixed an issue with “mergePaths” failing to detect paths intersection in some cases.
  • Fixed a bug with “removeUnknownsAndDefaults” removing some paths, which was introduced in v0.5.1.
  • Fixed a bug with transformation having rotate() with optional parameters.
  • Patterns with inherited attributes are no longer being removed.
  • Styles are no longer being removed from <desc> (by @dennari).
  • SVGO no longer breaks during parsing.
  • Added clone() method to JSAPI (by @jakearchibald)

[ > ] 0.5.1 / 30.03.2015

  • added new command-line option to set precision in floating point numbers.
  • fixed all known image-disruptive bugs
  • Notably mergePaths plugin now checks for possible intersections to avoid side-effects
  • new plugin removeUselessDefs to remove elements in <defs> and similar non-rendering elements without an id and thus cannot be used
  • fix for --multipass command line option (by @dfilatov)
  • improved cleanupEnableBackground and convertColors plugins (by @YetiOr)
  • new plugin for image manipulation cleanupListOfValues (by @kiyopikko)
  • fixed fail on comments after closing root </svg> tag
  • updated parsing to account meaningful spaces in <text>
  • data-* attributes are now preserved in removeUnknownsAndDefaults
  • prevented plugins from failing in <foreignObject>
  • cleanupNumericValues plugin now converts other units to pixels (if it's better)
  • removeUselessStrokeAndFill plugin is enabled again with correct work in case of inherited attributes
  • fixed fail on images with incorrect paths like <path d="z"/>
  • svgo now understands if an input is a folder (remember, you can set output to folder as well)
  • added support for some properties from SVG 2 like vector-effect="non-scaling-stroke"
  • removed option to remove an id on root <svg> tag in removeUnknownsAndDefaults since it's already being done in cleanupIDs

[ > ] 0.5.0 / 05.11.2014

  • added --multipass command line option which repeatedly applies optimizations like collapsing groups (by @dfilatov)
  • exposed JSAPI as a factory method (by @mistakster)
  • added removeDesc plugin (by @dwabyick), disabled by default
  • removeUselessStrokeAndFill plugin is disabled by default since it's unable to check inherited properties
  • transformations now apply to paths with arcs in plugins/convertPathData
  • a lot of bug fixes mostly related to transformations

[ > ] 0.4.5 / 02.08.2014

  • significally improved plugin plugins/convertPathData:
    • Now data is being written relative or absolute whichever is shorter. You can turn it off by setting utilizeAbsolute to false.
    • Smarter rounding: values like 2.499 now rounds to 2.5. Rounding now takes in account accumulutive error meaning that points will not be misplaced due to rounding more than it neccessary.
    • Fixed couple bugs.
  • --output option now can be a folder along with --folder, thanks to @mako-taco.
  • plugins/cleanupIDs now have prefix option in case you want to combine multiple svg later (by @DanielMazurkiewicz).
  • Quotes now being escaped in attributes (by @ditesh).
  • Minor bugfixes.

[ > ] 0.4.4 / 14.01.2014

  • new plugin plugins/removeTitle (disabled by default, close #159)
  • plugins/convertPathData: skip data concatenation for z instruction in collapseRepeated
  • plugins/removeUnknownsAndDefaults: do not remove overriden attributes with default values (fix #161 and #168)
  • plugins/removeViewBox: disable by default (fix #139)
  • update README with gulp task

[ > ] 0.4.3 / 02.01.2014

[ > ] 0.4.2 / 19.12.2013

  • add lcov.info to npmignore
  • fix js-yaml version to suppress deprecation warning in stdout

[ > ] 0.4.1 / 18.11.2013

  • node >=0.8.0

[ > ] 0.4.0 / 18.11.2013

  • merge almost all pull-requests
  • update dependencies

[ > ] 0.3.7 / 24.06.2013

  • do not remove result attribute from filter primitives (fix #122)
  • plugins/cleanupAttrs: replace newline with space when needed (fix #119)
  • lib/coa: look for config file in current folder
  • lib/coa: always traverse all files in the given folder
  • deprecate svgo-grunt in favor of grunt-svgmin
  • re-enable node-coveralls

[ > ] 0.3.6 / 06.06.2013

  • plugins/removeNonInheritableGroupAttrs: more attrs groups to exclude (fix #116 & #118)
  • lib/coa: optimize folder file by file (temp fix #114)
  • .jshintrc: JSHint 2.0
  • temporarily disable node-coveralls

[ > ] 0.3.5 / 07.05.2013

  • plugins/transformsWithOnePath: fix curves bounding box calculation
  • plugins/transformsWithOnePath: fix possible c+t or q+s bug

[ > ] 0.3.4 / 06.05.2013

  • plugins/convertPathData: fix m->M bug in some cases
  • plugins/transformsWithOnePath: fix last point calculation for C/S/Q/T
  • plugins/mergePaths: add space delimiter between z and m

[ > ] 0.3.3 / 05.05.2013

  • plugins/convertPathData: convert very first m to M, fix applyTransforms with translate() (fix #112)
  • plugins/transformsWithOnePath: fix real width/height rounding; fix scale transform origin; reorder transforms
  • plugins/transformsWithOnePath: ability to set new width or height independently with auto rescaling

[ > ] 0.3.2 / 03.05.2013

  • new plugin plugins/sortAttrs
  • plugins/transformsWithOnePath: buggy hcrop (fix #111)
  • Impossible to set output presision to 0 (no fractional part) (fix #110)
  • Istanbul + coveralls.io
  • update README with NPM version from badge.fury.io
  • update README with dependency status from gemnasium.com
  • npmignore unneeded files
  • reoptimized project logo

[ > ] 0.3.1 / 15.04.2013

  • plugins/transformsWithOnePath: resize SVG and automatically rescale inner Path
  • better errors handling

[ > ] 0.3.0 / 12.04.2013

  • global refactoring: getting rid of the many dependencies
  • new plugin plugins/mergePaths
  • new plugin plugins/transformsWithOnePath (renamed and featured cropAndCenterAlongPath)
  • config: replace default config with full: true
  • coa: JSON string as value of --config
  • coa: different types of Data URI strings (close #105)
  • plugins/_transforms: allow spaces at the beginning of transform
  • Travis CI: Nodejs 0.10 & 0.11
  • node.extendwhet.extend
  • update .gitignore
  • update docs

[ > ] 0.2.4 / 05.04.2013

[ > ] 0.2.3 / 22.02.2013

[ > ] 0.2.2 / 09.02.2013

  • plugins/convertTransforms: wrong translate() shorthand (fix #94)
  • yaml.jsjs-yaml
  • update outdated deps

[ > ] 0.2.1 / 18.01.2013

  • plugins/moveElemsAttrsToGroup + plugins/moveGroupAttrsToElems: move or just leave transform attr from Group to the inner Path Elems (close #86)
  • plugins/removeViewBox: doesn't catch floating-point numbers (fix #88)
  • plugins/cleanupEnableBackground: doesn't catch floating-point numbers (fix #89)
  • plugins/cleanupNumericValues: wrong floating-point numbers regexp (fix #92)
  • SVG file generated by fontcustom.com not properly compressed (fix #90)
  • README.ru.md: стилизация русского языка, улучшение языковых конструкций, правка ошибок (close #91)
  • minor JSHint warning fix

[ > ] 0.2.0 / 23.12.2012

  • plugins/convertPathData: apply transforms to Path pata (close #33)
  • plugins/convertPathData: -1.816-9.278.682-13.604 parsing error (fix #85)
  • plugins/convertTransform: translate(10, 0) eq translate(10), but not translate(10, 10) eq translate(10) (fix #83)
  • run plugins/cleanupIDs before plugins/collapseGroups (fix #84)
  • update .gitignore

[ > ] 0.1.9 / 17.12.2012

  • plugins/cleanupIDs: renamed from removeUnusedIDs; minify used IDs (fix #7)
  • lib/svgo/js2svg: restore HTML entities back (fix #80 + #81)
  • plugins/removeDoctype: do not remove if custom XML entities presents (fix #77)
  • lib/svgo/coa: refactoring, colors and fix #70
  • lib/svgo: store elapsed time in result object
  • usage examples with SVGZ (close #18)
  • more optimized logo
  • update .gitignore

[ > ] 0.1.8 / 11.12.2012

[ > ] 0.1.7 / 08.12.2012

  • plugins/convertPathData: incorrect interpretation of z + m (fix #69)
  • plugins/convertTransform: do a more accurate floating numbers rounding in matrixToTransform() (fix #68)

[ > ] 0.1.6 / 07.12.2012

  • plugins/convertPathData: collapse repeated instructions only after curveSmoothShorthands (fix #64)
  • lib/svgo/coa: handle 'there is nothing to optimize' case and display a message about it (fix #61)
  • plugins/cleanupSVGElem: delete as useless artefact

[ > ] 0.1.5 / 06.12.2012

  • E-notated numbers in paths not recognised (fix #63)
  • update README with svgo-grunt and svgo-osx-folder-action
  • fix mocha-as-promised plug in node 0.6

[ > ] 0.1.4 / 05.12.2012

  • plugins/_collections: more defaults
  • README.ru.md
  • docs/how-it-works/ru.md
  • mocha + mocha-as-promised + chai + chai-as-promised + should + istanbul = <3
  • update dependencies semvers in package.json
  • v0.1.x and v0.2.x milestones

[ > ] 0.1.3 / 30.11.2012

  • new plugin plugins/cleanupNumericValues (close #8)
  • plugins/removeDefaultPx functionality now included in plugins/removeUnknownsAndDefaults
  • plugins/removeUnknownsAndDefaults: refactoring and picking up the complete elems+attrs collection (close #59)
  • plugins/convertTransform: error in matrices multiplication (fix #58)
  • plugins/convertTransform: mark translate() and scale() as useless only with one param (fix #57)
  • plugins/convertPathData: drastic speed improvement with huge Path data
  • plugins/convertPathData: fix the very first Mm with multiple points (fix #56)
  • plugins/moveElemsAttrsToGroup: additional check for transform attr
  • brand-new project logo.svg
  • .travis.yml: build only master branch
  • global 'use strict'
  • .jshintignore
  • README and CHANGELOG: minor corrections

[ > ] 0.1.2 / 24.11.2012

  • lib/svgo/svg2js: correct 'onerror' failure (fix #51)
  • config: disable sax-js position tracking by default (fix #52)
  • lib/svgo: rename 'startBytes' to 'inBytes' and 'endBytes' to 'outBytes' (close #53)
  • plugins/removeUnknownsAndDefaults: remove SVG id attr (close #54)

[ > ] 0.1.1 / 23.11.2012

  • plugins/moveElemsAttrsToGroup: fix inheitable only attrs array (fix #47)
  • plugins/removeEmptyContainers: do not remove an empty 'svg' element (fix #48)
  • plugins/removeDefaultPx: should also understand a floating-numbers too (fix #49)
  • plugins/removeUnknownsAndDefaults: merge multiple groupDefaults attrs (close #50)

[ > ] 0.1.0 / 22.11.2012

  • new plugin plugins/removeUnknownsAndDefaults (close #6)
  • plugins/convertPathData: convert straight curves into lines segments (close #17); remove an absolute coords conversions
  • plugins/convertPathData: convert quadratic Bézier curveto into smooth shorthand (close #31)
  • plugins/convertPathData: convert curveto into smooth shorthand (close #30)
  • lib/svgo: global API refactoring (close #37)
  • lib/svgo: fatal and stupid error in stream chunks concatenation (fix #40)
  • lib/coa: batch folder optimization (close #29)
  • lib/coa: support arguments as aliases to --input and --output (close #28)
  • project logo by Egor Bolhshakov
  • move modules to ./lib/svgo/
  • rename and convert config.json to .svgo.yml
  • add ./docs/
  • plugins/convertPathData: don't remove first M even if it's 0,0
  • plugins/convertPathData: stronger defense from infinite loop
  • plugins/moveElemsAttrsToGroup: should affect only inheritable attributes (fix #46)*
  • plugins/removeComments: ignore comments which starts with '!' (close #43)
  • config: cleanupAttrs should be before convertStyleToAttrs (fix #44)*
  • lib/svgo/jsAPI: add eachAttr() optional context param
  • temporarily remove PhantomJS and --test (close #38)
  • q@0.8.10 compatibility: 'end is deprecated, use done instead' fix
  • add Istanbul code coverage
  • update dependencies versions and gitignore
  • README: add TODO section with versions milestones
  • update README with License section
  • update LICENSE with russian translation
  • .editorconfig: 2 spaces for YAML

[ > ] 0.0.9 / 29.10.2012

  • plugins how-to (close #27)
  • allow any plugin of any type to go in any order (close #14)
  • allow to do a multiple optimizations with one init (close #25)
  • plugins/convertPathData: global refactoring
  • plugins/convertPathData: do all the tricks with absolute coords too (fix #22)
  • plugins/convertPathData: accumulation of rounding errors (fix #23)
  • plugins/convertPathData: prevent an infinity loop on invalid path data (fix #26)
  • plugins/convertPathData: do not remove very first M from the path data (fix #24)
  • plugins/convertPathData: optimize path data in <glyph> and <missing-glyph> (close #20)
  • plugins/convertTransform: add patternTransform attribute to the process (close #15)
  • plugins/convertTransform: Firefox: removing extra space in front of negative number is alowed only in path data, but not in transform (fix #12)
  • plugins/removeXMLProcInst: remove only 'xml' but not 'xml-stylesheet' (fix #21)
  • plugins/collapseGroups: merge split-level transforms (fix #13)
  • jsdoc corrections

[ > ] 0.0.8 / 20.10.2012

  • new plugin convertTransform (close #5)
  • new plugin removeUnusedNS
  • plugins/convertPathData: remove useless segments
  • plugins/convertPathData: a lot of refactoring
  • plugins/convertPathData: round numbers before conditions because of exponential notation (fix #3)
  • plugins/moveElemsAttrsToGroup: merge split-level transforms instead of replacing (fix #10)
  • lib/svg2js: catch and output xml parser errors (fix #4)
  • lib/coa: open file for writing only when we are ready (fix #2)
  • lib/tools: node.extend module
  • lib/plugins: refactoring
  • lib/js2svg: refactoring
  • lib/jsAPI: simplification and refactoring
  • absolute urls in README
  • update .editorconfig
  • update .travis.yml with nodejs 0.9

[ > ] 0.0.7 / 14.10.2012

  • new plugin convertPathData
  • --input data now can be a Data URI base64 string
  • --output data now can be a Data URI base64 string with --datauri flag
  • Travis CI
  • JSHint corrections + .jshintrc
  • .editorconfig
  • display time spent on optimization
  • .svgo → config.json
  • lib/phantom_wrapper.js → lib/phantom.js

[ > ] 0.0.6 / 04.10.2012

  • add --test option to make a visual comparison of two files (PhantomJS pre-required)
  • update README and CHANGELOG with the correct relative urls

[ > ] 0.0.5 / 03.10.2012

  • every plugin now has at least one test
  • removeViewBox, cleanupEnableBackground, removeEditorsNSData, convertStyleToAttrs and collapseGroups plugins fixes
  • new --pretty option for the pretty printed SVG
  • lib/config refactoring

[ > ] 0.0.4 / 30.09.2012

[ > ] 0.0.3 / 29.09.2012

  • plugins/collapseGroups bugfix
  • plugins/moveElemsAttrsToGroup bugfix
  • svgo now display --help if running w/o arguments
  • massive jsdoc updates
  • plugins engine main filter function optimization

[ > ] 0.0.2 / 28.09.2012

  • add --disable and --enable command line options
  • add an empty values rejecting to coa.js
  • update README

[ > ] 0.0.1 / 27.09.2012

  • initial public version