{"record":{"id":"857320234beafc4e","repo":"vuetifyjs/vuetify","slug":"could-not-find-vuetify-rules-injection","errorCode":null,"errorMessage":"Could not find Vuetify rules injection","messagePattern":"Could not find Vuetify rules injection","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/vuetify/src/labs/rules/rules.ts","lineNumber":129,"sourceCode":"  }\n\n  return {\n    resolve,\n    aliases,\n  }\n}\n\nexport const RulesSymbol: InjectionKey<RulesInstance> = Symbol.for('vuetify:rules')\n\nexport function useRules (): RuleAliases\nexport function useRules (fn: () => ValidationProps['rules']): Readonly<Ref<ValidationProps['rules']>> | Readonly<Ref<ValidationRule[]>>\n\nexport function useRules (fn?: () => ValidationProps['rules']) {\n  const rules = inject(RulesSymbol, null)\n\n  if (!fn) {\n    if (!rules) {\n      throw new Error('Could not find Vuetify rules injection')\n    }\n    return rules.aliases\n  }\n\n  return rules?.resolve(fn) ?? toRef(fn)\n}\n","sourceCodeStart":111,"sourceCodeEnd":136,"githubUrl":"https://github.com/vuetifyjs/vuetify/blob/8d153908dffb7592eb389ddbfbab955a0ccc977f/packages/vuetify/src/labs/rules/rules.ts#L111-L136","documentation":"useRules() without an argument reads rule aliases via inject(RulesSymbol). That symbol is provided only by the Vuetify rules plugin (labs/rules/plugin.ts), not by the core createVuetify() install. It throws when useRules() is called in alias-mode and the rules plugin was never installed.","triggerScenarios":"Calling useRules() (no argument) on an app that installed createVuetify() but not the rules plugin; using a component that consumes rule aliases without the plugin.","commonSituations":"Adopting the labs rules feature without registering its plugin; assuming rules ship with core Vuetify; test app that only adds createVuetify().","solutions":["Install the rules plugin alongside createVuetify (e.g. app.use(createVuetify({ ...plugins: [rules] })) per the labs setup).","If you do not need aliases, call useRules(fn) with a function so it falls back to toRef(fn) when the symbol is absent.","Register the plugin in the test app as well."],"exampleFix":"// before\napp.use(createVuetify())\n\n// after\napp.use(createVuetify({ plugins: [rules] }))","handlingStrategy":"validation","validationCode":"import { inject } from 'vue'\nimport { RulesSymbol } from 'vuetify/labs/rules'\nconst rules = inject(RulesSymbol, null)\nif (!rules) {\n  // rules plugin absent: do not use alias-mode useRules(); pass a fn instead.\n}","typeGuard":"import { inject } from 'vue'\nimport { RulesSymbol } from 'vuetify/labs/rules'\nexport function hasRules (): boolean {\n  return inject(RulesSymbol, null) != null\n}","tryCatchPattern":null,"preventionTips":["Install the labs rules plugin if you use rule aliases.","Call useRules(fn) with a function for graceful fallback when the plugin is absent.","Register the plugin in the test app."],"tags":["injection","rules","validation","labs"],"backgroundTag":null,"analyzedSha":"8d153908dffb7592eb389ddbfbab955a0ccc977f","analyzedAt":"2026-08-12T21:54:20.596Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}