2021-10-01 09:19:36 +02:00
# Lucide Angular
2025-10-24 05:18:51 -07:00
Angular components and services for Lucide icons that integrate with Angular's dependency injection and component system. Provides both traditional module-based and modern standalone component approaches for maximum flexibility in Angular applications.
**What you can accomplish:**
- Use icons as Angular components with full dependency injection support
- Configure icons globally through Angular services and providers
- Choose from multiple component selectors (lucide-angular, lucide-icon, i-lucide, span-lucide)
- Integrate with Angular's reactive forms and data binding
- Build scalable applications with tree-shaken icon bundles and lazy loading support
2021-10-01 09:19:36 +02:00
## Installation
2023-06-12 22:10:15 +02:00
::: code-group
```sh [pnpm]
2025-10-26 17:01:12 +01:00
pnpm add lucide-angular
2022-10-27 08:19:45 +02:00
```
2021-10-01 09:19:36 +02:00
2023-06-12 22:10:15 +02:00
```sh [yarn]
yarn add lucide-angular
```
2021-10-01 09:19:36 +02:00
2023-06-12 22:10:15 +02:00
```sh [npm]
2021-10-01 09:19:36 +02:00
npm install lucide-angular
```
2024-11-29 09:11:30 +01:00
```sh [bun]
bun add lucide-angular
```
2023-06-12 22:10:15 +02:00
:::
2021-10-01 09:19:36 +02:00
## How to use
2023-04-20 16:08:34 +02:00
### Step 1: Import `LucideAngularModule`
2021-10-01 09:19:36 +02:00
2023-04-20 16:08:34 +02:00
In any Angular module you wish to use Lucide icons in, you have to import `LucideAngularModule` , and pick any icons you wish to use:
2021-10-01 09:19:36 +02:00
2022-10-27 08:19:45 +02:00
```js
2025-05-03 09:28:29 +02:00
import { LucideAngularModule, File, House, Menu, UserCheck } from 'lucide-angular';
2021-10-01 09:19:36 +02:00
2023-04-20 16:08:34 +02:00
@NgModule ({
imports: [
2025-05-03 09:28:29 +02:00
LucideAngularModule.pick({File, House, Menu, UserCheck})
2023-04-20 16:08:34 +02:00
]
2021-10-01 09:19:36 +02:00
})
2023-04-20 16:08:34 +02:00
export class AppModule { }
2021-10-01 09:19:36 +02:00
```
2024-08-21 14:23:33 +07:00
or using standalone version:
```js
2024-10-30 09:32:47 +01:00
import { Component } from '@angular/core ';
2024-08-21 14:23:33 +07:00
import { LucideAngularModule, FileIcon } from 'lucide-angular';
2024-10-30 09:32:47 +01:00
@Component ({
standalone: true,
selector: 'app-root',
templateUrl: './app.component.html',
styleUrl: './app.component.scss',
imports: [LucideAngularModule]
2024-08-21 14:23:33 +07:00
})
2024-10-30 09:32:47 +01:00
export class AppComponent {
2024-08-21 14:23:33 +07:00
readonly FileIcon = FileIcon;
}
```
2023-04-20 16:08:34 +02:00
### Step 2: Use the icons in templates
2021-10-01 09:19:36 +02:00
2023-04-20 16:08:34 +02:00
Within your templates you may now use one of the following component tags to insert an icon:
2021-10-01 09:19:36 +02:00
2023-04-20 16:08:34 +02:00
```html
<lucide-angular name="file" class="my-icon"></lucide-angular>
2025-05-03 09:28:29 +02:00
<lucide-icon name="house" class="my-icon"></lucide-icon>
2023-04-20 16:08:34 +02:00
<i-lucide name="menu" class="my-icon"></i-lucide>
<span-lucide name="user-check" class="my-icon"></span-lucide>
```
2024-08-21 14:23:33 +07:00
for standalone
```html
<lucide-angular [img]="FileIcon" class="my-icon"></lucide-angular>
<lucide-icon [img]="FileIcon" class="my-icon"></lucide-icon>
<i-lucide [img]="FileIcon" class="my-icon"></i-lucide>
<span-lucide [img]="FileIcon" class="my-icon"></span-lucide>
```
2021-10-01 09:19:36 +02:00
2023-04-20 16:08:34 +02:00
### Props
2021-10-01 09:19:36 +02:00
2023-04-20 16:08:34 +02:00
You can pass additional props to adjust the icon appearance.
| name | type | default |
| --------------------- | --------- | ------------ |
| `size` | * number * | 24 |
| `color` | * string * | currentColor |
| `strokeWidth` | * number * | 2 |
| `absoluteStrokeWidth` | * boolean * | false |
2021-10-01 09:19:36 +02:00
2022-10-27 08:19:45 +02:00
```html
2025-05-03 09:28:29 +02:00
<i-lucide name="house" [size]="48" color="red" [strokeWidth]="1"></i-lucide>
2021-10-01 09:19:36 +02:00
```
2023-04-20 16:08:34 +02:00
### Global configuration
2021-10-01 09:19:36 +02:00
2023-04-20 16:08:34 +02:00
You can inject the `LucideIconConfig` service in your root component to globally configure the default property values as defined above.
2021-10-01 09:19:36 +02:00
2023-04-20 16:08:34 +02:00
### Styling using a custom CSS class
2021-10-01 09:19:36 +02:00
2023-04-20 16:08:34 +02:00
Any extra HTML attribute is ignored, but the `class` attribute
is passed onto the internal SVG image element and it can be used to style it:
2021-10-01 09:19:36 +02:00
2023-04-20 16:08:34 +02:00
```css
svg.my-icon {
width: 12px;
height: 12px;
stroke-width: 3;
}
2021-10-01 09:19:36 +02:00
```
2023-04-20 16:08:34 +02:00
## Injecting multiple icon providers
You may provide additional icons using the `LUCIDE_ICONS` injection token,
which accepts multiple providers of the interface `LucideIconsProviderInterface`
with the utility class `LucideIconsProvider` available for easier usage:
2021-10-01 09:19:36 +02:00
2022-10-27 08:19:45 +02:00
```js
2023-04-20 16:08:34 +02:00
import { LUCIDE_ICONS, LucideIconProvider } from 'lucide-angular';
import { MyIcon } from './icons/my-icon';
const myIcons = {MyIcon};
@NgModule ({
providers: [
{provide: LUCIDE_ICONS, multi: true, useValue: new LucideIconProvider(myIcons)},
]
2021-10-01 09:19:36 +02:00
})
2023-04-20 16:08:34 +02:00
export class AppModule { }
2021-10-01 09:19:36 +02:00
```
2023-04-20 16:08:34 +02:00
To add custom icons, you will first need to convert them to an [svgson format ](https://github.com/elrumordelaluz/svgson ).
2021-10-01 09:19:36 +02:00
2023-04-20 16:08:34 +02:00
## Loading all icons
2021-10-01 09:19:36 +02:00
2023-06-12 22:10:15 +02:00
::: danger
You may also opt to import all icons if necessary using the following format but be aware that this will significantly increase your application build size.
:::
2021-10-01 09:19:36 +02:00
2022-10-27 08:19:45 +02:00
```js
2022-11-13 21:59:29 +01:00
import { icons } from 'lucide-angular';
2021-10-01 09:19:36 +02:00
...
2023-04-20 16:08:34 +02:00
LucideAngularModule.pick(icons)
```
2024-04-26 17:59:04 +02:00
## With Lucide lab or custom icons
[Lucide lab ](https://github.com/lucide-icons/lucide-lab ) is a collection of icons that are not part of the Lucide main library.
They can be used in the same way as the official icons.
```js
import { LucideAngularModule } from 'lucide-angular';
2025-05-03 09:28:29 +02:00
import { coconut } from '@lucide/lab ';
2024-04-26 17:59:04 +02:00
@NgModule ({
imports: [
2025-05-03 09:28:29 +02:00
LucideAngularModule.pick({ coconut })
2024-04-26 17:59:04 +02:00
]
})
export class AppModule { }
```