Library / SDK
iconify/iconify avatar
iconify/iconify

Iconify: A Unified Framework for 200+ Icon Sets in HTML and Front-End Frameworks

Universal icon framework. One syntax for FontAwesome, Material Design Icons, DashIcons, Feather Icons, EmojiOne, Noto Emoji and many other open source icon sets (over 200 icon sets and ~300k icons). SVG framework, React, Vue and Svelte components!

6,345 stars207 forksTypeScriptMIT

At a glance

What is it?
Iconify provides a single API and component model for rendering icons from over 200 open-source icon sets, loading icon data on demand from a CDN API rather than bundling all SVG paths at build time.
Who is it for?
Iconify suits projects that need access to many icon sets without managing separate icon library packages or bundling all SVG paths at build time. The on-demand API loading model means the project requires network access to the Iconify API at render time, which makes it unsuitable for fully offline deployments unless a self-hosted API endpoint is configured.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 4 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What Iconify Solves and Who It Is For

Front-end projects that need icons from multiple sources typically install a separate npm package for each icon library (one for Material Design Icons, another for Feather Icons, another for Font Awesome) and bundle every icon in each package even when only a small subset is used. Iconify addresses this by providing one component that loads icon data from the Iconify API at render time, covering over 200 icon sets with more than 250,000 icons through a single integration.

The README describes the project as a framework that works with any icon library through a unified syntax. It targets front-end developers building web applications who want to switch between icon sets or add new ones without changing component code or adjusting build configuration.

Designers working in Figma, Sketch, or Adobe XD can access the same icon sets through Iconify plugins for those tools. The repository also provides a Nuxt 3 demo, a SvelteKit demo, and SolidJS support, covering a wide range of current frameworks.

How the API-Backed Loading Model Works

Standard icon libraries embed SVG paths in JavaScript bundles. When a user visits a page, all icon data the library includes is already downloaded. Iconify takes a different approach: the icon component renders a placeholder, then fetches only the icon data needed for the icons actually used on that page from the Iconify API.

The README explains why this requires an API: "For Iconify icon components, this means you don't need to worry about bundling all possible icons during development, component will load icons that are rendered." This is particularly useful for applications where the user selects icons from a large catalog, since the server never needs to send data for icons that are not displayed.

Iconify API is hosted on geographically distributed servers. The repository includes an API redundancy package and a newer Fetch package with built-in redundancy for managing multiple API hosts, handling timeouts, and rotating hosts when the primary API is unavailable.

The CSS icon components in the components-css directory take a slightly different approach: they render icons using CSS, which does not work in Safari. For Safari users, the CSS component falls back to the Iconify API to load SVG data and render it. This means Safari users still require API connectivity even with the CSS component approach.

Repository Layout and Package Structure

The repository is a pnpm monorepo. The root package.json defines workspace-wide build, test, lint, and format scripts. Running `pnpm run build` builds all packages in the packages/, iconify-icon/, components/, components-css/, and plugins/ directories recursively.

The packages/ directory holds shared TypeScript types (iconify types) and utilities (iconify utils) reused across the project. The iconify-icon/ directory holds the web component and its wrappers. The components/ directory holds older native framework components for React, Vue, and Svelte. The components-css/ directory holds the newer CSS-based icon components.

Icon data itself is not in this repository. The README links to the iconify/icon-sets repository for icon data, and iconify/tools for parsing and generating icon sets. Developers who want to host their own icon data or create custom icon sets work with those separate repositories.

Demo packages are in iconify-icon-demo/ and components-demo/, with separate projects for React, Next.js, Vue 3, Nuxt 3, SvelteKit, and SolidJS.

Installing and Using Iconify in React and HTML

For HTML without a framework, use the iconify-icon web component. The iconify-icon package is available on npm. To run the React demo locally:

bash
npm run dev

This applies in each demo directory such as iconify-icon-demo/react-demo/. The Nuxt 3 integration requires a configuration step because Nuxt does not recognize the iconify-icon custom element by default. The README provides an example nuxt.config.ts:

ts
export default defineNuxtConfig({
	vue: {
		compilerOptions: {
			isCustomElement: (tag) => tag === 'iconify-icon',
		},
	},
});

This configuration change is not needed when using Vue with @vitejs/plugin-vue. The web component works without wrappers in Svelte, Lit, Ember, and Vue 2 and Vue 3. React requires the wrapper package from iconify-icon/react/ because React handles custom element attributes differently from the HTML spec and the wrapper fixes the className vs class difference.

