react-icons vs @fortawesome/fontawesome-svg-core vs @mdi/js vs material-icons
Icon Libraries for Web Development Comparison
1 Year
react-icons@fortawesome/fontawesome-svg-core@mdi/jsmaterial-iconsSimilar Packages:
What's Icon Libraries for Web Development?

Icon libraries are essential tools in web development, providing a wide range of scalable vector icons that can enhance the user interface and user experience of web applications. These libraries offer various styles, sizes, and formats, allowing developers to easily integrate icons into their projects. They help maintain visual consistency, improve accessibility, and can be customized to fit the design requirements of any application. The choice of an icon library can significantly impact the aesthetics and functionality of a web application, making it crucial to select the right one based on specific project needs.

Package Weekly Downloads Trend
Github Stars Ranking
Stat Detail
Package
Downloads
Stars
Size
Issues
Publish
License
react-icons3,567,87512,08886.2 MB2083 months agoMIT
@fortawesome/fontawesome-svg-core2,037,81175,236348 kB4,1655 months agoMIT
@mdi/js288,3951696.56 MB4a year agoApache-2.0
material-icons214,9963422.23 MB123 months agoApache-2.0
Feature Comparison: react-icons vs @fortawesome/fontawesome-svg-core vs @mdi/js vs material-icons

Icon Variety

  • react-icons:

    React Icons aggregates icons from multiple libraries, including Font Awesome, Material Design Icons, and others. This allows developers to choose from a wide variety of icons while maintaining a consistent API for integration.

  • @fortawesome/fontawesome-svg-core:

    Font Awesome offers thousands of icons across various categories, including social media, user interface, and more. It provides both solid and outline styles, allowing for extensive customization and versatility in design.

  • @mdi/js:

    Material Design Icons features a comprehensive collection of over 900 icons that follow Material Design principles. It includes icons for various use cases, ensuring that developers can find suitable icons for their projects.

  • material-icons:

    Material Icons provides a set of over 1,000 icons designed specifically for use with Google's Material Design. The icons are simple and intuitive, making them easy to recognize and use in applications.

Customization

  • react-icons:

    React Icons allows for straightforward customization through props in React components, enabling developers to set sizes, colors, and other styles directly in their JSX.

  • @fortawesome/fontawesome-svg-core:

    Font Awesome allows for extensive customization options, including size, color, and animation effects. Developers can easily adjust the appearance of icons using CSS or JavaScript, making it highly adaptable to different design requirements.

  • @mdi/js:

    Material Design Icons can be customized using CSS variables, allowing developers to change colors and sizes easily. The icons are designed to be responsive and can be styled to fit various screen sizes and themes.

  • material-icons:

    Material Icons offers limited customization options, primarily focusing on size and color adjustments through CSS. The icons are designed to be used as is, adhering to Material Design guidelines for consistency.

Performance

  • react-icons:

    React Icons leverages tree-shaking, allowing developers to import only the icons they need, which helps reduce bundle size and improve application performance.

  • @fortawesome/fontawesome-svg-core:

    Font Awesome provides both SVG and web font options, allowing developers to choose the best method for performance. The SVG version is lightweight and scalable, making it ideal for responsive designs.

  • @mdi/js:

    Material Design Icons is optimized for performance, providing a lightweight solution with SVG icons that load quickly and scale well on different devices. This ensures a smooth user experience without compromising quality.

  • material-icons:

    Material Icons are designed for performance, with a focus on minimal file size and fast loading times. The icons are served as a web font, which can be cached efficiently by browsers.

Ease of Use

  • react-icons:

    React Icons is designed specifically for React applications, making it intuitive for React developers. The library's API is consistent and easy to understand, allowing for quick integration.

  • @fortawesome/fontawesome-svg-core:

    Font Awesome is known for its ease of use, with a straightforward API and extensive documentation. Developers can quickly integrate icons into their projects without a steep learning curve.

  • @mdi/js:

    Material Design Icons is easy to use, especially for developers familiar with Material Design. The documentation provides clear examples and guidelines for integration, making it accessible for all skill levels.

  • material-icons:

    Material Icons is simple to implement, especially for those using Material Design. The icons can be easily added to projects with minimal setup, making them a popular choice for quick development.

Community and Support

  • react-icons:

    React Icons has a growing community of React developers, with numerous resources available online. The library's integration with popular icon sets means that support is often available through the respective icon library communities.

  • @fortawesome/fontawesome-svg-core:

    Font Awesome has a large community and extensive support resources, including forums, tutorials, and documentation. This makes it easy to find help and examples when needed.

  • @mdi/js:

    Material Design Icons benefits from the backing of Google's Material Design community, providing access to a wealth of resources and support for developers using the icons in their projects.

  • material-icons:

    Material Icons is widely used within the Google ecosystem, ensuring a strong community and ample resources for troubleshooting and best practices.

How to Choose: react-icons vs @fortawesome/fontawesome-svg-core vs @mdi/js vs material-icons
  • react-icons:

    Use React Icons if you are working within a React application and want a flexible solution that allows you to import icons from various libraries easily. This package supports multiple icon sets, making it versatile for different design needs.

  • @fortawesome/fontawesome-svg-core:

    Choose Font Awesome if you need a comprehensive icon library with a vast selection of icons, including both free and premium options. It is well-documented and widely used, making it easy to find support and resources.

  • @mdi/js:

    Select Material Design Icons if you prefer a set of icons that adhere to Google's Material Design guidelines. This package is ideal for projects that aim for a modern, clean aesthetic and require a consistent design language.

  • material-icons:

    Opt for Material Icons if you are building applications that heavily utilize Google’s Material Design framework. This package provides a simple and straightforward way to include icons that are optimized for performance and ease of use.

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.