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.