vuetifyjs/vuetify · critical · Error

Missing Vuetify Icons provide!

Error message

Missing Vuetify Icons provide!

What it means

useIcon() injects IconSymbol, the icon-set adapter installed app-wide by createVuetify() (framework.ts:91). It throws when Vuetify is not installed on the app, leaving the symbol unresolved, so there is no icon registry/aliases to resolve against.

Source

Thrown at packages/vuetify/src/composables/icons.tsx:191

export type VLigatureIcon = InstanceType<typeof VLigatureIcon>

export const VClassIcon = defineComponent({
  name: 'VClassIcon',

  props: makeIconProps(),

  setup (props) {
    return () => {
      return <props.tag class={ props.icon }></props.tag>
    }
  },
})
export type VClassIcon = InstanceType<typeof VClassIcon>

export const useIcon = (props: MaybeRefOrGetter<IconValue | undefined>) => {
  const icons = inject(IconSymbol)

  if (!icons) throw new Error('Missing Vuetify Icons provide!')

  const iconData = computed<IconInstance>(() => {
    const iconAlias = toValue(props)

    if (!iconAlias) return { component: VComponentIcon }

    let icon: IconValue | undefined = iconAlias

    if (typeof icon === 'string') {
      icon = icon.trim()
      if (icon.startsWith('$')) {
        icon = icons.aliases?.[icon.slice(1)]
      }
    }

    if (!icon) consoleWarn(`Could not find aliased icon "${iconAlias}"`)

    if (Array.isArray(icon)) {

View on GitHub (pinned to 8d153908df)

Solutions

  1. Install Vuetify with app.use(createVuetify()) before mounting.
  2. Register Vuetify on every Vue app that renders its components.
  3. Add createVuetify() to the test app.

Example fix

// before
const app = createApp(App)
app.mount('#app')

// after
const app = createApp(App)
app.use(createVuetify())
app.mount('#app')
Defensive patterns

Strategy: validation

Validate before calling

import { inject } from 'vue'
import { IconSymbol } from 'vuetify'
const icons = inject(IconSymbol, null)
if (!icons) {
  // Vuetify not installed: do not resolve icons via useIcon; report config error.
}

Type guard

import { inject } from 'vue'
import { IconSymbol } from 'vuetify'
export function hasIcons (): boolean {
  return inject(IconSymbol, null) != null
}

Prevention

When it happens

Trigger: Calling useIcon() (or rendering a component that resolves an icon) on an app that never ran app.use(createVuetify()); rendering in a secondary app without Vuetify.

Common situations: Missing app.use(vuetify); component rendered in an app instance without Vuetify; test mount without createVuetify(); SSR bootstrap that omits the plugin.

Related errors


AI-assisted analysis of vuetifyjs/vuetify@8d153908df (2026-08-12). Data as JSON: /api/errors/70db213e28e81714. Report an issue: GitHub.