Icons Library

The Infinite Icon Toolkit · by Nirvani

200K+Icons
150+Libraries
5Copy formats
LiveSearch
NIRVANI·Icons Library The Infinite Icon Toolkit
200K+ Icons 150+ Sets Live
Open-source icon search

The Infinite Icon Toolkit

Search 200,000+ open-source icons across 150+ libraries, live. Tune the color, size, and weight, then copy any icon as SVG, data URI, JSX, web component, or CSS. One search box. Every icon set worth knowing.

Color
Size px
Type at least two characters to search the master database.

Jump to a category

Searching the database

Search for an icon to pull from the live database.

Try a category below, or type "arrow", "user", "chart".

The Libraries

Browse by icon set

Every icon here comes from a curated open-source library. These are the sets worth knowing, pulled live from the registry with real counts and licenses. Click any set to browse its full catalog.

Five ways to copy

Copy in the format you actually ship

Pick a format with the toggle above the results, then click any icon. The toolkit applies your chosen color and size, then writes the exact snippet to your clipboard. No download step, no asset folder.

FormatWhat you getBest for
SVGRaw <svg> markup with your color and size baked in.Inline in HTML, design tools, hand-tuning paths.
Data URIA data:image/svg+xml string, URL-encoded.<img src>, favicons, single-file builds.
JSXAn <Icon /> tag for @iconify/react.React, Next.js, any JSX component tree.
Web ComponentAn <iconify-icon> custom element.Plain HTML, Vue, Svelte, web components.
CSSA background-image rule with an encoded mask.Pseudo-elements, buttons, pure-CSS UI.
Under the hood

How the toolkit works

No icons are bundled here. Everything is pulled on demand from the open Iconify registry, so the catalog is always current and the page stays light.

Live search

Each query hits the registry across every indexed set at once and returns the closest matches. Two characters is enough to start.

Tuned on copy

Your color and pixel size are applied to the icon the moment you copy it, so the snippet drops into your code already styled.

Favorites that stick

Star the icons you reach for and they are saved to this browser. Open the drawer any time to copy them again.

License-aware

Every set lists its license. Most are MIT or Apache 2.0 and free for commercial work. The brand sets are trademarks, used per their guidelines.

Start here

Common UI needs, mapped

Not sure what to search for? These are the icons every product reaches for. Click any one to pull a full set of options from the live database.

Homehouse, dashboard
Searchmagnifier, find
Settingsgear, cog, config
Accountuser, profile, avatar
Notificationsbell, alert
Addplus, create, new
Deletetrash, remove
Editpencil, write
Downloadsave, export
Uploadimport, attach
Successcheck, done, confirm
Warningalert, caution
Infohelp, about
Closex, dismiss, cancel
Filterfunnel, sort
Sharesend, network
Linkurl, chain, copy
Calendardate, schedule
Vieweye, preview, show
Securitylock, shield, key
Drop it in

Embed in your stack

The copy button hands you a ready snippet, but here is the bigger picture for each framework. The web-component and React approaches keep icons by name, so they stay tiny and recolor with your CSS.

index.html
<!-- Load the web component once, in your head -->
<script src="https://code.iconify.design/iconify-icon/2.1.0/iconify-icon.min.js"></script>

<!-- Then use any icon, anywhere, by name -->
<iconify-icon icon="ph:heart-bold"></iconify-icon>
<iconify-icon icon="mdi:home" style="font-size:32px;color:#D4A843"></iconify-icon>

Size with font-size, color with color. The icon inherits both from its surroundings, so theming is automatic.

Component.jsx
// npm i @iconify/react
import { Icon } from '@iconify/react';

export default function Like() {
  return (
    <button className="like">
      <Icon icon="ph:heart-bold" width={20} />
      Like
    </button>
  );
}

Icons load on demand and tree-shake automatically. No icon font, no asset folder, no build step beyond the package.

Component.vue
<!-- npm i @iconify/vue -->
<script setup>
import { Icon } from '@iconify/vue';
</script>

