oLoveTools

SVG Optimizer — the real svgo, in your browser

Shrink SVG files with all 45 of svgo’s plugins, switch each one on or off yourself, and see the gzipped size that actually ships. Runs in a background worker on your own machine — no upload, no queue, no sign-up.

SVG Vector FileDrag & drop an SVG file here, or click to browse
Preset Demos

How it works

Three steps, and the middle one is yours.

  1. 1

    Drop the file in

    Drag an .svg or .svgz in, paste the code, or send one over from another tool. Nothing runs yet — the file just waits.

  2. 2

    Decide what it does

    Pick a profile, or open the controls and set all 45 plugins yourself. Each one says whether it can change what you see.

  3. 3

    Take it away

    Download it, copy it as SVG, a React component or a CSS data URI, or send it straight to the next tool without a round trip through your downloads folder.

What it does

The real svgo, all 45 plugins

The same engine the whole industry builds with, running in your browser instead of your terminal. The Balanced profile matches `npx svgo` exactly, so what you see here is what your build will produce.

Opens files that others reject

Editors export invalid XML all the time — an undeclared inkscape: prefix, a bare ampersand, a byte order mark. Strict parsers refuse the whole document. This one repairs the defect, optimizes the file, and tells you exactly what it had to fix.

Precision you can see

Zoom to 4000%, pan around, and hold Alt to flip back to the original at the same magnification. Rounding damage shows up as a visible wobble long before it shows up in a percentage.

The size that actually ships

Raw bytes and gzipped bytes, side by side. They tell different stories: stripping whitespace looks spectacular raw and changes almost nothing after compression, because gzip was already handling it.

Nothing leaves your machine

The optimizer runs in a background worker inside your browser; no file is ever uploaded. The preview goes further and strips scripts, event handlers and remote references, so a hostile SVG cannot run code or phone home while you are looking at it.

Straight into the next tool

Send the optimized file to the favicon generator, the format converter, the QR builder or the zipper without downloading and re-uploading it.

Frequently Asked Questions

Is my SVG uploaded anywhere?

No. svgo runs in a worker thread inside your browser and the file never leaves your machine. The preview goes a step further: scripts, event handlers and references to remote files are stripped before anything is drawn, so opening a file someone sent you is safe.

Why does my file get rejected by other tools but work here?

Because editors export invalid XML constantly. The usual culprit is a namespace prefix used without being declared — an <g inkscape:groupmode="layer"> with no matching xmlns:inkscape. Strict parsers, svgo and your browser included, refuse the whole document. This tool repairs that (and byte order marks, bare ampersands and DOCTYPE subsets) before optimizing, and tells you exactly what it fixed.

How low can I set the precision?

It depends on the artwork, and you should look rather than guess. Lower precision rounds coordinates, and on a large or finely detailed drawing the rounding becomes visible as a wobble in curves well before the file gets meaningfully smaller. Zoom in and hold Alt to flip between the result and the original at the same magnification.

Why are the raw and gzipped percentages so different?

Because they measure different things. Removing whitespace and shortening attribute names looks dramatic in raw bytes, but gzip was already collapsing those repetitions, so the compressed size barely moves. Geometry changes — convertPathData above all — shrink both. If your server sends compressed responses, and almost every server does, the gzip figure is the one that matters.

Will the result match svgo in my build?

On the Balanced profile, yes: it is svgo's own preset-default, with the same plugin order and the same defaults. Change any switch and you have moved away from that, which the Manual label tells you.

What does "changes behaviour" mean on some plugins?

That the plugin is not just making the file smaller, it is altering what the file does. removeViewBox stops the SVG from scaling. removeDimensions makes it fill its container instead of using its own size. removeTitle deletes the accessible name screen readers announce. All of them are off by default and none is enabled by the Enable all button.

Part of the oLoveTools suite
oLoveTools

The real svgo, running locally in your browser.

A background worker, not a server

svgo runs on a worker thread inside your browser, so a multipass over a detailed map does not freeze the page and can be cancelled halfway. There is no upload step and no queue, which also means there is no file size limit beyond your own memory.

Every switch, and what each one costs

All 45 plugins are exposed individually, grouped by what they touch and labelled by risk: safe, redraws, or changes behaviour. Coordinate precision and transform precision are separate sliders, because rotations need more decimals than plain coordinates do.

