lucide-react

1,700+ tree-shakeable, customizable SVG icon components for React applications

Library
npm
v1.48.0
24,747 stars
ISC

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
92 /100 Excellent
Development Activity 100
Maintenance 100
Community 68
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
87 /100 Excellent
Architecture 87
Code Quality 88
Innovation 82
Learning Curve 90

lucide-react is the official React implementation of the Lucide icon library, a community-maintained fork of Feather Icons that has grown to over 1,700 consistently designed SVG icons. Each icon ships as an individually importable React component built on a shared forwardRef-based renderer, so bundlers can tree-shake unused icons out of the final build.

The library exposes simple, consistent props for size, stroke width, color, and absolute stroke width, plus a LucideProvider context for setting shared defaults across an entire icon tree. It also ships a DynamicIcon component and a dynamic-imports map for cases where icon names are only known at runtime (e.g. driven by CMS content), keeping static usage fully tree-shakeable while still supporting dynamic lookups.

What You Get

  • 1,700+ individually importable icon components, each a small forwardRef-wrapped SVG element
  • Consistent props across every icon: size, color, strokeWidth, absoluteStrokeWidth, and standard SVG/className props
  • A LucideProvider React context for setting shared icon defaults (size, color, stroke width) app-wide
  • DynamicIcon component plus a dynamicIconImports map for rendering icons by string name at runtime
  • Full TypeScript typings (LucideIcon, LucideProps, IconNode) generated alongside the icon set
  • ESM and CJS builds with sideEffects: false for reliable tree-shaking in Webpack, Rollup, Vite, and Next.js

Common Use Cases

  • Adding a consistent icon set to a React or Next.js UI without hand-authoring or hosting SVGs
  • Building design systems and component libraries (e.g. shadcn/ui-style stacks) that standardize on one icon language
  • Rendering icons by dynamic string name from CMS or config-driven content via DynamicIcon
  • Theming icon appearance globally (size/stroke/color) through LucideProvider instead of prop-drilling

Under The Hood

