react-icons vs @fortawesome/free-solid-svg-icons vs @mdi/js vs heroicons
Icon Libraries for Web Development Comparison
1 Year
react-icons@fortawesome/free-solid-svg-icons@mdi/jsheroiconsSimilar Packages:
What's Icon Libraries for Web Development?

Icon libraries are collections of scalable vector graphics (SVG) icons that can be easily integrated into web applications. They provide developers with a wide range of icons that are customizable and can enhance the user interface by improving visual communication. These libraries often include various styles and sizes, making it easier to maintain consistency in design across different components of a web application. Using icon libraries can significantly speed up the development process by providing ready-to-use assets that are optimized for performance and accessibility.

Package Weekly Downloads Trend
Github Stars Ranking
Stat Detail
Package
Downloads
Stars
Size
Issues
Publish
License
react-icons3,437,71412,09786.2 MB2103 months agoMIT
@fortawesome/free-solid-svg-icons1,830,08175,2795.17 MB4,1275 months ago(CC-BY-4.0 AND MIT)
@mdi/js259,5431696.56 MB4a year agoApache-2.0
heroicons36,30322,454700 kB56 months agoMIT
Feature Comparison: react-icons vs @fortawesome/free-solid-svg-icons vs @mdi/js vs heroicons

Design Consistency

  • react-icons:

    React Icons allows for the use of icons from various libraries, enabling developers to mix and match icons while maintaining a consistent design across their application. This flexibility helps in achieving a tailored design that meets specific project needs.

  • @fortawesome/free-solid-svg-icons:

    Font Awesome offers a wide range of icons that maintain a consistent design language, making it easy to create visually cohesive interfaces. The icons are designed to work well together, ensuring that they complement each other in various UI contexts.

  • @mdi/js:

    Material Design Icons are crafted to align with Google's Material Design principles, ensuring that they provide a consistent look and feel across applications that follow this design framework. This consistency enhances user experience and usability.

  • heroicons:

    Heroicons are designed with a modern aesthetic in mind, providing a cohesive look that fits well within Tailwind CSS projects. Their outline and solid styles are complementary, allowing for a unified design approach.

Customization

  • react-icons:

    React Icons provides a straightforward way to customize icons by passing props to the components, allowing for easy adjustments in size, color, and other styles, making it a flexible choice for React applications.

  • @fortawesome/free-solid-svg-icons:

    Font Awesome icons are highly customizable, allowing developers to change colors, sizes, and effects through CSS. This flexibility makes it easy to adapt icons to fit the design requirements of any project.

  • @mdi/js:

    Material Design Icons can be customized using CSS, and their SVG format allows for easy manipulation of colors and sizes, making them versatile for different design needs.

  • heroicons:

    Heroicons are designed to be easily customizable, with options to change colors and sizes directly through Tailwind CSS classes, making them a great choice for developers who want to maintain a consistent design system.

Performance

  • react-icons:

    React Icons helps improve performance by allowing developers to import only the icons they need from various libraries, reducing the overall bundle size and enhancing load times.

  • @fortawesome/free-solid-svg-icons:

    Font Awesome is optimized for performance, with options for loading only the icons you need, reducing the overall bundle size and improving load times for your application.

  • @mdi/js:

    Material Design Icons are lightweight and designed to minimize impact on performance. Their SVG format ensures that they are scalable without losing quality, contributing to faster rendering times.

  • heroicons:

    Heroicons are designed with performance in mind, ensuring that they are lightweight and do not bloat the application. Their SVG format allows for quick loading and rendering.

Accessibility

  • react-icons:

    React Icons supports accessibility by allowing developers to add ARIA attributes to icon components, ensuring that they are usable with screen readers and enhancing the accessibility of the application.

  • @fortawesome/free-solid-svg-icons:

    Font Awesome icons come with built-in accessibility features, including ARIA attributes, making them usable for screen readers and improving overall accessibility of web applications.

  • @mdi/js:

    Material Design Icons are designed with accessibility in mind, ensuring that they are easily interpretable by assistive technologies, which helps in creating inclusive applications.

  • heroicons:

    Heroicons are crafted to be accessible, with proper semantic HTML and ARIA attributes, ensuring that they can be used effectively in accessible web applications.