To run the full workspace build:

bash
pnpm run build

And to run tests across all packages:

bash
pnpm run test

Two Component Families and Their Trade-Offs

Iconify currently ships two generations of components. The components/ directory holds the older native components, which are framework-specific React, Vue, and Svelte implementations that do not use the web component. These are described in the README as likely to be deprecated in the future.

The iconify-icon/ directory holds the current generation web component wrapped for React and SolidJS. This approach decouples the rendering logic from any specific framework, which is why it works without custom wrappers in most modern frameworks. The trade-off is that web components come with caveats in certain rendering contexts, such as server-side rendering, where web components require additional setup.

The components-css/ directory holds a third approach in development: CSS-based icon components that render SVG paths through CSS. The README notes that CSS-based SVG rendering is not supported in Safari, so those components load icon data from the API as a fallback for Safari users.

For most use cases the web component is the recommended starting point, since it works across frameworks and is actively maintained.

Limitations: API Dependency and Safari Fallback

The core limitation of the API-backed model is that rendering icons requires network access to the Iconify API. Pages that need to function fully offline, or that are deployed in environments where outbound requests are blocked, cannot use the standard Iconify components without self-hosting the API.

The redundancy and fetch packages handle API host failures by rotating through multiple hosts, but they do not provide offline functionality. The README describes the API as hosted on publicly available, geographically distributed servers, but does not document a self-hosted API option within the main README.

Safari's lack of support for CSS-based SVG rendering is a concrete limitation for the components-css approach. The fallback to the API works, but it means Safari users incur an additional network request for every icon rendered via the CSS components.

The monorepo requires pnpm as its package manager. The package.json specifies packageManager: [email protected]. Teams that standardize on npm or Yarn need either pnpm installed or to install individual packages rather than working with the monorepo.

Maintenance and License

The repository is not archived. The last push was on 2026-09-25. The package.json shows a TypeScript version of 7.0.2 and Vite 8.2.2 in devDependencies, indicating the project tracks current toolchain releases.

The repository is licensed under MIT. The license file is license.txt at the repository root. Individual packages may carry their own license declarations, but the repository-level license is MIT, which allows use in commercial and open-source projects without restrictions on redistribution.

The project uses oxlint for linting and tsdown for building TypeScript packages, with pnpm workspaces for managing the monorepo.

Editorial conclusion

Iconify suits projects that need access to many icon sets without managing separate icon library packages or bundling all SVG paths at build time. The on-demand API loading model means the project requires network access to the Iconify API at render time, which makes it unsuitable for fully offline deployments unless a self-hosted API endpoint is configured. Safari users of the CSS icon components need a working API connection as a fallback because CSS-based SVG rendering is not supported by Safari. Verify that your target environments allow outbound requests to the Iconify CDN before committing to the API-backed approach.

Frequently asked questions

What does Iconify do?

Iconify provides a single component and API for accessing over 200 icon sets with more than 250,000 icons. Instead of bundling all icon SVG paths at build time, it loads only the icon data needed for the icons actually rendered on a page, fetched from the Iconify API on demand.

Is Iconify free to use?

The Iconify framework and its icon components are released under the MIT license. The publicly hosted Iconify API is free to use. The README states there are no bandwidth limits mentioned for the API in the main documentation.

How do you use Iconify in React?

Install the React wrapper from the iconify-icon/react/ package. React requires a wrapper because it handles custom element attributes differently from the HTML spec; the wrapper fixes the className vs class difference and provides TypeScript types. The React demo in iconify-icon-demo/react-demo/ can be started with `npm run dev`.

How do you use Iconify in HTML without a framework?

Add the iconify-icon web component to your HTML page. The web component loads icon data from the Iconify API on demand when the element is rendered. No framework or build step is required for basic usage.

How do you install Iconify in a Figma project?

Iconify provides a plugin for Figma that gives access to its icon sets from within the design tool. The README mentions Figma, Sketch, and Adobe XD plugins for embedding icons in designs. The main repository covers the code components; the Figma plugin is a separate product from iconify.design.

Official sources

  1. iconify/iconify on GitHub
  2. Issues
  3. License: MIT
  4. Project website
  5. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/iconify-iconify.svg)](https://hysenlabs.com/projects/iconify-iconify)