--- name: react-icons description: Use react-icons v5 icon-pack subpath imports, core component types, context, and documented packaging boundaries without relying on obsolete pre-v3 imports or unavailable manifest paths. --- Verified against react-icons@5.7.0 on 2026-09-07. 3 of 3 examples executed. # react-icons ## Version and package boundary This skill targets `react-icons` `^5.0.0`, which stays within major version 5. The researched documented release is 5.7.0. React is a peer dependency, and the package publishes CommonJS, ES module, and TypeScript entry points. It declares `sideEffects: false`. The icons are React components. Normal usage belongs in a React application or another React renderer. The standalone examples below create React elements and inspect the exported API; they do not attempt to render into a browser or server output. ## Import icons from an icon-pack subpath Use a named import from the pack subpath: ```tsx import { FaBeer } from "react-icons/fa"; ``` The same pattern applies to other packs, for example: ```tsx import { ICON_NAME } from "react-icons/md"; ``` The documented pack subpaths include `ai`, `bi`, `bs`, `cg`, `ci`, `di`, `fa`, `fa6`, `fc`, `fi`, `gi`, `go`, `gr`, `hi`, `hi2`, `im`, `io`, `io5`, `lia`, `lu`, `md`, `pi`, `ri`, `rx`, `si`, `sl`, `tb`, `tfi`, `ti`, `vsc`, and `wi`. A typical React usage is: ```tsx import { FaBeer } from "react-icons/fa"; function Question() { return

Lets go for a ?

; } ``` ### Common import mistake Do not use the old pre-v3 per-file form: ```tsx import FaBeer from "react-icons/lib/fa/beer"; ``` That shape was replaced by the named per-pack import: ```tsx import { FaBeer } from "react-icons/fa"; ``` The v4-shaped named subpath imports remain the documented v5 shape. The v5.0.0 release specifically documents strict ESM loader compatibility rather than a new icon import migration. ### Standalone import check ```ts pmcp-example import assert from "node:assert/strict"; import { createElement } from "react"; import { FaBeer } from "react-icons/fa"; assert.equal(typeof FaBeer, "function"); const element = createElement(FaBeer, { title: "Beer" }); assert.equal(element.type, FaBeer); assert.equal(element.props.title, "Beer"); ``` ## Core component API The core API exposes these types and functions: - `IconTree`: `{ tag, attr, child }` tree data for an icon. - `GenIcon(data)`: creates an icon component from an `IconTree`. - `IconBase`: the base SVG component. - `IconType`: a component accepting `IconBaseProps`. - `IconBaseProps`: React SVG attributes plus optional `children`, `size`, `color`, and `title`. The core exports are available from `react-icons` and `react-icons/lib` according to the package declarations. `GenIcon` is useful when icon tree data is available programmatically; normal consumers should generally import generated icons from their pack subpath. `size` accepts a string or number. `color` and `title` are also supported alongside normal React SVG attributes. ```ts pmcp-example import assert from "node:assert/strict"; import { createElement } from "react"; import { GenIcon } from "react-icons"; const Icon = GenIcon({ tag: "path", attr: { d: "M0 0h10v10H0z" }, child: [], }); assert.equal(typeof Icon, "function"); const element = createElement(Icon, { size: 24, color: "blue", title: "Square" }); assert.equal(element.type, Icon); assert.equal(element.props.size, 24); assert.equal(element.props.color, "blue"); assert.equal(element.props.title, "Square"); ``` ## Global icon context Import `IconContext` and provide values around icons in a React tree: ```tsx import { IconContext } from "react-icons";
``` The context value can contain: - `color?: string` - `size?: string` - `className?: string` - `style?: React.CSSProperties` - `attr?: React.SVGAttributes` `DefaultContext` is also exported. The context is a React context object, so provide it through React rather than treating it as a standalone plain-object configuration API. ```ts pmcp-example import assert from "node:assert/strict"; import { createElement } from "react"; import { DefaultContext, IconContext } from "react-icons"; assert.equal(typeof IconContext.Provider, "object"); assert.equal(typeof DefaultContext, "object"); const child = createElement("span", null, "icon"); const provider = createElement( IconContext.Provider, { value: { color: "blue", className: "global-class-name" } }, child, ); assert.equal(provider.type, IconContext.Provider); assert.equal(provider.props.value.color, "blue"); assert.equal(provider.props.value.className, "global-class-name"); ``` ## Manifest declarations and runtime path The research describes an `IconManifestType` with these fields: ```ts interface IconManifestType { id: string; name: string; projectUrl: string; license: string; licenseUrl: string; } ``` It also documents an `IconsManifest` declaration. However, the documented declaration path `react-icons/lib/iconsManifest` is not a runnable runtime module in the tested `react-icons@5.7.0` installation. Do not make application code depend on that path without verifying the installed package exposes it. Manifest inspection is therefore not covered by a standalone example here. ## Installation and packaging notes The standard installation is: ```sh npm install react-icons --save ``` or: ```sh yarn add react-icons ``` There is also an `@react-icons/all-files` package with imports such as: ```tsx import { FaBeer } from "@react-icons/all-files/fa/FaBeer"; ``` The researched documentation describes it as a separate, slower-to-install option for environments such as Meteor or Gatsby and warns that it has not had a new release for some time. Prefer the standard `react-icons` package unless that separate packaging mode is specifically required. ## What this skill does not cover - Rendering icons in a browser, server-rendering, or framework-specific integration. - The behavior of every individual icon or icon-pack export. - Choosing an icon by visual appearance or searching the manifest. - Using `IconsManifest` at a runtime path not present in the tested installation. - The internal SVG rendering details of `IconBase`. - Building or modifying the icon database and repository development commands. - The `@react-icons/all-files` package beyond its documented import shape. - Any API or behavior not shown in the supplied v5 research.