Svgo Versions Save

⚙️ Node.js tool for optimizing SVG files

v2.6.1

2 years ago

Thanks to @XhmikosR, @thewilkybarkid, @renatorib, @matheus1lva, @omgovich and @TrySound

v2.6.0

2 years ago

If you enjoy SVGO and would like to support our work, consider sponsoring us directly via our OpenCollective.

We have some good stuff in this release

Better syntax errors (https://github.com/svg/svgo/pull/1553)

Before people struggled to figure out what and why happens with such cryptic error

Error: Error in parsing SVG: Unquoted attribute value
Line: 1
Column: 29
Char: 6
File: input.svg

This gives too little information when a lot of svgs are transformed.

New errors look like this, include context and point to exact location with the issue. We hope this will solve many issues when dealing with bundlers and other tools integrations.

Error: SvgoParserError: input.svg:2:29: Unquoted attribute value

  1 | <svg viewBox="0 0 120 120">
> 2 |   <circle fill="#ff0000" cx=60.444444" cy="60" r="50"/>
    |                             ^
  3 | </svg>
  4 |

pefixIds plugin is now idempotent (https://github.com/svg/svgo/pull/1561)

To get better compression results SVGO uses multipass option. This option is used to run prefixIds plugin only once to prefix ids and classes properly.

Though sometimes users run svgo manually a few times which leads to duplicated prefixes and make code much bigger. To solves this prefixIds was redesigned to add prefix only when it does not exit in ids and classes.

Eventually all plugins are planned to be determenistic and idempotent so multipass option would not be necessary and single pass compression could be as effective as possible.

New js2svg options (https://github.com/svg/svgo/pull/1546)

js2svg.eol: 'lf' | 'crlf'

Allows to customize end of line characters which is usually resolved by os.EOL in node.

finalNewline: boolean

Ensures SVG output has a final newline which is required for some tools like git.

Fixes and refactorings

Follwing plugins are migrated to the new visitor plugin api and covered with tsdoc

Also fixed a few bugs

Thanks to @XhmikosR, @matheus1lva, @deepsweet, @omgovich, @adalinesimonian and @TrySound

v2.5.0

2 years ago

In this release we have a couple of fixes

Visitor api now get parentNode in enter and exit callback

return {
  element: {
    enter: (node, parentNode) => {
    },
    exit: (node, parentNode) => {
    }
  }
}

And a lot of plugins are migrated to visitor api and covered them with tsdoc

  • addAttributesToSVGElement
  • addClassesToSVGElement
  • cleanupAttrs
  • cleanupEnableBackground
  • cleanupListOfValues
  • cleanupNumericValues
  • convertColors
  • convertEllipseToCircle
  • convertShapeToPath
  • convertTransform
  • mergePaths
  • removeAttributesBySelector
  • removeAttrs
  • removeComments
  • removeDesc
  • removeDoctype
  • removeElementsByAttr
  • removeEmptyText
  • removeMetadata
  • removeRasterImages
  • removeScriptElement
  • removeStyleElement
  • removeTitle
  • removeXMLProcInst
  • removeHiddenElems
  • removeViewBox
  • removeUselessDefs
  • removeOffCanvasPaths
  • removeUnknownsAndDefaults
  • sortDefsChildren

Thanks to @XhmikosR, @morganney, @oBusk, @matheus1lva and @TrySound

v2.4.0

2 years ago

Hey everybody!

In this release I happy to introduce the new plugin "preset-default" which allows to declaratively setup and customize default set of plugins. Previous solution extendDefaultPlugins utility prevented parcel users from using cachable json config, svgo-loader and svgo-jsx required svgo to be installed locally. "preset-default" plugin is just another builtin plugi.

module.exports = {
  plugins: [
    {
      name: 'preset-default',
      params: {
        overrides: {
          // customize options
          builtinPluginName: {
            optionName: 'optionValue',
          },
          // or disable plugins
          anotherBuiltinPlugin: false,
        },
      },
    },
  ],
};

We also fixed a few bugs

Thanks to @TrySound, @ydaniv, @ludofischer, @XhmikosR and @joseprio

v2.3.1

2 years ago

Fixed vulnerability in css-select dependency (https://github.com/svg/svgo/pull/1485)

Thanks to @ericcornelissen

v2.3.0

3 years ago

Hey, everybody! We have a big release here.

  • The new plugin is added for merging style elements into one. See #1381

Before:

<svg>
  <style media="print">
    .st0{ fill:red; padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; }
  </style>
  <style>
    .test { background: red; }
  </style>
</svg>

After:

<svg>
  <style>
    @media print{
      .st0{ fill:red; padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; }
    }
    .test { background: red; }
  </style>
</svg>
  • CLI got new --exclude flag which uses regexps to exclude some files from --folder. See #1409
svgo --folder=svgs --exclude "invalid-icon" "bad-.+"
  • Internal AST is migrated to XAST. This spec makes maintaining plugins easier and may be used as interop with other tools like SVGR.

  • The new visitor plugin type combines features of "full", "perItem" and "perItemReverse" plugins without loosing simplicity. Eventually only visitor api will be supported. See #1454

Also small fixes

Thanks to @chambo-e, @strarsis, @XhmikosR, @omgovich and @TrySound

v2.2.2

3 years ago

v2.2.1

3 years ago

This is a big patch with new style computing (https://github.com/svg/svgo/pull/1399) and landed to master regression tests

A lot of bugs are fixed

435 of 526 regression tests are passing

Thanks to @XhmikosR @sk- and @TrySound

v2.2.0

3 years ago

Wow, two minor releases in a row. There is a big reason for that. We got a new logo! See it in readme. Big thanks to @DerianAndre.

There were also implemented brand new path data parser and stringifier (https://github.com/svg/svgo/pull/1378 and https://github.com/svg/svgo/pull/1387) to do more reliable transformations and produce smaller svg.

A cup of small fixes

Thanks to @sk- @XhmikosR @deepsweet and @TrySound

v2.1.0

3 years ago

This release introduced two big changes

  • we forked sax parser to fix issues inaccessible from public api (https://github.com/svg/sax)
  • we added regression tests which already caught 4 bugs (WIP)

See fixed bugs

Thanks to @XhmikosR @sk- @chromakode @devongovett and @TrySound