<template>
  <Icon icon="ph:heart-bold" width="20" />
</template>

Works the same in Nuxt. The component accepts width, height, color, rotate, and flip props.

Component.svelte
<!-- npm i @iconify/svelte -->
<script>
  import Icon from '@iconify/svelte';
</script>

<Icon icon="ph:heart-bold" width="20" />

Astro, SolidJS, Ember, and Lit all have first-party Iconify packages that follow the same shape.

Inline SVG
<!-- Use the SVG copy format for full control -->
<svg viewBox="0 0 24 24" width="24" height="24"
     fill="currentColor">
  <path d="M12 21 ..." />
</svg>

Inline SVG is the most portable option. Set fill="currentColor" so the icon follows your text color in any theme.

styles.css
/* Use the CSS copy format for pseudo-elements */
.btn::before {
  content: "";
  display: inline-block;
  width: 18px; height: 18px;
  background-color: currentColor;
  -webkit-mask: url("data:image/svg+xml,...") center / contain no-repeat;
          mask: url("data:image/svg+xml,...") center / contain no-repeat;
}

Using the icon as a mask with background-color: currentColor lets you recolor it from CSS, perfect for hover and focus states.

Patterns

Recipes worth keeping

Small, reusable patterns that come up again and again once icons are in your product. Copy, adapt, ship.

01

Theme-aware icon

Let one icon serve light and dark mode by inheriting the text color instead of hard-coding a fill.