Community and Support

  • react-icons:

    React Icons has a growing community and is well-documented, making it easy for developers to find help and examples for using icons from various libraries in their React applications.

  • @fortawesome/free-solid-svg-icons:

    Font Awesome has a large community and extensive documentation, providing ample resources for developers to find support and examples for using the icons effectively.

  • @mdi/js:

    Material Design Icons benefit from a strong community around Material Design, with plenty of resources and documentation available to help developers implement the icons in their projects.

  • heroicons:

    Heroicons is backed by the Tailwind CSS community, providing access to a wealth of resources, examples, and support for developers looking to integrate these icons into their applications.

How to Choose: react-icons vs @fortawesome/free-solid-svg-icons vs @mdi/js vs heroicons
  • react-icons:

    Use React Icons if you want a flexible solution that allows you to easily integrate icons from various libraries into your React application. This package provides a simple way to import icons from multiple sources, making it ideal for projects that require a mix of different icon styles.

  • @fortawesome/free-solid-svg-icons:

    Choose Font Awesome if you need a comprehensive icon set with a wide variety of styles, including solid, regular, and brands. It is particularly useful for projects that require a large number of icons and want to maintain a consistent design language across different platforms.

  • @mdi/js:

    Select Material Design Icons if you are building applications that adhere to Google's Material Design guidelines. This library offers a vast collection of icons that are specifically designed to work well within Material Design frameworks, ensuring visual coherence and usability.

  • heroicons:

    Opt for Heroicons if you are looking for a set of beautifully designed icons that are specifically tailored for Tailwind CSS projects. Heroicons provide a modern aesthetic and are available in both outline and solid styles, making them suitable for contemporary web applications.

README for react-icons
React Icons

React Icons

npm

Include popular icons in your React projects easily with react-icons, which utilizes ES6 imports that allows you to include only the icons that your project is using.

Installation (for standard modern project)

yarn add react-icons
# or
npm install react-icons --save

example usage

import { FaBeer } from "react-icons/fa";

function Question() {
  return (
    <h3>
      Lets go for a <FaBeer />?
    </h3>
  );
}

View the documentation for further usage examples and how to use icons from other packages. NOTE: each Icon package has it's own subfolder under react-icons you import from.

For example, to use an icon from Material Design, your import would be: import { ICON_NAME } from 'react-icons/md';

Installation (for meteorjs, gatsbyjs, etc)

Note This option has not had a new release for some time. More info https://github.com/react-icons/react-icons/issues/593

If your project grows in size, this option is available. This method has the trade-off that it takes a long time to install the package.

yarn add @react-icons/all-files
# or
npm install @react-icons/all-files --save

example usage

import { FaBeer } from "@react-icons/all-files/fa/FaBeer";

function Question() {
  return (
    <h3>
      Lets go for a <FaBeer />?
    </h3>
  );
}

Icons

