Iconify is the most versatile icon framework.
For more information visit https://iconify.design/.
There are several parts of project, some are in this repository, some are in other repositories.
What is included in this repository?
packages contains reusable packages: types, utilities, functions used by various components.iconify-icon contains iconify-icon web component that renders icons. It also contains wrappers for various frameworks that cannot handle web components.components contains older version of icon components that are native to various frameworks, which do not use web component.components-css contains components for rendering SVG with CSS, with Iconify API fallback for Safari browser.Other repositories you might want to look at:
iconify/icon-sets repository.iconify/tools repository.Main packages in this repository are various icon components.
Why are those icon components needed? Iconify icon components are not just yet another set of icon components. Unlike other icon components, Iconify icon components do not include icon data. Instead, icon data is loaded on demand from Iconify API.
Iconify API provides data for over 200,000 open source icons! API is hosted on publicly available servers, spread out geographically to make sure visitors from all over the world have the fastest possible connection with redundancies in place to make sure it is always online.
There are currently 2 types of components:
iconify-icon (web component) and components directories.components-css directory.API is needed to load data for icons that you use.
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.
For CSS icon components, this means fallback SVGs for Safari browser will be loaded only for users that use Safari browser (components check for feature support, not browser id), so you can move path data to CSS without worrying about visitors with old browsers.
You can also use API if you don't know what icons user will need, while offering thousands of icons to choose from. This is perfect for applications that can be customised by user.
There are several types of packages, split in their own directories.
Directory packages contains main packages that are reusable by all other packages in this repository as well as third party components.
Main packages:
Packages used by Iconify icon components:
Packages used by Iconify CSS icon components, will also be used in future by new versions of Iconify icon components:
Directory iconify-icon contains iconify-icon web component and wrappers for various frameworks.
| Package | Usage |
|---|---|
| Web component | Everywhere |
| React wrapper | React |
| SolidJS wrapper | SolidJS |
Frameworks that are confirmed to work with web components without custom wrappers:
class instead of className. Wrapper fixes it and provides types.Directory iconify-icon-demo contains demo packages that show usage of iconify-icon web component.
npm run dev to start demo.npm run dev to start demo.npm run dev to start demo.npm run dev to start the demo.npm run dev to start demo.npm run dev to start demo. Requires custom config, see below.npm run dev to start demo.When using web component with Nuxt 3, you need to tell Nuxt that iconify-icon is a custom element. Otherwise it will show few warnings in dev mode.
Example nuxt.config.ts:
export default defineNuxtConfig({
vue: {
compilerOptions: {
isCustomElement: (tag) => tag === 'iconify-icon',
},
},
});
This configuration change is not needed when using Vue with @vitejs/plugin-vue.
Directory components contains native components for several frameworks:
| Package | Usage |
|---|---|
| React component | React |
| Vue component | Vue |
| Svelte component | Svelte |
Directory components-css contains native components for several frameworks:
| Package | Usage |
|---|---|
| React component | React |
| Vue component | Vue |
| Svelte component | Svelte |
Unlike Iconify icon components, these components are intended to be used for rendering SVG + CSS, loading icon data from API only as a fallback option for Safari users.
Components in directory components are slowly phased out in favor of iconify-icon web component.
Components are still maintained and supported, but it is better to switch to web component.
Functionality is identical, but web component has some advantages:
Packages that have been deprecated, removed from this repository and are no longer maintained:
iconify-icon.iconify-icon, does not require Vue specific wrapper. Make sure you are not using Webpack older than version 5.iconify-icon, does not require Ember specific wrapper.Packages that are still available, but should be avoided:
iconify-icon using @iconify-icon/react wrapper.iconify-icon, does not require Svelte specific wrapper.iconify-icon, does not require Vue specific wrapper.To import web component, just import it once in your script, as per iconify-icon README file.
Directory components-demo contains demo packages that show usage of icon components.
npm run dev to start demo.npm run dev to start demo.npm run dev to start demo.npm run dev to start demo.npm run dev to start demo.npm run dev to start the demo.Plugin for Tailwind CSS has been rewritten and moved to a separate repository.
See CONTRIBUTING.md.
Documentation for all packages is available on Iconify documentation website:
Iconify is licensed under MIT license.
SPDX-License-Identifier: MIT
Some packages of this monorepo in previous versions were dual-licensed under Apache 2.0 and GPL 2.0 licence, which was messy and confusing. This was later changed to MIT for simplicity.
This licence does not apply to icons. Icons are released under different licences, see each icon set for details. Icons available by default are all licensed under various open-source licences.
© 2020-PRESENT Vjacheslav Trushkin