currentColor
<svg fill="currentColor"> ... </svg>
/* now this controls the icon too */
.card { color: #F1F5F9; }
.card.dark { color: #0A0A0A; }
02

Labeled icon button

An icon-only button still needs a name for screen readers. Add an aria-label and hide the glyph from the tree.

accessible button
<button aria-label="Delete item">
  <iconify-icon icon="ph:trash-bold" aria-hidden="true"></iconify-icon>
</button>
03

Spinning loader

Any icon becomes a loader with a one-line keyframe. A spinner or circle-notch reads best.

loader
<iconify-icon icon="ph:spinner-bold" class="spin"></iconify-icon>
/* css */
.spin { animation: spin 0.7s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }
04

Status dot pairing

Pair an icon with a small colored dot to show state without changing the icon itself.

status
<span class="with-status">
  <iconify-icon icon="ph:bell-bold"></iconify-icon>
  <i class="dot"></i>
</span>
05

Crisp favicon

Use the Data URI copy format to set a favicon with zero extra files. Great for single-page tools.

favicon
<link rel="icon" type="image/svg+xml"
      href="data:image/svg+xml,..." />
06

Consistent sizing token

Define icon sizes as CSS variables so the whole product scales from one place.

tokens
:root { --ic-sm: 16px; --ic-md: 20px; --ic-lg: 24px; }
iconify-icon { font-size: var(--ic-md); }
.toolbar iconify-icon { font-size: var(--ic-lg); }
The fine print, simply

Licensing, in plain terms

Every set lists its license on its card above. Here is what the common ones actually mean for shipping work. This is a plain-language summary, not legal advice. When in doubt, read the set's own license file.

MITCommercial OK
Massachusetts Institute of Technology License

The most permissive common license. Use, modify, and ship in commercial products freely.

  • Commercial use
  • Modify and redistribute
  • Keep the license notice
Apache 2.0Commercial OK
Apache License 2.0

Permissive like MIT, with an explicit patent grant. Common for large vendor sets.

  • Commercial use
  • Patent grant included
  • State significant changes
ISCCommercial OK
Internet Systems Consortium License

Functionally equivalent to MIT, just shorter wording. Fully permissive.

  • Commercial use
  • Modify and redistribute
  • Keep the license notice
CC BY 4.0Attribution
Creative Commons Attribution 4.0

Free for commercial use, but you must credit the author. A short line in your about or footer is enough.

  • Commercial use
  • Credit the author
CC0 1.0Public domain
Creative Commons Zero

The author has waived all rights. Use it any way you like, no attribution required.

  • Anything goes
  • No attribution needed
BrandTrademark
Logos and brand marks

Company logos are trademarks. The artwork may be free to use, but the brand has rules about how its mark is shown. Follow each brand's guidelines.

  • Respect brand guidelines
  • No implied endorsement
Craft

Principles for using icons well

A great icon set is only half the job. These are the habits that make icons feel intentional in a real product.

Commit to one set

Mixing libraries is the fastest way to look unfinished. Pick a single set and stay in it. Consistent stroke, corner, and grid is what reads as polish.

Match weight to text

A thin icon next to bold text looks weak. Align the icon's visual weight with the type it sits beside so they feel like one element.

Size for the target, not the grid

An icon on a touch target needs room around it. The glyph can be 20px while its tap area is 44px. Pad, do not enlarge.

Label anything ambiguous

A gear means settings, a heart is less certain. If an icon could be misread, give it a text label or a tooltip. Icons assist, they rarely replace words.

Use color for meaning, not decoration

Reserve color shifts for state: success, warning, danger. A wall of multicolor icons turns signal into noise.

Align to the optical center

A play triangle looks off when centered by its bounding box. Nudge it to where the eye expects the center, not where math puts it.

Respect the metaphor

A floppy disk for save still works because people learned it, but question stale metaphors for new audiences. The clearest icon wins over the cleverest.

Keep filled and outline consistent

If you use filled icons for active states and outline for inactive, do it everywhere. A mixed system confuses more than it guides.

For everyone

Accessibility checklist

Icons carry meaning, so they have to work for assistive tech too. Run through this before you ship.

Hide decorative iconsAdd aria-hidden="true" when the icon only repeats nearby text.
Label meaningful iconsAn icon-only button needs aria-label so its purpose is announced.
Hit a contrast ratioMeaningful icons should clear 3:1 against their background, like UI controls.
Keep targets largeAim for at least 44 by 44 pixels of tappable area on touch.
Pair with text where it mattersCritical actions read faster with a label beside the glyph.
Do not rely on color aloneRed and green look identical to many users. Add a shape or label.
Do not animate without reasonRespect prefers-reduced-motion for spinners and transitions.
Do not shrink past legibilityBelow 14px most detailed icons turn to mush. Pick a simpler glyph.
Reference

Sizing scale

Common pixel sizes and where each one earns its place. Most sets are drawn on a 24px grid, so sizes that divide cleanly stay sharp.

SizeNameWhere it fits
12pxMicroInline hints, dense tables, tiny badges. Use simple glyphs only.
16pxSmallInline with body text, menu items, compact toolbars.
20pxDefaultThe workhorse size for buttons, inputs, and list rows.
24pxMediumPrimary toolbar actions, navigation, the native grid size.
32pxLargeEmpty states, feature callouts, prominent buttons.
48pxDisplayHero moments, onboarding, marketing. Use illustrative sets here.
64px+ShowcaseFull illustrations and spot art. Stroke icons start to feel thin.
Motion

Animating icons

A little motion makes an icon feel alive. Keep it short, purposeful, and always respect reduced-motion. Here are the patterns worth reusing.

A1

Spin on load

The classic loading state. Best on a spinner, circle-notch, or gear glyph.

spin
.spin { animation: spin 0.8s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) {
  .spin { animation: none; }
}
A2

Pulse for attention

A gentle scale pulse draws the eye to a new notification or live status without shouting.

pulse
.pulse { animation: pulse 1.6s ease-in-out infinite; }
@keyframes pulse {
  0%, 100% { transform: scale(1); opacity: 1; }
  50% { transform: scale(1.12); opacity: 0.8; }
}
A3

Hover lift on a button

Nudge an icon on hover so a button feels responsive. Keep the move small, a few pixels at most.

hover
.btn iconify-icon { transition: transform 0.2s ease; }
.btn:hover iconify-icon { transform: translateX(3px); }
A4

Draw-on stroke

For an outline icon, animate the stroke so it appears to draw itself. Works best on simple, single-path glyphs.

draw
path { stroke-dasharray: 100; stroke-dashoffset: 100;
  animation: draw 0.9s var(--ease) forwards; }
@keyframes draw { to { stroke-dashoffset: 0; } }
A5

Swap on state

Cross-fade between two icons, like play and pause, by stacking them and toggling opacity. Cleaner than swapping the node.

swap
.swap iconify-icon { transition: opacity 0.2s ease; }
.swap .pause { opacity: 0; position: absolute; }
.swap.is-playing .play { opacity: 0; }
.swap.is-playing .pause { opacity: 1; }
Anatomy

What makes an icon an icon

Behind every clean icon is a quiet system. Knowing the parts helps you choose sets that will sit together and spot the ones that will not.

The grid

Most sets are drawn inside a fixed square, often 24 by 24. Every icon is built on this grid so they share scale and rhythm.

Live area and padding

Inside the grid sits a slightly smaller live area. The padding around it keeps icons from touching their container edges.

Keyline shapes

A square, a circle, and two rectangles define how big a shape should be so a round icon and a square one feel equal.

Stroke and terminals

The line weight and how lines end, rounded or square, give a set its voice. Consistency here is what reads as quality.

Corner radius

How soft the corners are. A shared radius ties a set together, while a mismatched one is the first thing that looks off.

Optical center

Some shapes need nudging off the mathematical center to look balanced. A play triangle is the classic example.

Compatibility

Framework support

Every icon here is available through these official Iconify packages. Same icon names, same props, whatever you build in.

FrameworkPackageUsage
Plain HTMLiconify-iconOne script tag, then the web component anywhere.
React@iconify/reactThe Icon component with on-demand loading.
Vue 3@iconify/vueThe Icon component, also works in Nuxt.
Svelte@iconify/svelteDefault Icon import, SvelteKit friendly.
Angular@iconify/angularThe ic-icon component for templates.
Astroastro-iconThe Icon component, build-time inlined.
Ember@iconify/emberA helper for Handlebars templates.
Tailwind@iconify/tailwindA plugin that turns icons into utility classes.
Any build@iconify/jsonThe full registry as data for custom tooling.
Context

How we got to live SVG icons

A short tour of how interface icons evolved, and why on-demand SVG won.

The image era

Early icons were tiny bitmaps, one PNG per icon per size. Crisp at exactly one size, blurry everywhere else, and heavy to manage.

The icon-font era

Packing icons into a font made them scalable and recolorable with CSS. But fonts are awkward for accessibility and ship every glyph whether you use it or not.

The SVG era

SVG gave each icon real shapes, perfect scaling, full styling, and proper accessibility. The question shifted to how you deliver them.

On-demand today

Now icons load by name from a shared registry, only when used. Hundreds of sets become one searchable catalog, and your bundle stays tiny.

Speed

Performance notes

Icons are small, but a careless setup can still cost you. A few habits keep them free.

Load only what you use

Reference icons by name so your bundler ships just those glyphs. A whole icon font can be hundreds of kilobytes you never render.

Cache after first paint

The web component stores fetched icons so repeat views are instant. For critical above-the-fold icons, inline the SVG to skip the request entirely.

Inline the hero icons

For the handful of icons visible on first load, paste the raw SVG into your markup. No network call, no layout shift.

Size from CSS, not files

One SVG scales to every size. You never need a separate file per dimension, which keeps your asset count near zero.

Move faster

Power-user shortcuts

Small moves that make the toolkit feel like an extension of your hands.

Press / to search

Jump straight to the search box from anywhere on the page without reaching for the mouse.

Press F for favorites

Open your saved icons drawer instantly. Press Esc to close it again.

Set format once

Pick SVG, JSX, or any format with the toggle, then every click copies in that format until you change it.

Pre-tune color and size

Set your brand color and target size before you start clicking, and every copied snippet arrives styled.

Questions

Frequently asked

Reference

Icon design glossary

A working vocabulary for anyone wiring icons into a product. The terms that come up the moment you move past copy and paste.

Copied