Strip the markup, keep the vectors.
Vector files exported from Illustrator, Inkscape, Sketch, or Figma carry editor metadata, comments, unused defs, and over-precise decimals — bytes that don't render. Strip them losslessly, ship a markup that's a fraction of the size and renders pixel-identical.
SVG
Strip editor data, minify markup, and round decimals on SVG vectors.
Two columns. Same vector. A whole different byte count.
FyDark SVG runs five lossless passes plus a tunable decimal precision pass. The diff shows the exact lines stripped — Illustrator generator comments, Inkscape namespaces, RDF metadata, decimal-spam — and what stays. The render is pixel-identical end-to-end.
Inkscape, Illustrator, Sketch, Figma — all stripped clean
Vector editors embed their own namespaced attributes and metadata blocks: `inkscape:label`, `sodipodi:namedview`, `Adobe Illustrator` comments, `<sketch:` / `<figma:` element soup. The optimizer recognises every editor's signature and removes the noise without touching the vectors.
Six switches, one panel, live byte impact.
Each pass is independently toggleable. Flip a switch, see the byte count update on the right; the synthesized CLI flags update at the bottom too. Compose the recipe, save it, replay across a folder.
- Remove comments
--no-commentsStrip <!-- … --> XML comments end-to-end. Toggle off to preserve copyright headers.
−110 B - Remove metadata
--no-metadataDrop <metadata> blocks and embedded RDF / Dublin Core descriptors.
−420 B - Strip editor data
--no-editorRemove Inkscape, Illustrator, Sketch, Figma namespaces and attributes.
−1600 B - Remove unused defs
--prune-defsWalk the document graph; drop <defs> entries with refcount = 0.
−860 B - Minify whitespace
--minifyCollapse indentation; normalise attribute spacing; remove trailing newlines.
−290 B - Decimal precision · 3 dp
--precision=3tunableRound path data to 3 decimals (sub-pixel safe). Configurable 0–6.
−620 B
- Remove comments−110 B
- Remove metadata−420 B
- Strip editor data−1600 B
- Remove unused defs−860 B
- Minify whitespace−290 B
- Decimal precision · 3 dp−620 B
Comments, whitespace, unused defs — all out
Beyond editor metadata, ordinary SVG bloat lives in XML comments, indentation whitespace, and `<defs>` blocks where 80% of the entries are unreferenced. The minify pass handles all three; the unused-defs pass walks the document and removes every def with a refcount of zero.
Decimal precision is the single biggest win.
Illustrator routinely writes paths with 7+ decimals. Move the precision dial; watch the path data shrink in the code panel and stay pixel-identical in the render. 3 decimals is sub-pixel safe and saves 20–30%.
<path d="M60.123 80.988 L100.500 50.250 L140.247 80.136 L140.000 130.000 L100.500 159.749 L60.247 130.136 Z" />Drag a file in or paste markup directly. The studio parses the XML, surfaces the byte count, and shows the rendered vector side-by-side.
Toggle the six optimization passes — comments, metadata, editor data, unused defs, minify, decimal precision. Each toggle shows live byte impact before you commit.
Save the optimized SVG, copy to clipboard, or chain with Convert and Compress in a recipe to ship the SVG alongside raster fallback formats.
Six benches reaching for the optimizer this week.
FyDark SVG ships for designers, developers, marketers, photographers, founders, and content creators — each rendered as a fake XML element, child <tool /> tags listing what they reach for first.
</personas>Behaviour declarations, parameters, guarantees.
Each FAQ formatted as an API reference entry — function signature, JSDoc-style description, cross-references to related symbols. Read in order or jump to the function that matters.
Reference: optimizer behaviour, type signatures, guarantees
Auto-generated from the source. Each entry is a behaviour declaration — its inputs, outputs, and guarantees — with cross-references to related symbols. Read in order or jump to the relevant function.
- Lossless§01 · function
render.identicalfnrender.identical:(input: SVG) => SVGWill the optimized SVG render identically to my source?
/* @description */Yes by default. The five lossless passes — strip comments, strip metadata, strip editor data, remove unused defs, minify whitespace — operate purely on markup the renderer never reads. The sixth pass, decimal precision rounding, is mathematically lossless at sub-pixel detail (3 decimals = 1/1000th of a viewport unit) but is opt-out if you need exact precision for plotting or CAD-style work.
@seerender.precisionrender.passes§01 / 06 - Editor§02 · function
metadata.editorfnmetadata.editor:(svg: SVG, editor: EditorKind) => SVGWhat's editor metadata, and why is it in my SVG?
/* @description */Vector editors embed their own state in your SVG so they can re-open it as if it were a project file. Inkscape adds `<sodipodi:namedview>` blocks describing the canvas, layer order, and document grid; Illustrator adds `<!-- Generator: Adobe Illustrator -->` comments and `<i:` namespaced attributes; Sketch and Figma add their own equivalents. None of it renders — but it can balloon a 5 KB icon to 25 KB.
@seemetadata.kindmetadata.namespace§02 / 06 - Precision§03 · function
precision.roundfnprecision.round:(path: PathData, decimals: 0..6) => PathDataHow aggressively should I round decimal precision?
/* @description */Default 3 decimals is the sweet spot — sub-pixel at any normal viewport zoom. Drop to 2 for icons displayed under 64×64 (no visible difference). Stay at 4–6 for SVGs that get plotted, embroidered, or used as CAD blueprints. The default 3 reliably saves 20–30% of the path-data bytes with zero visible compromise.
@seeprecision.subpixelprecision.cad§03 / 06 - Animation§04 · function
preserve.animationfnpreserve.animation:(svg: SVG) => SVGWill optimizing my SVG break animations or interactivity?
/* @description */No. The optimizer preserves SMIL animation elements, CSS classes, IDs referenced by `<use>` and `xlink:href`, JavaScript event handlers, and aria attributes. The unused-defs pass walks the document graph before removing — so any def that's referenced anywhere stays. If you've got animated SVG, run the optimizer; the animations keep working.
@seepreserve.smilpreserve.css§04 / 06 - Batch§05 · function
batch.foldfnbatch.fold:(folder: SVG[], profile: PassProfile) => SVG[]Can I batch-optimize a folder of SVGs?
/* @description */Yes. Drop a folder, set the six-pass profile once, and the runner applies it across every SVG in the queue. Pair with the Convert track in a recipe if you also need raster fallbacks for older browsers — the chain ships SVG + WebP fallback in a single zip.
@seebatch.recipebatch.zip§05 / 06 - Privacy§06 · function
io.localfnio.local:(svg: SVG) => SVG · on-deviceDo my SVGs leave the browser?
/* @description */No. The XML parser, the optimization passes, and the markup writer all run in your browser tab. SVG is text — even less of an excuse to ship it to a server than raster images. Source bytes stay on-device; only the optimized output you save touches your disk.
@seeio.canvasio.storage§06 / 06
@fydark/svgPick a track, open the studio,
ship the pixels.
Every track on this page links to its own dedicated workspace — resize, crop, compress, convert, effects, batch, SVG cleanup, privacy. Same canvas, same recipe shelf, more depth where you need it.