Export SVGs using Iconify Utils

This tutorial is part of code examples for Iconify Utils.

Export SVGs

This is an example of using Iconify Utils to generate SVGs from icon set:

demo.ts
import type { IconifyJSON } from '@iconify/types';
import { readFileSync, writeFileSync, mkdirSync } from 'fs';

// Various functions from Iconify Utils
import { parseIconSet, iconToSVG } from '@iconify/utils';

// Source file and target directory
const source = 'icon-sets/mdi-light.json';
const target = 'svg/mdi-light';

// Read icon set from file
const iconSet = JSON.parse(readFileSync(source, 'utf8')) as IconifyJSON;

// Create directory for output if it does not exist
try {
   mkdirSync(target, {
       recursive: true,
   });
} catch {}

// Parse all icons
parseIconSet(iconSet, (name, data) => {
   if (!data) {
       // Invalid icon
       return;
   }

   // Generate SVG
   const renderData = iconToSVG(data, {
       // 'auto' keyword uses viewBox width/height for icon width/height
       height: 'auto',
   });

   // Generate attributes for SVG element
   const svgAttributes = {
       xmlns: 'http://www.w3.org/2000/svg',
       ...renderData.attributes,
   } as Record<string, string>;
   const svgAttributesStr = Object.keys(svgAttributes)
       .map(
           (attr) =>
               // No need to check attributes for special characters, such as quotes,
               // they cannot contain anything that needs escaping.
               `${attr}="${svgAttributes[attr as keyof typeof svgAttributes]}"`
       )
       .join(' ');

   // Generate SVG
   const svg = `<svg ${svgAttributesStr}>${renderData.body}</svg>`;

   // Write SVG
   const filename = `${target}/${name}.svg`;
   writeFileSync(filename, svg, 'utf8');
   console.log('Written:', filename);
});

Functions

Functions used in this code sample:

  • parseIconSet() to parse icon set, calling callback for each icon.
  • iconToSVG() to generate attributes and HTML for SVG.
  • replaceIDs() to create unique IDs, though it is commented out. Use it if you are embedding output in HTML.

Source

For icon set source, this example uses .json file in IconifyJSON format.

You can also use individual icon set package or full icon sets package. Point source variable to .json file from one of those packages.

Output

Example writes all SVGs to file system. Change target variable to point to different directory.