feather-icons-react vs lucide-react vs remixicon-react
Selecting Icon Libraries for React Applications
feather-icons-reactlucide-reactremixicon-reactSimilar Packages:

Selecting Icon Libraries for React Applications

feather-icons-react, lucide-react, and remixicon-react are popular choices for rendering SVG icons in React projects. feather-icons-react wraps the original Feather Icons set, which is known for its minimal outline style but is no longer actively updated. lucide-react is the community-driven successor to Feather, offering the same design language with active maintenance and a larger library. remixicon-react provides access to the Remix Icon set, which features a massive collection of both line and filled icons suitable for diverse design needs.

Npm Package Weekly Downloads Trend

3 Years

Github Stars Ranking

Stat Detail

Package
Downloads
Stars
Size
Issues
Publish
License
feather-icons-react048498 kB37 months agoISC
lucide-react022,94330.2 MB56612 days agoISC
remixicon-react0164.58 MB12-(MIT AND OFL-1.1)

Feather vs Lucide vs Remix Icon: React Implementation Comparison

All three packages provide SVG icons for React, but they differ in maintenance, variety, and API design. lucide-react is the active successor to Feather. feather-icons-react wraps the original archived set. remixicon-react offers a much larger library with mixed styles. Let's compare how they handle real-world usage.

๐Ÿ› ๏ธ Maintenance & Long-Term Support

feather-icons-react wraps the original Feather Icons.

  • The underlying icon set is archived and no longer updated.
  • Suitable for legacy projects but risky for new ones.
// feather-icons-react: Legacy status
// Underlying repo is archived (read-only)
import { Home } from 'feather-icons-react';

lucide-react is the community-driven fork of Feather.

  • Actively maintained with regular updates.
  • Recommended replacement for Feather users.
// lucide-react: Active maintenance
// New icons added frequently
import { Home } from 'lucide-react';

remixicon-react wraps the Remix Icon set.

  • The icon set is actively maintained by Remix Design.
  • The React wrapper is community-maintained.
// remixicon-react: Community wrapper
// Icon set is active, wrapper varies by author
import { RiHomeLine } from 'remixicon-react';

๐Ÿ“ฆ Importing & Tree Shaking

feather-icons-react uses named exports.

  • Bundlers can remove unused icons easily.
  • Import syntax matches the icon name.
// feather-icons-react: Named exports
import { User, Settings } from 'feather-icons-react';

lucide-react uses named exports.

  • Fully supports tree shaking out of the box.
  • Consistent naming convention (PascalCase).
// lucide-react: Named exports
import { User, Settings } from 'lucide-react';

remixicon-react often uses named exports.

  • Some wrappers use a string name prop instead.
  • Check specific package docs for import style.
// remixicon-react: Named exports (common)
import { RiUserLine, RiSettingsLine } from 'remixicon-react';

๐ŸŽจ Styling & Customization

feather-icons-react accepts standard props.

  • Use size, color, and className.
  • Stroke width is fixed per icon design.
// feather-icons-react: Basic props
<Home size={24} color="currentColor" className="icon" />

lucide-react offers more control.

  • Supports strokeWidth adjustment dynamically.
  • Fully compatible with Feather props plus extras.
// lucide-react: Extended props
<Home size={24} color="currentColor" strokeWidth={2} className="icon" />

remixicon-react varies by wrapper.

  • Often supports size and color.
  • Some versions rely on CSS classes for styling.
// remixicon-react: Variable props
<RiHomeLine size={24} color="currentColor" className="icon" />

๐Ÿ“š Icon Variety & Design Language

feather-icons-react has a limited set.

  • Around 280 icons.
  • Consistent minimal outline style.
// feather-icons-react: Limited set
// No filled variants available
<Home />

lucide-react expands the set significantly.

  • Over 1000 icons.
  • Keeps the minimal outline style consistent.
// lucide-react: Expanded set
// Includes icons missing from original Feather
<Home />

remixicon-react offers massive variety.

  • Thousands of icons including filled versions.
  • Mix of line, fill, and logo styles.
// remixicon-react: Massive variety
// Choose between Line and Fill versions
<RiHomeLine />
<RiHomeFill />

โ™ฟ Accessibility & SVG Handling

feather-icons-react handles basic A11y.

  • You must add aria-label manually.
  • Renders standard SVG elements.
// feather-icons-react: Manual A11y
<Home aria-label="Home" role="img" />

lucide-react encourages A11y props.

  • Passes all SVG props through cleanly.
  • Same manual A11y responsibility.
// lucide-react: Manual A11y
<Home aria-label="Home" role="img" />

