IconSearch logoIconsearch
VUE 3 & NUXT 3 ARCHITECTURE
Last updated: September 2026

Vue 3 Icons: Composition API & Nuxt 3 Guide (2026)

Integrate high-performance SVG icon libraries into Vue 3 and Nuxt 3 applications. Master <script setup> syntax, Vite tree-shaking, and SSR-safe dynamic components.

Top Recommendation: lucide-vue-next for general Vue 3 / Nuxt 3 apps.

How do you use SVG icons in Vue 3 script setup and Nuxt 3 SSR?

In Vue 3 with <script setup>, icons are imported directly as functional components from packages like lucide-vue-next or @tabler/icons-vue. These components render static SVG elements that compile during Nuxt 3 server-side rendering with full hydration safety and zero client-side layout shifts. Reactive props such as :size, :color, and :stroke-width can be bound directly to component state, providing dynamic visual customization without DOM manipulation.

<!-- components/UserCard.vue -->
<script setup lang="ts">
import { ref } from 'vue'
import { User, Mail, CheckCircle2 } from 'lucide-vue-next'

const isVerified = ref(true)
</script>

<template>
  <div class="flex items-center gap-4 p-4 rounded-xl border border-zinc-800 bg-zinc-900">
    <User :size="24" class="text-zinc-400" />
    <div class="flex-1">
      <div class="flex items-center gap-1.5 font-medium">
        <span>Alex Morgan</span>
        <CheckCircle2 v-if="isVerified" :size="16" class="text-emerald-400" />
      </div>
      <p class="text-xs text-zinc-500">Engineering Lead</p>
    </div>
  </div>
</template>

How do dynamic icon components work in Vue 3 without bundling unused icons?

To render dynamic icons in Vue 3 without inflating bundle size, avoid global component registration and use the <component :is="resolvedIcon" /> syntax with a restricted lookup dictionary. By mapping only allowable icon names to static imports or shallow references, Vite eliminates unreferenced icons from production bundles. The comparison table below compares key Vue 3 and Nuxt 3 compatible libraries:

Comparison of Vue 3 & Nuxt 3 SVG Icon Libraries (2026)
LibraryTotal IconsLicenseTypeScriptNuxt 3 SSRPrimary NPM Package
Lucide Icons1,960ISCNative .d.ts✓ SSR Compatiblelucide-react
Heroicons324MITNative .d.ts✓ SSR Compatible@heroicons/react
Tabler Icons6,147MITNative .d.ts✓ SSR Compatible@tabler/icons-react
Phosphor Icons1,533MITNative .d.ts✓ SSR Compatible@phosphor-icons/react
Remix Icon3,229Apache 2.0Community✓ SSR Compatibleremixicon
Bootstrap Icons2,078MITCommunity✓ SSR Compatiblebootstrap-icons
Iconoir1,384MITNative .d.ts✓ SSR Compatibleiconoir-react
Octicons280MITNative .d.ts✓ SSR Compatible@primer/octicons-react

Verified Vue 3 Icon Libraries (13)

#1

Lucide Icons

⭐ 12,000◆ 1,960 iconsISC

A clean, consistent open-source icon library with 1960+ icons, forked from Feather Icons with active maintenance and TypeScript support.

npm install lucide-react
Full Guide & Catalog →✓ TypeScript✓ Tree-shakable
#2

Heroicons

⭐ 21,000◆ 324 iconsMIT

Beautiful hand-crafted SVG icons by the makers of Tailwind CSS. Available in outline and solid styles with 324 icons.

npm install @heroicons/react
Full Guide & Catalog →✓ TypeScript✓ Tree-shakable
#3

Tabler Icons

⭐ 18,000◆ 6,147 iconsMIT

Over 6100 free MIT-licensed high-quality SVG icons. One of the largest free icon libraries available for web projects.

npm install @tabler/icons-react
Full Guide & Catalog →✓ TypeScript✓ Tree-shakable
#4

Phosphor Icons

⭐ 8,000◆ 1,533 iconsMIT

