This website works better with JavaScript
[ > ] 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 attribue.
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
[ > ] 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 declartion 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 )
Tranformations 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 trasformed 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 wuth parsing numbers with exponent fraction (could happen with high precision >= 7).
Fixed rounding error due to incorrect preserving of precision in transformations.
Fixed shortand 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
[ > ] 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
[ > ] 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.extend
→ whet.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.js → js-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