Complete Export Format Decision Matrix

Comparing all 6 primary export families generated in browser vector tools
Export FormatJS Bundle CostThemeable via CSS?Browser Cacheable?Primary Production Fit
Raw .svg (via <img>)0 BNoYes (CDN immutable)Multi-color logos, flags, 3D icons, hero illustrations
React TSX / Vue 3 / Svelte0 B in RSC; tiny in CSRYes (currentColor + props)Inside route chunkInteractive buttons, navbars, design-system UI controls
SVG <symbol> Sprite0 BYes (currentColor + CSS vars)Yes (same-origin file)Glyphs repeated 15–100× across tables, feeds & menus
CSS Mask / Data URI0 BMask: Yes | BG: NoInside .css bundleMarkdown external-link icons, ::before/::after, inputs
WebP (64–2048px)0 BNoYesComplex filter-heavy 3D cards & modern CMS thumbnails
PNG / .ICO (64–2048px)0 BNoYesHTML email clients, OpenGraph cards, PWA & legacy favicons

Fast Three-Question Flowchart

  1. Does the target platform block SVG entirely (email, OpenGraph, App Store screenshot)? Export PNG or WebP from the SVG-to-PNG/WebP converter.
  2. Does the icon need hover/dark-mode recoloring? If NO (brand logo, flag, complex illustration), use static <img src="...svg">. If YES, continue to Question 3.
  3. How many times does it appear on one page? Under ~15 instances -> TSX/Vue/Svelte component; 15+ repeated instances -> <symbol> sprite; CSS-only selector -> CSS mask-image.