MCPcopy Index your code
hub / github.com/nuxt/icon

github.com/nuxt/icon @v2.3.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.3.1 ↗ · + Follow
92 symbols 263 edges 43 files 1 documented · 1% 11 cross-repo links
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

nuxt-icon

Nuxt Icon

[![npm version][npm-version-src]][npm-version-href] [![npm downloads][npm-downloads-src]][npm-downloads-href] [![License][license-src]][license-href] [![Nuxt][nuxt-src]][nuxt-href] Volta board

Add 200,000+ ready to use icons to your Nuxt application, based on Iconify.

Features ✨

  • Nuxt 3 ready
  • SSR friendly
  • Support 200,000 open-source vector icons via Iconify
  • Support both CSS mode / SVG mode
  • Custom SVG support (via Vue component, or via local SVG files)

[!NOTE] You are viewing the v1.0 version of this module, which is a complete rewrite for a better developer experience and performance. If you are migrating from v0.6, please check this PR for the full list of changes.

Setup ⛓️

Run the following command to add the module to your project:

npx nuxi module add icon

That's it, you can now use the <Icon /> in your components!

✨ If you are using VS Code, you can use the Iconify IntelliSense extension by @antfu

Manual Setup

You can install the module manually with:

npm i @nuxt/icon

Update your nuxt.config.ts

export default defineNuxtConfig({
  modules: [
    '@nuxt/icon'
  ]
})

If you have the legacy module nuxt-icon installed, you might want to remove it from the modules list.

Usage 👌

Props: - name (required): icon name or global component name - size: icon size (default: 1em) - mode: icon rendering mode (svg or css, default: css)

Attributes:

When using an icon from Iconify, a <span> or <svg> will be created based on the rendering mode, you can give all the attributes of the native element.

<Icon name="uil:github" style="color: black" />

TailwindCSS v4:

When using TailwindCSS v4 with the css mode, you should configure the cssLayer in Nuxt's app config:

// ~/app.config.ts
export default defineAppConfig({
  icon: {
    mode: 'css',
    cssLayer: 'base'
  }
})

Iconify Dataset

You can use any name from the https://icones.js.org collection:

<Icon name="uil:github" />

It supports the i- prefix (for example, i-uil-github).

It's highly recommended to install the icon data locally with

npm i -D @iconify-json/collection-name

For example, to use the uil:github icon, install its collection with @iconify-json/uil. This way the icons can be served locally or from your serverless functions, which is faster and more reliable on both SSR and client-side.

[!NOTE] You may also know you can install @iconify/json package to include all iconify icons. This is not recommended because it will increase your server bundle size and building performance. If you choose to do so, we'd recommend to explicitly specify the collection names you need:

```ts export default defineNuxtConfig({ modules: ['@nuxt/icon'], icon: { serverBundle: { collections: ['uil', 'mdi'] //


In the App Configuration File:

Alternatively, you can apply these customizations globally in the `app.config.ts` file.
```ts
// app.config.ts
export default defineAppConfig({
  icon: {
    customize: (content: string, name: string, prefix: string, provider: string) => {
      // ...
    },
  }
})

With this configuration, all icons throughout your application will have these customizations applied consistently.

Server Bundle

Since @nuxt/icon v1.0, we have introduced the server bundle concept to serve the icons from Nuxt server endpoints. This keeps the client bundle lean and able to load icons on-demand, while having all the dynamic features to use icons that might not be known at build time.

Server Bundle Mode: local

This mode will bundle the icon collections you have installed locally (like @iconify-json/*), into your server bundle as dynamic chunks. The collection data will be loaded on-demand, only when your client request icons from that collection.

Server Bundle Mode: remote

Introduced in @nuxt/icon v1.2, you can now use the remote server bundle to serve the icons from a remote CDN.

export default defineNuxtConfig({
  modules: [
    '@nuxt/icon'
  ],
  icon: {
    serverBundle: 'remote',
  },
})

Or you can specify the remote provider:

export default defineNuxtConfig({
  modules: [
    '@nuxt/icon'
  ],
  icon: {
    serverBundle: {
      remote: 'jsdelivr', // 'unpkg' or 'github-raw', or a custom function
    }
  },
})

Which will make server requests to https://cdn.jsdelivr.net/npm/@iconify-json/ph/icons.json to fetch the icons at runtime, instead of bundling them with your server.

Under the hood, instead of bundling () => import('@iconify-json/ph/icons.json') to your server bundle, it will now use something like () => fetch('https://cdn.jsdelivr.net/npm/@iconify-json/ph/icons.json').then(res => res.json()), where the collections are not inlined.

This would be useful when server bundle size is a concern, like in serverless or worker environments.

Server Bundle Mode: auto

This is the default option, where the module will pick between local and remote based your deployment environment. local will be preffered unless you are deploying to a serverless or worker environment, like Vercel Edge or Cloudflare Workers.

Externalize Icons JSON

By default, Nitro will bundle the icon collections you have installed locally (like @iconify-json/*), into your server bundle as dynamic chunks. When you have a large number of icons, this might make your bundling process slow and memory-intensive. You can change to externalize the icons JSON files by setting icon.serverBundle.externalizeIconsJson to true.

export default defineNuxtConfig({
  modules: [
    '@nuxt/icon'
  ],
  icon: {
    serverBundle: {
      externalizeIconsJson: true,
    }
  },
})

Note that this will require your production Node.js server to be able to import JSON files (Note that as in Node.js v22, JSON modules are still an experimental feature). In the final build, it will contain statements like () => import('@iconify-json/ph/icons.json', { with: { type: 'json' } }).

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

Shape

Function 60
Interface 14
Method 14
Class 4

Languages

TypeScript100%

Modules by API surface

src/context.ts10 symbols
src/core/bundle.ts9 symbols
src/vite.ts8 symbols
src/runtime/components/css.ts8 symbols
src/core/scan.ts7 symbols
src/core/collections.ts7 symbols
src/core/types.ts6 symbols
test/client-bundle.test.ts5 symbols
src/types.ts5 symbols
src/module.ts4 symbols
src/integrations/unocss.ts4 symbols
src/runtime/components/shared.ts3 symbols

For agents

$ claude mcp add icon \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page