React icons without the dependency
11,000+ hand-crafted SVG icons that paste straight into JSX. No icon package to install, version or tree-shake: your bundle ships only the icons you use, themed with currentColor.
The pattern
Copy the SVG, wrap it once, use it everywhere
Every Majesticon is a clean 24×24 SVG. One tiny component per icon gives you size, color and stroke control.
1. Paste the icon into a component
Copy any icon from the icon explorer, camelCase the SVG attributes for JSX, and swap the stroke color for currentColor. This is the real arrow-right icon:
export function ArrowRightIcon({ size = 24, strokeWidth = 2, ...props }) {
return (
<svg width={size} height={size} viewBox="0 0 24 24" fill="none" {...props}>
<path
d="M19 12L13 6M19 12L13 18M19 12H5"
stroke="currentColor"
strokeWidth={strokeWidth}
strokeLinecap="round"
strokeLinejoin="round"
/>
</svg>
);
}2. Theme it like text
Because the icon inherits currentColor, color, hover states and dark mode come from your existing CSS, and stroke-based line icons take any weight without falling apart.
// Inherits the text color, no color prop needed.
<button className="text-violet-600 hover:text-violet-700">
Continue <ArrowRightIcon size={20} />
</button>
// Line icons are stroke-based, so weight is one prop away.
<HeartIcon size={32} strokeWidth={1.5} />Try it live
Style, stroke and color, tuned before you copy
The icon explorer restyles the real SVG source, so what you copy is exactly what you tuned. Try it on these:
Every icon works like this: pick a style, match your stroke width, drop it in. Try the full explorer
Why copy-paste
What plain SVG buys you in a React app
Icon packages are convenient until they aren't. Owning the SVG keeps the trade-offs on your side.
Zero bundle overhead
No library in package.json, no barrel-file imports pulling thousands of icons into your dev server. Each icon costs exactly its own bytes.
Server-component ready
Inline SVG renders anywhere React does (RSC, SSR, static export) with no client runtime and no hydration cost.
One consistent set
All 11,000+ icons share a 24×24 grid, stroke geometry and three matching styles: no mixing libraries to fill gaps.
Questions
Frequently asked questions
Everything about licensing, updates and how the library works.
- Do I need to install an npm package?
- No. Majesticons are plain, optimized SVGs: copy an icon from the web app and paste it into a JSX component. Your bundle only ever contains the icons you actually use, with no icon-library dependency to keep updated. A free MIT-licensed subset is also published on npm as "majesticons" if you prefer files.
- How do I change the icon color in React?
- Set the SVG stroke (or fill, for solid icons) to currentColor and the icon inherits CSS text color. Tailwind text-* classes, styled-components themes and plain CSS all just work.
- Can I adjust the stroke width?
- Yes: line icons are built from strokes with uniform round caps and joins, so strokeWidth={1.5} thins every part of the icon evenly. This is a deliberate design constraint of the set; icons drawn as outlined fills can’t do this.
- Does this work with Next.js, Vite and React Native?
- Next.js and Vite: yes, inline SVG in JSX is framework-agnostic and server-component friendly. For React Native you’d render the same paths through react-native-svg.
- Are the icons free?
- Browsing and previewing all 11,000+ icons is free, and 760 icons are MIT-licensed on npm. Copying and downloading the full set requires a one-time license, no subscription.
Icons your React app never has to update
Browse everything free. Pay once for copy, download, the Figma file and lifetime updates.