Architecture Every icon in packages/lucide-react/src/icons is a thin wrapper generated by createLucideIcon(name, iconNode) (src/createLucideIcon.ts), which forwards a ref through a shared Icon component (src/Icon.ts) that renders the actual <svg> element and its child SVG tags from a compact IconNode tuple array. Icon reads defaults from defaultAttributes.ts and an optional LucideContext (src/context.ts) set via LucideProvider, so per-icon props always take precedence over provider defaults, which take precedence over library defaults. A parallel DynamicIcon.ts plus generated dynamicIconImports.mjs map lets consumers resolve an icon by string name at runtime for CMS-driven use cases, kept separate from the static exports so default imports remain tree-shakeable. The icon source SVGs and metadata live at the monorepo root (icons/*.svg, icons/*.json) and are code-generated into src/icons and src/aliases by the @lucide/build-icons tool during the package’s build:icons step, then bundled by Rollup (rollup.config.mjs) into ESM/CJS outputs plus .d.ts typings.

Tech Stack The package is TypeScript-first (implementation and tests both in .ts/.tsx), targets React 16.5.1 through 19 as a peer dependency ("react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"), and is built with Rollup plus rollup-plugin-dts and rollup-plugin-preserve-directives (to retain the 'use client' directive on Icon.ts and context.ts for RSC-aware bundlers). It shares small internal utilities (mergeClasses, toKebabCase, toPascalCase, hasA11yProp) from an internal @lucide/shared workspace package rather than pulling in an external classnames dependency, keeping runtime dependencies at zero. The repo is a pnpm workspace monorepo housing ten framework-specific packages (React, Vue, Svelte, Solid, Preact, Angular, React Native, Astro, static SVG/font, and vanilla lucide) built from one shared icon source of truth.

Code Quality Each of the roughly 1,700 generated icon components is exercised by a shared Vitest suite (tests/createLucideIcon.spec.tsx, tests/Icon.spec.tsx, tests/lucide-react.spec.tsx, tests/DynamicIcon.spec.tsx, tests/context.spec.tsx) using React Testing Library and snapshot assertions (tests/__snapshots__) to catch unintended markup changes, plus a dedicated directives.spec.ts that asserts the 'use client' directive survives the Rollup build. Naming is consistent and mechanically enforced since components are code-generated from icon metadata rather than hand-written, eliminating drift between icons. TypeScript strict typings (IconNode, LucideProps, LucideIcon) are checked via tsc in the build pipeline (pnpm typecheck), and CI (.github/workflows) runs lint, format, and JSON-schema validation (ajv against icon.schema.json) on every change before an icon can be merged.

API Design The public surface is deliberately minimal: import a PascalCase icon component and pass standard SVG props plus size/color/strokeWidth/absoluteStrokeWidth — no custom wrapper markup or CSS required to get a working icon. Every icon shares the exact same prop contract, so switching from one icon to another never requires relearning an API, and the optional LucideProvider context removes repetitive prop-passing for apps that want one global icon style. The separation between static per-icon imports (tree-shakeable) and the opt-in DynamicIcon runtime-lookup path is a thoughtful ergonomics/bundle-size tradeoff exposed explicitly to the consumer rather than hidden behind one do-everything component.

Used by 234 apps in this directory

Go
91%
Apache 2.0

Gatus

Devops · Monitoring

12,186

Developer-oriented health dashboard with active endpoint probing, multi-protocol checks, and 40+ alerting integrations so you know about failures before your users do.

View details
79
Repo Health
84
Technical
75
Dependency
Built with
Go 91%
Updated 2 weeks ago
TypeScript
51%
MIT

Ghost

Blogging · CMS

55,450

Open source headless Node.js CMS for professional publishing, paid memberships, and newsletters with a fully owned audience.

View details
96
Repo Health
85
Technical
67
Dependency
Built with
TypeScript 51%
JavaScript 44%
Updated 1 weeks ago
TypeScript
92%
MIT

GitDiagram

AI Development · Developer Tools

17,239

Turn any GitHub repository into an interactive architecture diagram in seconds

View details
71
Repo Health
79
Technical
75
Dependency
Built with
TypeScript 92%
Updated 1 weeks ago
TypeScript
91%
Other

GitNexus

AI Code Assistants · Developer Tools · Mcp

47,620

Index any codebase into an interactive knowledge graph and give your AI agents deep architectural context via MCP — with zero servers required.

View details
88
Repo Health
86
Technical
73
Dependency
Built with
TypeScript 91%
Updated 1 weeks ago
JavaScript
88%
GPL 3.0

Glass by Pickle

AI Assistants

7,604

A privacy-first desktop AI assistant that sees your screen, hears your meetings, and turns live context into structured summaries—without sending a single byte to the cloud.

View details
43
Repo Health
76
Technical
68
Dependency
Built with
JavaScript 88%
TypeScript 12%
Updated 11 months ago
TypeScript
51%
AGPL 3.0

Glean

Bookmarks Archiving · Knowledge Management

868

Self-hosted RSS reader and personal knowledge management tool with MCP server integration for AI assistant connectivity.

View details
73
Repo Health
75
Technical
70
Dependency
Built with
TypeScript 51%
Python 45%
Updated 2 weeks ago
Go
68%
MIT

Gogs

Developer Tools

47,840

The painless self-hosted Git service that runs on anything from a Raspberry Pi to a $5 cloud droplet, delivering GitHub-like workflows as a single Go binary.

View details
87
Repo Health
79
Technical
71
Dependency
Built with
Go 68%
Go Template 16%
Updated 3 weeks ago
Rust
59%
MIT

Handy

Productivity · Voice AI

32,320

Free, offline, open-source speech-to-text that pastes directly into any app on Windows, macOS, and Linux.

View details
87
Repo Health
78
Technical
72
Dependency
Built with
Rust 59%
TypeScript 30%
Updated 1 weeks ago
Go
86%
MIT

Hatchet

AI Development · Automation · Developer Tools

8,014

A Postgres-backed orchestration engine for background tasks, AI agents, and durable workflows that replaces Redis queues and multi-datastore durable execution platforms with a single self-hostable service.

View details
88
Repo Health
83
Technical
67
Dependency
Built with
Go 86%
Updated 1 weeks ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers