Files
lucide/docs/guide/angular/migration.md
Eric Fennis 484f2c9cd3 docs(version-1): Version 1 website (#4142)
* 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>
2026-03-20 17:04:28 +01:00

5.6 KiB
Raw Permalink Blame History

Migrating from lucide-angular@lucide/angular

What changed

@lucide/angular moves from a module + single component based API to a more modern Angular approach:

  • The library defines modern signal-based, standalone components, without zone.js based change detection.
  • Icons are consumed as standalone imports (one component per icon).
  • Dynamic icon registration is done via provideLucideIcons(), not using NgModule.
  • Static icons use per-icon components for better tree-shaking.
  • Dynamic icons still use a single dynamic component (svg[lucideIcon]).
  • Global defaults are configured via provideLucideConfig().
  • Brand icons have been removed, see the next section.

Step 1 Update dependencies

Remove lucide-angular, and add @lucide/angular, see:
Getting Started # Installation


Step 2 Replace LucideAngularModule.pick(...) with provideLucideIcons(...)

Notes:

  • Old imports like AirVentIcon / AlarmClock from lucide-angular should be replaced with the new per-icon exports LucideAirVent and LucideAlarmClock.
  • If you mostly used static icons, you may not need to provide them at all, please refer to Step 3.

Before

NgModule based

import { BrowserModule, NgModule } from '@angular/core';
import { LucideAngularModule, AirVent, AlarmClock } from 'lucide-angular';

@NgModule({
  imports: [
    BrowserModule,
    LucideAngularModule.pick({ AirVent, AlarmClock }),
  ],
})
export class AppModule {}

Standalone

import { ApplicationConfig } from '@angular/core';
import { LucideAngularModule, AirVent, AlarmClock } from 'lucide-angular';

export const appConfig: ApplicationConfig = {
  providers: [
    // ...
    importProvidersFrom(LucideAngularModule.pick({ AirVent, AlarmClock })),
  ]
};

After

import { ApplicationConfig } from '@angular/core';
import { provideLucideIcons, LucideAirVent, LucideAlarmClock } from '@lucide/angular';

export const appConfig: ApplicationConfig = {
  providers: [
    // ...
    provideLucideIcons(
      LucideAirVent,
      LucideAlarmClock,
    ),
  ]
};

Step 3 Replace <lucide-angular> / <lucide-icon> / <i-lucide> / <span-lucide>

The legacy package rendered everything through a single component. All of these selectors must be migrated to <svg> usage.

A. Static icons by name

If the icon is known at build time, just use a static import:

Before

<lucide-angular name="circle-check"></lucide-angular>

After

<svg lucideCircleCheck></svg>

B. Static icons with icon data binding

Before

import { CircleCheck } from 'lucide-angular';
<lucide-icon [img]="CircleCheck"></lucide-icon>

After

import { LucideCircleCheck } from '@lucide/angular';
<svg lucideCircleCheck></svg>

...and import LucideCircleCheck from @lucide/angular.


C. Dynamic icons

If the icon varies at runtime, use the dynamic component:

Before

<lucide-icon [name]="item.icon"></lucide-icon>

After

<svg [lucideIcon]="item.icon"></svg>

Step 4 Replace LucideIconConfig with provideLucideConfig()

Before

import { inject } from '@angular/core';
import { LucideIconConfig } from 'lucide-angular';

inject(LucideIconConfig).size = 12;

After

import { provideLucideConfig } from '@lucide/angular';

providers: [
  provideLucideConfig({ size: 12 }),
]

Where to place it

  • App-wide: AppModule.providers or bootstrapApplication(...providers)
  • Feature-level: feature module providers
  • Component-level (standalone): component providers

Troubleshooting

The icon is not being displayed

If using per-icon-components:

  1. Ensure that the icon component is being imported, if using per-icon-components
  2. Check that the icon name matches exactly (case-sensitive)

If using the dynamic component:

  1. Ensure the icon is provided via provideLucideIcons() if using string names
  2. Verify the icon is imported from @lucide/angular and not the legacy package

TypeScript errors?

Make sure you're importing from @lucide/angular and not lucide-angular.

Icons render with wrong defaults

Ensure provideLucideConfig() is used at the right level.

Removed Brand Icons

Brand icons are removed in v1. If you are using any of the following icons, you will need to replace them with a custom SVG or an alternative icon:

  • Chromium
  • Codepen
  • Codesandbox
  • Dribbble
  • Facebook
  • Figma
  • Framer
  • Github
  • Gitlab
  • Instagram
  • LinkedIn
  • Pocket
  • RailSymbol (based on the British Rail logo)
  • Slack

We recommend to use the official SVG icons provided by the respective brands, most of them can be found on their websites or in their brand guidelines. Alternatively, you can use the icons from Simple Icons, which provides a large collection of brand icons. Also with links to the official Brand Guidelines and SVG icons.

An Angular package for Simple Icons with standalone component support is also available.


TL;DR

  • LucideAngularModule ⇒ static: removed; dynamic: LucideIcon
  • LucideAngularModule.pick(...)provideLucideIcons(...)
  • <lucide-angular name="foo-bar"><svg lucideFooBar>
  • <lucide-icon [name]="expr"><svg [lucideIcon]="expr">
  • <lucide-icon [img]="expr"><svg [lucideIcon]="expr">
  • LucideIconConfigprovideLucideConfig(...)
  • Replace brand icon usages with simple-icons.