{"record":{"id":"880865871c0774b6","repo":"vuetifyjs/vuetify","slug":"vuetify-could-not-find-injected-rtl-instance","errorCode":null,"errorMessage":"[Vuetify] Could not find injected rtl instance","messagePattern":"\\[Vuetify\\] Could not find injected rtl instance","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"critical","filePath":"packages/vuetify/src/composables/locale.ts","lineNumber":158,"sourceCode":"    rtl,\n    rtlClasses: toRef(() => `v-locale--is-${isRtl.value ? 'rtl' : 'ltr'}`),\n  }\n}\n\nexport function provideRtl (locale: LocaleInstance, rtl: RtlInstance['rtl'], props: RtlProps): RtlInstance {\n  const isRtl = computed(() => props.rtl ?? rtl.value[locale.current.value] ?? false)\n\n  return {\n    isRtl,\n    rtl,\n    rtlClasses: toRef(() => `v-locale--is-${isRtl.value ? 'rtl' : 'ltr'}`),\n  }\n}\n\nexport function useRtl () {\n  const locale = inject(LocaleSymbol)\n\n  if (!locale) throw new Error('[Vuetify] Could not find injected rtl instance')\n\n  return { isRtl: locale.isRtl, rtlClasses: locale.rtlClasses }\n}\n","sourceCodeStart":140,"sourceCodeEnd":162,"githubUrl":"https://github.com/vuetifyjs/vuetify/blob/8d153908dffb7592eb389ddbfbab955a0ccc977f/packages/vuetify/src/composables/locale.ts#L140-L162","documentation":"useRtl() injects LocaleSymbol (the same global locale adapter, which also carries isRtl and rtlClasses). Despite the message naming 'rtl instance', the missing provide is the locale one installed by createVuetify(). It throws when Vuetify is not installed on the app.","triggerScenarios":"Calling useRtl() (directly, or via a component that reads RTL such as <v-locale> or slider/window internals) when app.use(createVuetify()) was never called.","commonSituations":"Missing Vuetify plugin install; component rendered in an app instance without Vuetify; SSR or test mount without createVuetify().","solutions":["Install Vuetify with app.use(createVuetify()) before mounting.","Register Vuetify on each app instance that uses its components.","Add createVuetify() to test app setup."],"exampleFix":"// before\nconst app = createApp(App)\napp.mount('#app')\n\n// after\nconst app = createApp(App)\napp.use(createVuetify())\napp.mount('#app')","handlingStrategy":"validation","validationCode":"import { inject } from 'vue'\nimport { LocaleSymbol } from 'vuetify'\nconst locale = inject(LocaleSymbol, null)\nif (!locale) {\n  // Vuetify not installed: cannot read RTL; default to LTR or fail loudly.\n}","typeGuard":"import { inject } from 'vue'\nimport { LocaleSymbol } from 'vuetify'\nexport function hasRtl (): boolean {\n  return inject(LocaleSymbol, null) != null\n}","tryCatchPattern":null,"preventionTips":["Install createVuetify() at bootstrap.","Register Vuetify in every app instance.","Add the plugin to test mounts."],"tags":["injection","locale","rtl","config"],"backgroundTag":null,"analyzedSha":"8d153908dffb7592eb389ddbfbab955a0ccc977f","analyzedAt":"2026-08-12T21:54:20.596Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}