Local, and safe to preview

No file is uploaded anywhere. Beyond that, an SVG is a document rather than an image: opened carelessly it can run script and fetch remote resources. This preview strips scripts, event handlers and off-origin references before anything is rendered, so inspecting a file you were sent is not a risk.

Frequently Asked Questions

Is my SVG uploaded anywhere?

No. svgo runs in a worker thread inside your browser and the file never leaves your machine. The preview goes a step further: scripts, event handlers and references to remote files are stripped before anything is drawn, so opening a file someone sent you is safe.

Why does my file get rejected by other tools but work here?

Because editors export invalid XML constantly. The usual culprit is a namespace prefix used without being declared — an <g inkscape:groupmode="layer"> with no matching xmlns:inkscape. Strict parsers, svgo and your browser included, refuse the whole document. This tool repairs that (and byte order marks, bare ampersands and DOCTYPE subsets) before optimizing, and tells you exactly what it fixed.

How low can I set the precision?

It depends on the artwork, and you should look rather than guess. Lower precision rounds coordinates, and on a large or finely detailed drawing the rounding becomes visible as a wobble in curves well before the file gets meaningfully smaller. Zoom in and hold Alt to flip between the result and the original at the same magnification.

Why are the raw and gzipped percentages so different?

Because they measure different things. Removing whitespace and shortening attribute names looks dramatic in raw bytes, but gzip was already collapsing those repetitions, so the compressed size barely moves. Geometry changes — convertPathData above all — shrink both. If your server sends compressed responses, and almost every server does, the gzip figure is the one that matters.

Will the result match svgo in my build?

On the Balanced profile, yes: it is svgo's own preset-default, with the same plugin order and the same defaults. Change any switch and you have moved away from that, which the Manual label tells you.

What does "changes behaviour" mean on some plugins?

That the plugin is not just making the file smaller, it is altering what the file does. removeViewBox stops the SVG from scaling. removeDimensions makes it fill its container instead of using its own size. removeTitle deletes the accessible name screen readers announce. All of them are off by default and none is enabled by the Enable all button.

© 2026 oLoveToolsAbout

Next step

Create a favicon from the SVG FaviconBolt

SVG Optimizer | Free Online SVG Compressor & Minifier

Optimize, clean, and minify SVG vector files 100% locally in your browser to reduce file size and improve loading performance.

Frequently Asked Questions

Is my SVG uploaded anywhere?

No. svgo runs in a worker thread inside your browser and the file never leaves your machine. The preview goes a step further: scripts, event handlers and references to remote files are stripped before anything is drawn, so opening a file someone sent you is safe.

Why does my file get rejected by other tools but work here?

Because editors export invalid XML constantly. The usual culprit is a namespace prefix used without being declared — an <g inkscape:groupmode="layer"> with no matching xmlns:inkscape. Strict parsers, svgo and your browser included, refuse the whole document. This tool repairs that (and byte order marks, bare ampersands and DOCTYPE subsets) before optimizing, and tells you exactly what it fixed.

How low can I set the precision?

It depends on the artwork, and you should look rather than guess. Lower precision rounds coordinates, and on a large or finely detailed drawing the rounding becomes visible as a wobble in curves well before the file gets meaningfully smaller. Zoom in and hold Alt to flip between the result and the original at the same magnification.

Why are the raw and gzipped percentages so different?

Because they measure different things. Removing whitespace and shortening attribute names looks dramatic in raw bytes, but gzip was already collapsing those repetitions, so the compressed size barely moves. Geometry changes — convertPathData above all — shrink both. If your server sends compressed responses, and almost every server does, the gzip figure is the one that matters.

Will the result match svgo in my build?

On the Balanced profile, yes: it is svgo's own preset-default, with the same plugin order and the same defaults. Change any switch and you have moved away from that, which the Manual label tells you.

What does "changes behaviour" mean on some plugins?

That the plugin is not just making the file smaller, it is altering what the file does. removeViewBox stops the SVG from scaling. removeDimensions makes it fill its container instead of using its own size. removeTitle deletes the accessible name screen readers announce. All of them are off by default and none is enabled by the Enable all button.