# svgo

> SVGO is a Node.js library and command-line application for optimizing vector images.

Latest version **4.1.0** (published 2026-08-24) · MIT license · 0 weekly downloads

## Install

```sh
npm install svgo
pnpm add svgo
yarn add svgo
bun add svgo
```

Provides the command `svgo`.

## Health

**Score 80/100 (A)** — status: active.

Positive: has types; esm support; no vulnerabilities; has provenance; recently updated; high maintenance score; high quality score; popular repo.

Warnings: low downloads.

## Facts

| | |
|---|---|
| Version | 4.1.0 |
| Published | 2026-08-24 |
| First published | 2012-09-27 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM |
| Node | >=16 |
| Dependencies | 7 |
| Unpacked size | 1.4 MB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 22668 |
| Author | Kir Belevich |
| Maintainers | deepsweet, greli, trysound, sethiii |
| Keywords | svgo, svg, optimize, minify |

## Links

- npm: https://www.npmjs.com/package/svgo
- Repository: https://github.com/svg/svgo
- Homepage: https://svgo.dev
- Issues: https://github.com/svg/svgo/issues
- Funding: https://opencollective.com/svgo
- npm.io page: https://npm.io/package/svgo

## Dependencies (7)

- [sax](https://npm.io/package/sax.md) 1.6.1
- [csso](https://npm.io/package/csso.md) ^5.0.5
- [css-tree](https://npm.io/package/css-tree.md) ^3.0.1
- [css-what](https://npm.io/package/css-what.md) ^7.0.0
- [commander](https://npm.io/package/commander.md) ^11.1.0
- [css-select](https://npm.io/package/css-select.md) ^6.0.0
- [picocolors](https://npm.io/package/picocolors.md) ^1.1.1

## Recent versions

- 4.1.0 (latest) — 2026-08-24
- 2.8.4 (v2) — 2026-08-24
- 3.3.5 (v3) — 2026-08-24
- 4.0.0-rc.5 (rc) — 2025-06-11
- 2.8.3 — 2026-07-11
- 3.3.4 — 2026-07-11
- 4.0.2 — 2026-07-11
- 2.8.2 — 2026-03-04
- 2.8.1 — 2026-03-04
- 3.3.3 — 2026-03-04
- 4.0.1 — 2026-03-04
- 4.0.0 — 2025-06-21
- 4.0.0-rc.4 — 2025-05-06
- 4.0.0-rc.3 — 2025-05-06
- 4.0.0-rc.2 — 2025-05-04
- … 104 more at https://npm.io/package/svgo/versions

## README

<div align="center">
  <img src="./logo/logo-web.svg" width="348.61" height="100" alt=""/>
</div>

# SVGO [![npm](https://img.shields.io/npm/v/svgo)](https://npmjs.org/package/svgo) [![chat](https://img.shields.io/discord/815166721315831868)](https://discord.gg/z8jX8NYxrE) [![docs](https://img.shields.io/badge/docs-svgo.dev-blue)](https://svgo.dev/)

SVGO, short for <abbr title="Scalable Vector Graphics">SVG</abbr> Optimizer, is a Node.js library and command-line application for optimizing SVG files.

## Why?

SVG files, especially those exported from vector editors, usually contain a lot of redundant information. This includes editor metadata, comments, hidden elements, default or suboptimal values, and other stuff that can be safely removed or converted without impacting rendering.

## Installation

You can install SVGO globally through npm, yarn, or pnpm. Alternatively, drop the global flag (`global`/`-g`) to use it in your Node.js project.

```sh
# npm
npm install -g svgo

# yarn
yarn global add svgo

# pnpm
pnpm add -g svgo
```

## Command-line usage

Process single files:

```sh
svgo one.svg two.svg -o one.min.svg two.min.svg
```

Process a directory of files recursively with `-r`/`--recursive` and `-f`/`--folder`:

```sh
svgo -rf path/to/directory_with_svgs -o path/to/output_directory
```

Help for advanced usage:

```sh
svgo --help
```

## Configuration

SVGO has a plugin architecture. You can read more about all plugins in [Plugins | SVGO Documentation](https://svgo.dev/docs/plugins/), and the default plugins in [Preset Default | SVGO Documentation](https://svgo.dev/docs/preset-default/).

SVGO reads the configuration from `svgo.config.mjs` or the `--config path/to/config.mjs` command-line option. Some other parameters can be configured though command-line options too.

**`svgo.config.mjs`**

```js
export default {
  multipass: false, // boolean
  datauri: 'base64', // 'base64'|'enc'|'unenc'
  js2svg: {
    indent: 4, // number
    pretty: false, // boolean
  },
  plugins: [
    'preset-default', // built-in plugins enabled by default
    'prefixIds', // enable built-in plugins by name

    // enable built-in plugins with an object to configure plugins
    {
      name: 'prefixIds',
      params: {
        prefix: 'uwu',
      },
    },
  ],
};
```

### Default preset

Instead of configuring SVGO from scratch, you can tweak the default preset to suit your needs by configuring or disabling the respective plugin.

**`svgo.config.mjs`**

```js
export default {
  plugins: [
    {
      name: 'preset-default',
      params: {
        overrides: {
          // disable a default plugin
          cleanupIds: false,

          // customize the params of a default plugin
          inlineStyles: {
            onlyMatchedOnce: false,
          },
        },
      },
    },
  ],
};
```

You can find a list of the default plugins in the order they run in [Preset Default | SVGO Documentation](https://svgo.dev/docs/preset-default/#plugins-list).

### Custom plugins

You can also specify custom plugins:

**`svgo.config.mjs`**

```js
import importedPlugin from './imported-plugin';

export default {
  plugins: [
    // plugin imported from another JavaScript file
    importedPlugin,

    // plugin defined inline
    {
      name: 'customPlugin',
      params: {
        paramName: 'paramValue',
      },
      fn: (ast, params, info) => {},
    },
  ],
};
```

## API usage

SVGO provides a few low level utilities.

### optimize

The core of SVGO is `optimize` function.

```js
import { optimize } from 'svgo';

const result = optimize(svgString, {
  path: 'path-to.svg', // recommended
  multipass: true, // all other config fields are available here
});

const optimizedSvgString = result.data;
```

### loadConfig

If you write a tool on top of SVGO you may want to resolve the `svgo.config.mjs` file.

```js
import { loadConfig } from 'svgo';

const config = await loadConfig();
```

You can also specify a path and customize the current working directory.

```js
const config = await loadConfig(configFile, cwd);
```

## Donors

| [<img src="https://sheetjs.com/sketch128.png" width="80">](https://sheetjs.com/) | [<img src="https://raw.githubusercontent.com/fontello/fontello/8.0.0/fontello-image.svg" width="80">](https://fontello.com/) |
| :------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------: |
|                       [SheetJS LLC](https://sheetjs.com/)                        |                                              [Fontello](https://fontello.com/)                                               |

## License and Copyright

This software is released under the terms of the [MIT license](https://github.com/svg/svgo/blob/main/LICENSE).

Logo by [André Castillo](https://github.com/DerianAndre).

---
_Source: https://npm.io/package/svgo · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
