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.
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.
feather-icons-react wraps the original Feather Icons.
// 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.
// lucide-react: Active maintenance
// New icons added frequently
import { Home } from 'lucide-react';
remixicon-react wraps the Remix Icon set.
// remixicon-react: Community wrapper
// Icon set is active, wrapper varies by author
import { RiHomeLine } from 'remixicon-react';
feather-icons-react uses named exports.
// feather-icons-react: Named exports
import { User, Settings } from 'feather-icons-react';
lucide-react uses named exports.
// lucide-react: Named exports
import { User, Settings } from 'lucide-react';
remixicon-react often uses named exports.
// remixicon-react: Named exports (common)
import { RiUserLine, RiSettingsLine } from 'remixicon-react';
feather-icons-react accepts standard props.
size, color, and className.// feather-icons-react: Basic props
<Home size={24} color="currentColor" className="icon" />
lucide-react offers more control.
strokeWidth adjustment dynamically.// lucide-react: Extended props
<Home size={24} color="currentColor" strokeWidth={2} className="icon" />
remixicon-react varies by wrapper.
size and color.// remixicon-react: Variable props
<RiHomeLine size={24} color="currentColor" className="icon" />
feather-icons-react has a limited set.
// feather-icons-react: Limited set
// No filled variants available
<Home />
lucide-react expands the set significantly.
// lucide-react: Expanded set
// Includes icons missing from original Feather
<Home />
remixicon-react offers massive variety.
// remixicon-react: Massive variety
// Choose between Line and Fill versions
<RiHomeLine />
<RiHomeFill />
feather-icons-react handles basic A11y.
aria-label manually.// feather-icons-react: Manual A11y
<Home aria-label="Home" role="img" />
lucide-react encourages A11y props.
// lucide-react: Manual A11y
<Home aria-label="Home" role="img" />
remixicon-react handles A11y similarly.
// remixicon-react: Manual A11y
<RiHomeLine aria-label="Home" role="img" />
| Feature | feather-icons-react | lucide-react | remixicon-react |
|---|---|---|---|
| Status | โ ๏ธ Archived underlying set | โ Active | โ Active |
| Icons | ~280 | ~1000+ | ~2000+ |
| Styles | Outline Only | Outline Only | Line & Fill |
| Props | size, color | size, color, strokeWidth | size, color (varies) |
| Imports | Named Exports | Named Exports | Named Exports (usually) |
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.
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.
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.
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.
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
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.
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
To build the bundled assets for consumption
yarn build
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)
git clone https://github.com/feathericons/feather.gitcd feather && npx installnpx babel-node bin/build-icons-json.jscp dist/icons.json ../feather-icons-react/src/icons.jsonAlternatively, 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.
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