/
355
Sponsor

September 30, 2026 - Icon library presets

Both editors now ship Phosphor, Tabler, HugeIcons and Remix Icon icon sets as per-library registry items, so toolbar icons match your components.json iconLibrary without pulling in lucide-react.

Both editors previously hardcoded lucide-react icons. If your components.json sets iconLibrary to phosphor, tabler, hugeicons, or remixicon, you now get a matching icon set — and no lucide-react dependency forced onto every shadcn add.

Highlights

  • Per-library registry items — eight new items (editor-icons-{phosphor,tabler,hugeicons,remixicon} and the block-editor-icons-* equivalents) each install only that library's package and overwrite the editor's icons.tsx. Installing the editor first, then its icon set, switches the whole toolbar over:

    $ pnpm dlx shadcn@latest add "https://editorcn.vercel.app/r/editor.json"
    npx shadcn@latest add "https://editorcn.vercel.app/r/editor-icons-phosphor.json"
    iconLibraryInstall
    lucide (default)nothing — already included
    phosphornpx shadcn@latest add "https://editorcn.vercel.app/r/editor-icons-phosphor.json"
    tablernpx shadcn@latest add "https://editorcn.vercel.app/r/editor-icons-tabler.json"
    hugeiconsnpx shadcn@latest add "https://editorcn.vercel.app/r/editor-icons-hugeicons.json"
    remixiconnpx shadcn@latest add "https://editorcn.vercel.app/r/editor-icons-remixicon.json"
  • One library per install — each item declares only its own dependencies (@phosphor-icons/react, @tabler/icons-react, @hugeicons/react + @hugeicons/core-free-icons, @remixicon/react), so no project ends up with all five libraries installed.

  • Language icons split out — DEFAULT_LANGUAGE_ICONS moved to its own language-icons.tsx in both packages, so each icon set reuses the same code block language icons instead of redefining them. Still exported from each package's index.

  • Library metadata — EditorIconLibrary / BlockEditorIconLibrary types and the EDITOR_ICON_LIBRARY_PACKAGES / BLOCK_EDITOR_ICON_LIBRARY_PACKAGES maps, mirroring the libraries the shadcn CLI supports.

  • Backward compatible — lucide remains the default, the icons prop is unchanged, and languageIcons behavior is identical.

Not included

Extension toolbars (table, image placeholder) still import lucide directly, since they take no icons prop and aren't covered by the icon set items. Use npx shadcn@latest migrate icons --from lucide --to phosphor "src/components/editor/**" to convert them.

See the Customization docs for the per-library commands for both editors.