Access thousands of icons as components on-demand universally across multiple build tools and frameworks
—
Automatic component resolution for unplugin-vue-components and unplugin-auto-import integration, enabling automatic component registration and importing.
Main resolver function for automatic component registration.
/**
* Resolver for unplugin-vue-components and unplugin-auto-import
* @param options - Configuration options for the resolver
* @returns Resolver function that maps component names to import paths
*/
function ComponentsResolver(options?: ComponentResolverOption): (name: string) => string | undefined;Configuration options for customizing component resolution behavior.
/**
* Configuration options for ComponentsResolver
*/
interface ComponentResolverOption {
/** Prefix for resolving components name. Set '' to disable prefix (default: 'i') */
prefix?: string | false;
/** Iconify collection names to enable for resolving (default: all collections) */
enabledCollections?: string | string[];
/** Icon collections aliases. The keys are aliases, values are collection names */
alias?: Record<string, string>;
/** Name for custom collections provided by loaders */
customCollections?: string | string[];
/** Extension for the resolved id. Set 'jsx' for JSX components (default: '') */
extension?: string;
/** @deprecated renamed to `prefix` */
componentPrefix?: string;
/** For collections strict matching. Set true to enable strict matching with '-' suffix */
strict?: boolean;
}import { defineConfig } from "vite";
import Vue from "@vitejs/plugin-vue";
import Icons from "unplugin-icons/vite";
import IconsResolver from "unplugin-icons/resolver";
import Components from "unplugin-vue-components/vite";
export default defineConfig({
plugins: [
Vue(),
Icons({
compiler: "vue3",
}),
Components({
resolvers: [IconsResolver()],
}),
],
});import IconsResolver from "unplugin-icons/resolver";
import Components from "unplugin-vue-components/vite";
export default {
plugins: [
Components({
resolvers: [
// Default prefix 'i' -> <i-carbon-accessibility />
IconsResolver(),
// Custom prefix 'icon' -> <icon-carbon-accessibility />
IconsResolver({ prefix: "icon" }),
// No prefix -> <carbon-accessibility />
IconsResolver({ prefix: false }),
],
}),
],
};import IconsResolver from "unplugin-icons/resolver";
export default {
plugins: [
Components({
resolvers: [
// Only enable specific collections
IconsResolver({
enabledCollections: ["carbon", "mdi", "heroicons"],
}),
// Single collection
IconsResolver({
enabledCollections: "carbon",
}),
],
}),
],
};import IconsResolver from "unplugin-icons/resolver";
export default {
plugins: [
Components({
resolvers: [
IconsResolver({
alias: {
// Use <i-park-abnormal /> instead of <i-icon-park-abnormal />
park: "icon-park",
// Use <i-hi-heart /> instead of <i-heroicons-heart />
hi: "heroicons",
// Use <i-md-star /> instead of <i-mdi-star />
md: "mdi",
},
}),
],
}),
],
};import IconsResolver from "unplugin-icons/resolver";
import Icons from "unplugin-icons/vite";
import { FileSystemIconLoader } from "unplugin-icons/loaders";
export default {
plugins: [
Icons({
customCollections: {
'brand': FileSystemIconLoader('./src/assets/brand-icons'),
'ui': FileSystemIconLoader('./src/assets/ui-icons'),
},
}),
Components({
resolvers: [
IconsResolver({
customCollections: ["brand", "ui"],
}),
],
}),
],
};import IconsResolver from "unplugin-icons/resolver";
import Icons from "unplugin-icons/vite";
export default {
plugins: [
Icons({
compiler: "jsx",
jsx: "react",
}),
// For unplugin-auto-import with React
AutoImport({
resolvers: [
IconsResolver({
prefix: "Icon",
extension: "jsx",
}),
],
}),
],
};import IconsResolver from "unplugin-icons/resolver";
export default {
plugins: [
Components({
resolvers: [
// Strict mode requires exact collection name matching with '-' suffix
IconsResolver({
strict: true,
}),
],
}),
],
};<!-- Collection: carbon, Icon: accessibility -->
<i-carbon-accessibility />
<!-- Collection: mdi, Icon: heart -->
<i-mdi-heart />
<!-- Collection: heroicons, Icon: star -->
<i-heroicons-star /><!-- Alternative syntax using colon separator -->
<i-carbon:accessibility />
<i-mdi:heart />
<i-heroicons:star />// Configuration
IconsResolver({
alias: {
park: "icon-park",
hi: "heroicons",
},
})<!-- Using aliases -->
<i-park-abnormal /> <!-- Instead of i-icon-park-abnormal -->
<i-hi-star /> <!-- Instead of i-heroicons-star -->// Configuration
IconsResolver({
customCollections: ["brand", "ui"],
})<!-- Using custom collections -->
<i-brand-logo />
<i-ui-button />import IconsResolver from "unplugin-icons/resolver";
import Components from "unplugin-vue-components/vite";
export default {
plugins: [
Components({
resolvers: [
// Different configurations for different use cases
IconsResolver({
prefix: "icon",
enabledCollections: ["carbon", "mdi"],
}),
IconsResolver({
prefix: "hero",
enabledCollections: ["heroicons"],
strict: true,
}),
],
}),
],
};// For better TypeScript support, ensure proper type imports
import type { ComponentResolverOption } from "unplugin-icons/resolver";
const iconResolverConfig: ComponentResolverOption = {
prefix: "i",
enabledCollections: ["carbon", "mdi"],
alias: { c: "carbon", m: "mdi" },
};
export default {
plugins: [
Components({
resolvers: [IconsResolver(iconResolverConfig)],
}),
],
};Install with Tessl CLI
npx tessl i tessl/npm-unplugin-icons