mirror of
https://github.com/lucide-icons/lucide.git
synced 2026-11-12 13:38:32 +00:00
* Update images * Adjust color * update accessebility * Add matrix hero * Add typescript documentation * Add basics section to vue pages * Add svelte docs * Fix dynamic sidebar * Add animation? * Some adjustments * Adjust animation * Updates docs * Add scaledown animation * Add docs for vue types * Fix layout accessibility page * fix framework select * adjust easing home animation * Write docs for Vue * Adjust animation home * Adjust home hero animation * Finish svelte docs * Add solid pages * remove spiral animation component * Add group icons * Added solid docs * update preact docs * Adjust examples preact docs * Add snackplayer * Get new editor * Save this * Add examples * Adjust styling * setup custom sandpack * Add script * Format files * Make sandpack plugin work * migrate react docs * Fix svelte and solid examples * Migrate to solid packages * Add darkmode package logos * Fix bug in selector * migrate vue examples * migrate advanced vue items * migrate preact and svelte examples * Add astro docs * adding more docs on guide for lucide library * Fix home animation * Cleanup * Added resources page, with more details and content * Add hero badge for Version 1 * Fix vercel json * Update missing paths * Fix build? * Replace lucide-vue-next * Fix build * Add some docs * update markdown * Setup angular docs * Add basic angular docs * Adjust code examples * Update title and descriptions * Update accessibility link * Update title and description * Add og image * Fix alignment * Add migration guides * Adjust version 1 markdown file * Add migration guide to the main list * Minor fixes * Update docs * Apply feedback * Select icons * Add pointer events none * Fix package links homepage * Format code * Fix types * Fix focus * Fix build * Fix focus * Apply feedback * Adjust imports * Adjust imports * Fix search * Apply feedback * Fix import in font docs * Small fixes * docs(guide): added easter egg icon. stay tuned, guys 😉 * Add llm txt plugin * Adjust logo top * docs(version-1): upgraded @lucide/angular guide for v1 website (#4144) * docs(guide/angular): rewrite some angular documentation * docs(guide/angular): extens angular guide with combining icons & icon provider guides * docs(guide/angular): fix angular sandbox, still needs @lucide/angular release tho * docs(guide/angular): rework the getting started page a bit more, refactor some more prop=>input occurences * docs(guide/angular): context provider => provideLucideConfig * Update docs/guide/angular/migration.md Co-authored-by: Eric Fennis <eric.fennis@gmail.com> * Update docs/guide/angular/advanced/combining-icons.md Co-authored-by: Eric Fennis <eric.fennis@gmail.com> * Apply suggestions from code review Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * docs(guide/angular): rework a11y for better flow & pacing * docs(guide/angular): salvage original phrase, it has better flow * docs(guide/angular): some more a11y nitpicking * docs(guide/angular): reduce llm fatigue * docs(guides/angular): fix app component selector * docs(guides/angular): fix angular sandpacks * Add sandpack angular to improve tree-shakable stack * Update docs/guide/angular/getting-started.md * docs(guides/angular): fix user import in combinding icons guide * docs(guides/angular): fix nested SVG phrasing * Update docs/guide/angular/advanced/with-lucide-lab.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update docs/guide/angular/advanced/filled-icons.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * docs(guides/angular): fix createLucideIcon guide * docs(guides/angular): upgrade all relevant angular sandpack demos --------- Co-authored-by: Eric Fennis <eric.fennis@gmail.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * fix(docs): add autogenerated OG images to gitignore * fix(docs): unify the case of "Lucide" & "Lucide Lab" over all docs and readmes * Fix build * Add next tag to all installation guides * Add top bar notification * Minor fixes * Update text * Add todos * Update og image * Adjust install command * Color top bar * fix(docs): ignore all OG images, expect general.png * fix(docs): fix the package list, hide @lucide/icons, downgrade angular logo, link to v0 guide, fix package title alignment * Update docs/.vitepress/theme/components/base/LayoutTop.vue Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update docs/guide/react/advanced/dynamic-icon-component.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update CONTRIBUTING.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update docs/.vitepress/sidebar/resources.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Fix code example * fix(docs): version 1 => Version 1 * feat(docs): add angular to new features in v1 * Fix next line issue * feat(docs): fix typo (code example_s_) * Fix deadlink * feat(docs): fix some more typos and irky grammar * feat(docs): fix lowercase lucide in sidebar 😅 * Update docs/guide/version-1.md Co-authored-by: Karsa <contact@karsa.org> --------- Co-authored-by: Karsa <contact@karsa.org> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
173 lines
6.4 KiB
Markdown
173 lines
6.4 KiB
Markdown
# @lucide/icons
|
|
|
|
`@lucide/icons` is a helper library that exports Lucide **icon data** in a tree-shakable format, also providing utilities for dynamic importing icons.
|
|
|
|
It intentionally ships **no real rendering logic or components** — other packages (for example [`@lucide/angular`](http://npmjs.com/package/@lucide/angular)) can consume this data to render icons in their respective
|
|
frameworks. You can also use this package to build third-party integrations for frameworks we don't (yet) support.
|
|
|
|
## Installation
|
|
|
|
::: code-group
|
|
|
|
```sh [pnpm]
|
|
pnpm add @lucide/icons
|
|
```
|
|
|
|
```sh [yarn]
|
|
yarn add @lucide/icons
|
|
```
|
|
|
|
```sh [npm]
|
|
npm install @lucide/icons
|
|
```
|
|
|
|
```sh [bun]
|
|
bun add @lucide/icons
|
|
```
|
|
|
|
:::
|
|
|
|
## Icon data format
|
|
|
|
Each icon is described by the following interface:
|
|
|
|
```typescript
|
|
export type LucideIconData = {
|
|
name: string;
|
|
node: LucideIconNode[];
|
|
} & (
|
|
| { size: number }
|
|
| { width: number; height: number; }
|
|
);
|
|
```
|
|
|
|
| name | type | description |
|
|
|------------------------------|--------------------|--------------------------------------------------------------------|
|
|
| `name` | `string` | The name of the icon. |
|
|
| `node` | `LucideIconNode[]` | SVG child nodes as `[tagName, attributes]` tuples. |
|
|
| `size` or `width` & `height` | `number` | The dimensions of the icon (`size` is shorthand for square icons). |
|
|
|
|
## How to use
|
|
|
|
Icons can be imported individually. Only the icons you import end up referenced by your application code — the rest will be eliminated by tree-shaking.
|
|
|
|
```ts
|
|
import { House } from '@lucide/icons';
|
|
// House is icon data (not a rendered component).
|
|
```
|
|
|
|
## Building icons
|
|
|
|
`@lucide/icons` ships small helpers that convert Lucide icon data into different render-ready outputs.
|
|
All builders accept the same `params` object (`LucideBuildParams`) to customize the generated SVG.
|
|
|
|
### Build parameters
|
|
|
|
The following parameters are supported (names reflect the current implementation):
|
|
|
|
| param | type | effect |
|
|
|-----------------------|--------------------------|------------------------------------------------------------------------------------|
|
|
| `color` | `string` | Sets `stroke` (defaults to `currentColor`). |
|
|
| `size` | `number` | Sets both `width` and `height` (defaults to 24). |
|
|
| `width` | `number` | Sets `width` only. |
|
|
| `height` | `number` | Sets `height` only. |
|
|
| `strokeWidth` | `number` | Sets `stroke-width` (defaults to 2). |
|
|
| `absoluteStrokeWidth` | `boolean` | Adds [`vector-effect="non-scaling-stroke"`](https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/vector-effect) to child elements. |
|
|
| `className` | `string` | Appended to the generated `class` attribute. |
|
|
| `attributes` | `Record<string, string>` | Add or override any generated SVG attributes (including `class`, `viewBox`, etc.). |
|
|
|
|
::: info
|
|
SVG attributes generated by the builders include a default Lucide setup (`xmlns`, `viewBox`, `fill="none"`, `stroke="currentColor"`, `stroke-width="2"`, `stroke-linecap="round"`, `stroke-linejoin="round"`), plus a class string of the form: `lucide lucide-{iconName}`.
|
|
:::
|
|
|
|
### `buildLucideIconNode`
|
|
|
|
Creates a root SVG node in an svgson-like format:
|
|
|
|
```ts
|
|
import { buildLucideIconNode } from '@lucide/icons/builders';
|
|
import { House } from '@lucide/icons';
|
|
|
|
const node = buildLucideIconNode(House, {
|
|
size: 32,
|
|
strokeWidth: 1.5,
|
|
className: 'my-icon',
|
|
});
|
|
|
|
// -> ['svg', attributes, children]
|
|
```
|
|
|
|
This is useful if you want to plug Lucide icons into your own renderer, templating system, or framework integration.
|
|
|
|
### `buildLucideSvg`
|
|
|
|
Creates an SVG string:
|
|
|
|
```ts
|
|
import { buildLucideSvg } from '@lucide/icons/builders';
|
|
import { House } from '@lucide/icons';
|
|
|
|
const svg = buildLucideSvg(House, { size: 24, color: '#111' });
|
|
```
|
|
|
|
### `buildLucideIconElement`
|
|
|
|
Creates an actual DOM element (SVG) within the provided document:
|
|
|
|
```ts
|
|
import { buildLucideIconElement } from '@lucide/icons/builders';
|
|
import { House } from '@lucide/icons';
|
|
|
|
const el = buildLucideIconElement(document, House, { size: 24 });
|
|
document.body.appendChild(el);
|
|
```
|
|
|
|
### `buildLucideDataUri`
|
|
|
|
Creates a base64-encoded SVG data URI from a Lucide icon object.
|
|
|
|
This helper works in both browsers and Node.js:
|
|
- In browsers it uses `btoa` (with proper UTF-8 handling)
|
|
- In Node.js it falls back to `Buffer`
|
|
|
|
```ts
|
|
import { buildLucideDataUri } from '@lucide/icons/builders';
|
|
import { House } from '@lucide/icons';
|
|
|
|
const uri = buildLucideDataUri(House, { size: 24 });
|
|
```
|
|
|
|
The returned value can be used directly in places such as:
|
|
- `<img src="...">`
|
|
- CSS `background-image`
|
|
- Canvas drawing
|
|
- Inline data URLs in HTML or SVG
|
|
|
|
::: tip Environment notes
|
|
- The SVG is encoded as UTF-8 before base64 conversion to ensure correct handling of non-ASCII characters.
|
|
- No runtime configuration is required — the function automatically selects the appropriate encoding strategy.
|
|
- If neither `btoa` nor `Buffer` is available, an error is thrown.
|
|
:::
|
|
|
|
## Dynamic imports
|
|
|
|
Dynamic imports are useful when you only know the icon name at runtime (for example, icon names stored in a database or a CMS). For purely static use cases, prefer direct imports for the best tree-shaking results.
|
|
|
|
::: tip
|
|
Validate `iconName` before indexing the map (and provide a fallback icon) to avoid runtime errors.
|
|
:::
|
|
## Dynamic imports
|
|
|
|
Dynamic imports are useful when the icon name is only known at runtime (for example, icon names stored in a CMS or database). For purely static usage, prefer direct imports for maximum tree-shaking.
|
|
|
|
```ts
|
|
import { lucideDynamicIconImports } from '@lucide/icons/dynamic';
|
|
|
|
const name = 'house';
|
|
const icon = await lucideDynamicIconImports[name]?.();
|
|
|
|
if (!icon) {
|
|
// handle unknown icon name (fallback)
|
|
}
|
|
```
|