Strapi Lucide Icons
Strapi Lucide Icons adds a custom field to Strapi so editors can pick any Lucide icon from a searchable list. The saved value is the icon name, so you can render it anywhere on the client side with lucide-react, lucide-svelte, lucide-vue, lucide-solid, or any other Lucide package.
Strapi Lucide Icons
Strapi Lucide Icons adds a custom field to Strapi so editors can pick any Lucide icon from a searchable list. The saved value is the icon name, so you can render it anywhere on the client side with lucide-react, lucide-svelte, lucide-vue, lucide-solid, or any other Lucide package.
✨ Features
- Custom field:
icon(string) - Full Lucide icon catalog with categories
- Searchable dialog with icon preview
- Light/Dark theme support
- Responsive layout (mobile → desktop)
- Built-in i18n with extensible translations
✅ Requirements
- Strapi v5
🚀 Usage
- Install the plugin in your Strapi app.
- Enable the plugin.
- In Content-Type Builder, add the Lucide Icons custom field.
- Pick an icon and save.
The saved value is the icon name (e.g. alarm-clock, chart-no-axes-gantt).
🎨 Theme Support
Light theme
Dark theme
📱 Responsive
The dialog layout adapts to smaller screens, stacking the category list and icon grid for a better mobile experience.
🌍 i18n (Translations)
This plugin ships with translations and can be extended from the host app.
Translation keys
strapi-lucide-icons.input.label
strapi-lucide-icons.input.description
strapi-lucide-icons.input.search
strapi-lucide-icons.input.search_placeholder
strapi-lucide-icons.input.empty
strapi-lucide-icons.input.selected
strapi-lucide-icons.input.none
strapi-lucide-icons.input.clear
strapi-lucide-icons.input.browse
strapi-lucide-icons.input.close
strapi-lucide-icons.input.showing
strapi-lucide-icons.form.attribute.item.requiredField
strapi-lucide-icons.form.attribute.item.requiredField.description
strapi-lucide-icons.form.attribute.item.privateField
strapi-lucide-icons.form.attribute.item.privateField.descriptionExtending translations in your Strapi app
Create or update the admin translations file and override any key:
./src/admin/translations/en.json
{
"strapi-lucide-icons.input.browse": "Select",
"strapi-lucide-icons.input.none": "No icon"
}Restart the admin build to apply the new strings.
🧩 Client-side rendering (example)
Because the field stores only the icon name, you can render it on the client with any Lucide package.
React
import dynamicIconImports from 'lucide-react/dynamicIconImports';
export async function renderIcon(name: string) {
const importer = dynamicIconImports[name];
if (!importer) return null;
const { default: Icon } = await importer();
return <Icon size={18} />;
}Svelte
import dynamicIconImports from 'lucide-svelte/dynamicIconImports';
const loadIcon = async (name: string) => {
const importer = dynamicIconImports[name];
if (!importer) return null;
const { default: Icon } = await importer();
return Icon;
};📦 Installation
npm
npm i strapi-lucide-iconsyarn
yarn add strapi-lucide-iconsLicense
- This project is licensed under the MIT License. See
LICENSE. - It uses
lucide-react(ISC). SeeTHIRD_PARTY_LICENSES.md.
Install now
npm install strapi-lucide-icons
Create your own plugin
Check out the available plugin resources that will help you to develop your plugin or provider and get it listed on the marketplace.