remixicon-react handles A11y similarly.

  • Depends on the wrapper implementation.
  • Usually passes props to underlying SVG.
// remixicon-react: Manual A11y
<RiHomeLine aria-label="Home" role="img" />

๐Ÿ“Š Summary: Key Differences

Featurefeather-icons-reactlucide-reactremixicon-react
Statusโš ๏ธ Archived underlying setโœ… Activeโœ… Active
Icons~280~1000+~2000+
StylesOutline OnlyOutline OnlyLine & Fill
Propssize, colorsize, color, strokeWidthsize, color (varies)
ImportsNamed ExportsNamed ExportsNamed Exports (usually)

๐Ÿ’ก Final Recommendation

feather-icons-react is only for maintaining old projects. Do not use it for new work because the icon set is frozen.

lucide-react is the best choice for most React apps. It keeps the Feather look but adds modern maintenance and more icons.

remixicon-react is ideal when you need filled icons or a much larger selection. Just verify the wrapper is well-maintained.

How to Choose: feather-icons-react vs lucide-react vs remixicon-react

  • feather-icons-react:

    Choose feather-icons-react only if you are maintaining a legacy project that already depends on the original Feather Icons set. Do not use this for new development because the underlying icon library is archived and will not receive new icons or security updates. It is best to plan a migration to a maintained alternative.

  • lucide-react:

    Choose lucide-react if you want the clean, minimal aesthetic of Feather Icons but need active maintenance and a larger selection. It is the direct successor to Feather and offers a drop-in replacement for most use cases with added features like adjustable stroke width. This is the safest bet for modern React applications.

  • remixicon-react:

    Choose remixicon-react if your design system requires filled icons, logos, or a much wider variety of symbols than outline sets provide. It is suitable for complex dashboards or apps needing specific metaphors. Ensure you verify the specific wrapper package is well-maintained since it is community-built.

README for feather-icons-react

Feather Icons React

npm

yarn add feather-icons-react

This package lets you use Feather Icons as a React Component. It currently supports up to version 4.29.0

Usage

You can use the default export and pass the 'icon' prop:

import FeatherIcon from 'feather-icons-react';
<FeatherIcon icon="close" />;

Or you can use the provided named export in place of the icon prop:

import { Close } from 'feather-icons-react';
<Close />;

This gives you the flexibility to dynamically change the icon if you want to use the default export (like in the Toggle Icon example below), or potentially save on size in your application bundle by not having to require all of the icons by using the default export.

Setting a size:

Size can be passed as either string or number.

e.g.: <FeatherIcon icon="copy" size="24" /> or <Copy size={24} />

Sizes can always be easily overridden by CSS.

Setting fill and other properties

Fill defaults to none, but can be passed as a React prop

<FeatherIcon icon="heart" fill="red" />

Addtionally, you can add any other SVG tag properties, and they will pass through.

Setting colors

Use CSS. The icons default to use currentColor. This is equivalent to whatever text color is being used in the icon's container.

Dynamically change icons

Toggle icon example:

const ToggleIconContainer = () => {
  const [icon, setIcon] = useState('x');

  return (
    <div>
      <FeatherIcon icon={icon} />
      <ul>
        <li>
          <button onClick={() => setIcon('x')}>Make the Icon an X</button>
        </li>
        <li>
          <button onClick={() => setIcon('anchor')}>
            Make the Icon an Anchor
          </button>
        </li>
        <li>
          <button onClick={() => setIcon('box')}>Make the Icon a box</button>
        </li>
      </ul>
    </div>
  );
};

The icons are all square, based on a 24x24 grid.

The full list of icon names can be referenced at: feathericons.com

Contributing

To build the bundled assets for consumption yarn build

Updating the icons

If you found a missing icon, it is pretty easy to generate a new icons.json and get a PR up so this package stays in sync with the latest feather icons. Go into your desired project directory (ideally one directory above where you have feather-icons-react saved)

  1. git clone https://github.com/feathericons/feather.git
  2. cd feather && npx install
  3. npx babel-node bin/build-icons-json.js
  4. cp dist/icons.json ../feather-icons-react/src/icons.json
  5. Now open the file you just copied. Format the file, try to avoid entire green so the diff looks neat in the PR.

Alternatively, you can simply copy just the lines from the JSON file you know are missing. This is easier if you're just adding one new icon.

Testing your changes

You can use the demo directory to verify your changes.

Build the main package first (if not already built):

yarn build

Navigate to the demo directory:

cd demo

Install demo dependencies:

yarn install

Start the dev server:

yarn dev

TODO

  • Add tests both to the icon render and the generate icon exports script
  • Automatically generate new icons via script.
    • could copy build-icons-json script from feather-icons