| Icon Library | License | Version | Count | | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ---------------------------------------- | ----: | | Circum Icons | MPL-2.0 license | 1.0.0 | 288 | | Font Awesome 5 | CC BY 4.0 License | 5.15.4-3-gafecf2a | 1612 | | Font Awesome 6 | CC BY 4.0 License | 6.5.2 | 2045 | | Ionicons 4 | MIT | 4.6.3 | 696 | | Ionicons 5 | MIT | 5.5.4 | 1332 | | Material Design icons | Apache License Version 2.0 | 4.0.0-98-g9beae745bb | 4341 | | Typicons | CC BY-SA 3.0 | 2.1.2 | 336 | | Github Octicons icons | MIT | 18.3.0 | 264 | | Feather | MIT | 4.29.1 | 287 | | Lucide | ISC | v5.1.0-6-g438f572e | 1215 | | Game Icons | CC BY 3.0 | 12920d6565588f0512542a3cb0cdfd36a497f910 | 4040 | | Weather Icons | SIL OFL 1.1 | 2.0.12 | 219 | | Devicons | MIT | 1.8.0 | 192 | | Ant Design Icons | MIT | 4.4.2 | 831 | | Bootstrap Icons | MIT | 1.11.3 | 2716 | | Remix Icon | Apache License Version 2.0 | 4.2.0 | 2860 | | Flat Color Icons | MIT | 1.0.2 | 329 | | Grommet-Icons | Apache License Version 2.0 | 4.12.1 | 635 | | Heroicons | MIT | 1.0.6 | 460 | | Heroicons 2 | MIT | 2.1.3 | 888 | | Simple Icons | CC0 1.0 Universal | 12.14.0 | 3209 | | Simple Line Icons | MIT | 2.5.5 | 189 | | IcoMoon Free | CC BY 4.0 License | d006795ede82361e1bac1ee76f215cf1dc51e4ca | 491 | | BoxIcons | MIT | 2.1.4 | 1634 | | css.gg | MIT | 2.1.1 | 704 | | VS Code Icons | CC BY 4.0 | 0.0.35 | 461 | | Tabler Icons | MIT | 3.2.0 | 5237 | | Themify Icons | MIT | v0.1.2-2-g9600186 | 352 | | Radix Icons | MIT | @radix-ui/react-icons@1.3.0-1-g94b3fcf | 318 | | Phosphor Icons | MIT | 2.1.1 | 9072 | | Icons8 Line Awesome | MIT | 1.3.1 | 1544 |

You can add more icons by submitting pull requests or creating issues.

Configuration

You can configure react-icons props using React Context API.

Requires React 16.3 or higher.

import { IconContext } from "react-icons";

<IconContext.Provider value={{ color: "blue", className: "global-class-name" }}>
  <div>
    <FaFolder />
  </div>
</IconContext.Provider>;

| Key | Default | Notes | | ----------- | --------------------- | ---------------------------------- | | color | undefined (inherit) | | | size | 1em | | | className | undefined | | | style | undefined | Can overwrite size and color | | attr | undefined | Overwritten by other attributes | | title | undefined | Icon description for accessibility |

Migrating from version 2 -> 3

Change import style

Import path has changed. You need to rewrite from the old style.

// OLD IMPORT STYLE
import FaBeer from "react-icons/lib/fa/beer";

function Question() {
  return (
    <h3>
      Lets go for a <FaBeer />?
    </h3>
  );
}
// NEW IMPORT STYLE
import { FaBeer } from "react-icons/fa";

function Question() {
  return (
    <h3>
      Lets go for a <FaBeer />?
    </h3>
  );
}

Ending up with a large JS bundle? Check out this issue.

Adjustment CSS

From version 3, vertical-align: middle is not automatically given. Please use IconContext to specify className or specify an inline style.

Global Inline Styling

<IconContext.Provider value={{ style: { verticalAlign: 'middle' } }}>

Global className Styling

Component

<IconContext.Provider value={{ className: 'react-icons' }}>

CSS

.react-icons {
  vertical-align: middle;
}

TypeScript native support

Dependencies on @types/react-icons can be deleted.

Yarn

yarn remove @types/react-icons

NPM

npm remove @types/react-icons

Contributing

./build-script.sh will build the whole project. See also CI scripts for more information.

Development

yarn
cd packages/react-icons
yarn fetch  # fetch icon sources
yarn build

Add/Update icon set

First, check the discussion to see if anyone would like to add an icon set.

https://github.com/react-icons/react-icons/discussions/categories/new-icon-set

The SVG files to be fetched are managed in this file. Edit this file and run yarn fetch && yarn check && yarn build.

https://github.com/react-icons/react-icons/blob/master/packages/react-icons/src/icons/index.ts

Preview

Note The project is not actively accepting PR for the preview site at this time.

The preview site is the react-icons website, built in Astro+React.

cd packages/react-icons
yarn fetch
yarn build

cd ../preview-astro
yarn start

Demo

The demo is a Create React App boilerplate with react-icons added as a dependency for easy testing.

cd packages/react-icons
yarn fetch
yarn build

cd ../demo
yarn start

Why React SVG components instead of fonts?

SVG is supported by all major browsers. With react-icons, you can serve only the needed icons instead of one big font file to the users, helping you to recognize which icons are used in your project.

Related Projects

Licence

MIT

  • Icons are taken from the other projects so please check each project licences accordingly.