Flexible icon family with 6 weights including thin, light, regular, bold, fill and duotone. Over 1500 icons available.

npm install @phosphor-icons/react
Full Guide & Catalog →✓ TypeScript✓ Tree-shakable
#5

Remix Icon

⭐ 6,000◆ 3,229 iconsApache 2.0

Open-source neutral-style system symbols for designers and developers. Over 3200 icons in line and fill styles.

npm install remixicon
#6

Bootstrap Icons

⭐ 7,000◆ 2,078 iconsMIT

Free, high quality, open source icon library with over 2000 icons. Designed by the Bootstrap team.

npm install bootstrap-icons
#7

Iconoir

⭐ 5,200◆ 1,384 iconsMIT

A high-quality, open-source icon library featuring over 1,300 meticulously crafted line icons. Highly consistent, premium aesthetic perfect for modern UIs.

npm install iconoir-react
Full Guide & Catalog →✓ TypeScript✓ Tree-shakable
#8

Octicons

⭐ 10,400◆ 280 iconsMIT

GitHub's official icon set designed specifically for developer dashboards, code repositories, git histories, and developer utilities.

npm install @primer/octicons-react
Full Guide & Catalog →✓ TypeScript✓ Tree-shakable
#9

Ant Design Icons

⭐ 8,700◆ 840 iconsMIT

The official icon set for Ant Design (AntD), featuring over 800 highly consistent icons in Outlined, Filled, and TwoTone themes for enterprise UIs.

npm install @ant-design/icons
Full Guide & Catalog →✓ TypeScript✓ Tree-shakable
#10

Devicons

⭐ 9,500◆ 800 iconsMIT

800+ developer and technology brand icons — logos for every programming language, framework, database, and tool. Available in original (color), plain, and line variants.

<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/devicons/devicon@latest/devicon.min.css" />
#11

Teenyicons

⭐ 2,100◆ 1,200 iconsMIT

Tiny, minimalist 1px-stroke vector icons designed to fit beautifully in the smallest spaces. Optimised for 15x15 grids.

npm install teenyicons
Full Guide & Catalog →✓ Tree-shakable
#12

Circum Icons

⭐ 800◆ 288 iconsMPL-2.0

Consistent, ultra-minimalist line icons featuring simple visual geometry and rounded outlines.

npm install circum-icons
Full Guide & Catalog →✓ Tree-shakable
#13

Elusive Icons

⭐ 1,200◆ 304 iconsOFL-1.1

A clean, customisable web font and SVG vector icon set optimized for Bootstrap layouts.

npm install elusive-icons
Full Guide & Catalog →✓ Tree-shakable
FREQUENTLY ASKED QUESTIONS

Vue 3 & Nuxt 3 Icon FAQ

How do I use Lucide icons in Vue 3 with script setup?

Install `lucide-vue-next` and import icons directly inside your `<script setup>` block: `import { Home, Settings } from "lucide-vue-next"`. You can render `<Home :size="20" class="text-emerald-500" />` with full TypeScript prop validation.

How do dynamic icon components work in Vue 3 without bundling unused icons?

In Vue 3, avoid dynamic global registrations. Instead, use dynamic component syntax `<component :is="resolvedIcon" />` with shallowRef or explicit lookup maps containing only the icons used in your application.

Are Vue 3 icon packages compatible with Nuxt 3 SSR?

Yes. Packages like `lucide-vue-next` and `@tabler/icons-vue` render static SVG markup that compiles on the server during Nuxt 3 SSR without hydration mismatch errors or client-side layout shifts.

How do I customize stroke width and default icon props globally in Vue 3?

You can create a custom Vue 3 plugin using `app.provide` or wrap the icon library in a custom `AppIcon.vue` base component that passes default `:stroke-width="1.75"` and `:size="20"` to child icon components.

Explore Svelte & Framework Guides

Discover Svelte 5, React, and TypeScript icon integrations.

Svelte Guide →React Guide →

Disclaimer: IconSearch is an independent open-source discovery platform and is not affiliated with, sponsored by, or endorsed by Vue.js, Nuxt, or any featured icon library maintainers.