← back to all libraries
// ICON LIBRARY

Phosphor Icons

Flexible icon family with 6 weights for interfaces and more

reactvuenextjsMIT
GitHub →Official Site →

STATS

1,248
Icons
8,000
GitHub Stars
0.4M
Weekly Downloads
MIT
License
~1.5kb per icon
Bundle Size
2020
Since

OVERVIEW

Phosphor Icons is a flexible icon family designed for interfaces, diagrams, and presentations. With over 1,200 icons available in 6 different weights, it offers the most style variety of any major open-source icon library.

The 6 weights — thin, light, regular, bold, fill, and duotone — give designers and developers extraordinary control over visual hierarchy and tone. You can use thin icons for elegant, minimal UIs, bold icons for high-contrast accessibility needs, and duotone icons for a modern two-color effect.

Phosphor ships as a React package with full TypeScript support. Icons are tree-shakable and accept size, color, weight, and mirrored props. The weight prop makes it trivial to switch between all 6 variants without changing your import. A Figma plugin is available with all weights.

// VERDICTPhosphor is the best choice when your design requires multiple icon styles within the same library. The duotone weight in particular is unique among free icon libraries and gives applications a premium, modern feel that is difficult to achieve otherwise.

INSTALLATION

react
npm install @phosphor-icons/react
nextjs
npm install @phosphor-icons/react

// Note: Compatible with Next.js App Router. Works in both Server and Client Components.
vue
npm install @phosphor-icons/vue
svelte
// No official Svelte package. Use the SVG files directly from phosphoricons.com
vanilla
npm install @phosphor-icons/web

CODE EXAMPLES

basic
import { House, Gear, User } from '@phosphor-icons/react'

export default function App() {
  return (
    <div>
      <House size={24} />
      <Gear size={24} weight="bold" />
      <User size={24} weight="duotone" />
    </div>
  )
}
all Weights
import { Heart } from '@phosphor-icons/react'

export default function WeightShowcase() {
  const weights = ['thin', 'light', 'regular', 'bold', 'fill', 'duotone']
  return (
    <div className="flex gap-4">
      {weights.map(weight => (
        <Heart key={weight} size={32} weight={weight} />
      ))}
    </div>
  )
}
duotone
// Duotone icons support custom color for the secondary layer
import { ShieldCheck } from '@phosphor-icons/react'

export default function Badge() {
  return (
    <ShieldCheck
      size={48}
      weight="duotone"
      color="#6366f1"
    />
  )
}

PROS & CONS

PROS
6 weight variants
No other free icon library offers this many style variants from a single import. Switch weights with one prop change.
Duotone support
The duotone weight creates a two-color effect that gives applications a premium, modern aesthetic at no cost.
Large icon count
1,248 icons covering most common UI needs with good coverage of specialized categories.
Simple weight API
Changing from outline to filled to duotone is as simple as changing the weight prop — no different imports needed.
Figma plugin
Full Figma plugin support with all 6 weights, making designer-developer collaboration seamless.
CONS
Heavier package size
Because each icon includes 6 weight variants, the package is larger than single-style libraries like Lucide.
Less community adoption
Phosphor is less widely used than Lucide or Heroicons, meaning fewer tutorials, Stack Overflow answers, and community resources.
No Svelte official package
Svelte developers need to use SVG files directly, which is more cumbersome than a dedicated package.

WHO SHOULD USE THIS

USE IF YOU...
Projects where design requires multiple icon weights or styles
Applications that want duotone icons for a modern premium feel
Teams where designers and developers both need Figma and code access
Marketing sites and landing pages where visual variety matters
Apps targeting accessibility where bold/heavy icon weights improve readability
AVOID IF YOU...
Projects that need a single consistent style and maximum performance
Svelte developers who need an official package
Teams that prioritize community familiarity and documentation volume

FREQUENTLY ASKED QUESTIONS

Q.What is a duotone icon?
A.A duotone icon uses two colors — a primary color and a lighter secondary color applied to different parts of the icon. In Phosphor, the secondary layer uses 20% opacity of the primary color by default, creating a subtle two-tone effect.
Q.How do I change the weight of a Phosphor icon?
A.Use the weight prop on any icon component. Available values are thin, light, regular, bold, fill, and duotone. For example: <House weight='duotone' />.
Q.Is Phosphor Icons free for commercial use?
A.Yes. Phosphor Icons uses the MIT license which allows free use in any commercial project without attribution.
Q.How does Phosphor compare to Lucide Icons?
A.Phosphor offers 6 weight variants vs Lucide's single outline style. Lucide has a slightly more active community and is more commonly seen in React projects. Phosphor wins on style flexibility, Lucide wins on community support and simplicity.
Q.Does Phosphor Icons work with Tailwind CSS?
A.Yes. Pass className with Tailwind utilities for sizing. For color, use the color prop instead of text color utilities since Phosphor icons use fill and stroke rather than just currentColor.

COMPARE WITH ALTERNATIVES

Phosphor Icons vs Lucide IconsPhosphor Icons vs HeroiconsPhosphor Icons vs Tabler IconsPhosphor Icons vs Remix IconPhosphor Icons vs Feather IconsPhosphor Icons vs Bootstrap IconsPhosphor Icons vs Radix Icons