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:

Stroke 1.5

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.