agents-inc/skills/src/skills/web-ui-vuetify/SKILL.md
web-ui-vuetify
Material Design component library for Vue 3
- Source repository stars
- 23
- Declared platforms
- 0
- Static risk flags
- 0
- Last source update
- 2026-08-09
- Source checked
- 2026-08-28
Decision brief
What it does: where it fits
Quick Guide: Vuetify provides 80+ pre-styled Vue 3 components implementing Material Design. Configure with createVuetify() -- set theme for colors, defaults for global component props, and blueprint: md3 for MD3 compliance. Use v-defaults-provider for scoped prop overrides. Cust…
Not for
- Tasks that require unconfirmed production actions or broad system permissions.
- Environments where the pinned source and install steps cannot be inspected.
Compatibility matrix
Platform support, with evidence labels
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
Inspect first. Install second.
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/agents-inc/skills --skill "src/skills/web-ui-vuetify"Inspect the Agent Skill "web-ui-vuetify" from https://github.com/agents-inc/skills/blob/81d43a51211aca12c85dcc16085fa99014ec548e/src/skills/web-ui-vuetify/SKILL.md at commit 81d43a51211aca12c85dcc16085fa99014ec548e. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
What the source asks the agent to do
- 01
Pattern 1: Plugin Setup
Every Vuetify app requires createVuetify() and app.use(). The plugin provides the theme, defaults, icons, and locale to all components.
Every Vuetify app requires createVuetify() and app.use(). The plugin provides the theme, defaults, icons, and locale to all components.Why good: single configuration point, all components inherit theme and default props, tree-shakeableFor blueprints, SASS variables, TypeScript augmentation, and SSR setup, see examples/core.md. - 02
CRITICAL: Before Using This Skill
All code must follow project conventions in CLAUDE.md (kebab-case, named exports, import ordering, import type, named constants)
Building Vue 3 applications with pre-styled Material Design componentsRapid development of admin dashboards, data tables, and CRUD interfacesProjects that benefit from a comprehensive defaults/theming system - 03
Philosophy
Vuetify is an opinionated, batteries-included component library. Unlike headless libraries, Vuetify ships styled components with a complete design system. Its power comes from three layers of customization:
Theme layer -- colors, dark mode, typography via createVuetify({ theme }). All components inherit automatically.Defaults layer -- global or scoped prop values via defaults config or v-defaults-provider. Change every v-btn to variant="outlined" in one line.SASS layer -- compile-time variable overrides via @use 'vuetify/settings'. Changes border-radius, heights, font families at the CSS level. - 04
Core Patterns
Every Vuetify app requires createVuetify() and app.use(). The plugin provides the theme, defaults, icons, and locale to all components.
Every Vuetify app requires createVuetify() and app.use(). The plugin provides the theme, defaults, icons, and locale to all components.Why good: single configuration point, all components inherit theme and default props, tree-shakeableFor blueprints, SASS variables, TypeScript augmentation, and SSR setup, see examples/core.md. - 05
Pattern 2: Theming and Dark Mode
Define multiple themes in createVuetify and toggle with useTheme. Vuetify generates CSS variables for each theme.
Define multiple themes in createVuetify and toggle with useTheme. Vuetify generates CSS variables for each theme.Why good: reactive theme switching, CSS variables prevent flash of wrong theme, custom themes can extend built-in onesFor custom theme creation and color variations, see examples/core.md.
Permission review
Static risk signals and limitations
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
Why each signal appears
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 93/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 23 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Provenance and original SKILL.md
- Repository
- agents-inc/skills
- Skill path
- src/skills/web-ui-vuetify/SKILL.md
- Commit
- 81d43a51211aca12c85dcc16085fa99014ec548e
- License
- MIT
- Collected
- 2026-08-28
- Default branch
- main
View the original SKILL.md
Vuetify Patterns
Quick Guide: Vuetify provides 80+ pre-styled Vue 3 components implementing Material Design. Configure with
createVuetify()-- setthemefor colors,defaultsfor global component props, andblueprint: md3for MD3 compliance. Usev-defaults-providerfor scoped prop overrides. Customize at the SASS level with@use 'vuetify/settings'for compile-time changes. Current: v3.8.x --useRulescomposable for form validation, date picker improvements, performance optimizations. Vuetify is template-driven -- prefer declarative props/slots over imperative JS.
<critical_requirements>
CRITICAL: Before Using This Skill
All code must follow project conventions in CLAUDE.md (kebab-case, named exports, import ordering,
import type, named constants)
(You MUST install and register Vuetify as a Vue plugin via app.use(vuetify) -- components will not render without the plugin)
(You MUST use the defaults system in createVuetify() or v-defaults-provider for consistent component props -- never repeat the same prop on every instance)
(You MUST use named slots (v-slot:item.<key>, v-slot:prepend) for component customization -- not wrapper divs with manual styling)
(You MUST define v-data-table headers and column arrays outside the component -- inline arrays cause re-renders on every parent update)
</critical_requirements>
Auto-detection: Vuetify, vuetify, createVuetify, v-btn, v-card, v-data-table, v-text-field, v-select, v-autocomplete, v-dialog, v-navigation-drawer, v-app-bar, v-toolbar, v-chip, v-snackbar, v-form, v-defaults-provider, v-theme-provider, useTheme, useDisplay, useDate, useRules, mdi, @mdi/font, vuetify/blueprints, vuetify/settings, vuetify/styles
When to use:
- Building Vue 3 applications with pre-styled Material Design components
- Rapid development of admin dashboards, data tables, and CRUD interfaces
- Projects that benefit from a comprehensive defaults/theming system
- Applications requiring built-in accessibility, RTL, and i18n support
When NOT to use:
- Non-Vue projects (Vuetify is Vue-only)
- Projects requiring a non-Material Design aesthetic without heavy customization
- Minimal bundle size is critical and only a few components are needed (consider a headless library)
- Projects using Vue 2 (Vuetify 3 requires Vue 3)
Key patterns covered:
- Plugin setup with
createVuetify(), themes, and blueprints - Global defaults and scoped defaults with
v-defaults-provider - SASS variable customization at compile time
- Slot-based component customization
- Data tables with sorting, filtering, pagination, and custom column rendering
- Form validation with rules arrays and
useRulescomposable - Theme toggling and
useTheme/useDisplaycomposables
Detailed Resources:
- examples/core.md -- Plugin setup, theming, defaults, SASS variables, blueprints, TypeScript, composables
- examples/data-tables.md -- v-data-table headers, slots, sorting, filtering, pagination, server-side
- examples/forms.md -- v-form, validation rules, useRules, input components, custom validation
- examples/layout.md -- v-app, v-app-bar, v-navigation-drawer, v-container/v-row/v-col grid, responsive patterns
- reference.md -- Decision frameworks, component quick reference, anti-patterns
Philosophy
Vuetify is an opinionated, batteries-included component library. Unlike headless libraries, Vuetify ships styled components with a complete design system. Its power comes from three layers of customization:
- Theme layer -- colors, dark mode, typography via
createVuetify({ theme }). All components inherit automatically. - Defaults layer -- global or scoped prop values via
defaultsconfig orv-defaults-provider. Change everyv-btntovariant="outlined"in one line. - SASS layer -- compile-time variable overrides via
@use 'vuetify/settings'. Changes border-radius, heights, font families at the CSS level.
Vuetify 3.x key features:
- Full Vue 3 Composition API support
- Tree-shakeable components via
vuetify-loader/vite-plugin-vuetify - Material Design 3 blueprint (
md3) for MD3 compliance - Built-in composables:
useTheme,useDisplay,useDate,useRules v-defaults-providerfor scoped prop cascading (unique to Vuetify)- Extensive slot system for deep component customization without CSS hacks
- Built-in i18n, RTL, and accessibility
Core Patterns
Pattern 1: Plugin Setup
Every Vuetify app requires createVuetify() and app.use(). The plugin provides the theme, defaults, icons, and locale to all components.
import { createApp } from "vue";
import { createVuetify } from "vuetify";
const vuetify = createVuetify({
theme: {
defaultTheme: "light",
themes: {
light: {
colors: {
primary: "#1867C0",
secondary: "#5CBBF6",
},
},
},
},
defaults: {
VBtn: { variant: "flat", rounded: "lg" },
VTextField: { variant: "outlined", density: "comfortable" },
VCard: { elevation: 2, rounded: "lg" },
},
});
const app = createApp(App);
app.use(vuetify);
app.mount("#app");
Why good: single configuration point, all components inherit theme and default props, tree-shakeable
For blueprints, SASS variables, TypeScript augmentation, and SSR setup, see examples/core.md.
Pattern 2: Theming and Dark Mode
Define multiple themes in createVuetify and toggle with useTheme. Vuetify generates CSS variables for each theme.
<script setup>
import { useTheme } from "vuetify";
const theme = useTheme();
function toggleTheme() {
theme.global.name.value = theme.global.current.value.dark ? "light" : "dark";
}
</script>
<template>
<v-btn @click="toggleTheme" icon="mdi-brightness-6" />
</template>
Why good: reactive theme switching, CSS variables prevent flash of wrong theme, custom themes can extend built-in ones
For custom theme creation and color variations, see examples/core.md.
Pattern 3: Global Defaults and Scoped Defaults
The defaults system is Vuetify's most powerful consistency tool. Set props globally in createVuetify() or scope them with v-defaults-provider.
<template>
<!-- All buttons inside this provider get these defaults -->
<v-defaults-provider
:defaults="{
VBtn: { color: 'secondary', variant: 'tonal' },
VCard: { elevation: 0, border: true },
}"
>
<v-card>
<v-card-text>
<!-- This button is tonal + secondary without explicit props -->
<v-btn>Scoped Default</v-btn>
</v-card-text>
</v-card>
</v-defaults-provider>
</template>
Why good: eliminates prop repetition, section-specific styling without CSS, nests and cascades like CSS scoping
Pattern 4: Slot-Based Component Customization
Vuetify components expose named slots for every internal element. Use v-slot to replace or augment internal rendering.
<template>
<v-text-field label="Amount" type="number">
<template v-slot:prepend-inner>
<v-icon>mdi-currency-usd</v-icon>
</template>
<template v-slot:append-inner>
<v-chip size="x-small" color="success">.00</v-chip>
</template>
</v-text-field>
</template>
Why good: customizes internal elements without CSS overrides, type-safe slot props, preserves component behavior
For data table column slots, see examples/data-tables.md.
Pattern 5: Data Table Overview
v-data-table handles sorting, pagination, filtering, and selection. Define headers outside the template, use v-slot:item.<key> for custom column rendering.
<script setup>
const headers = [
{ title: "Name", key: "name" },
{ title: "Status", key: "status" },
{ title: "Actions", key: "actions", sortable: false },
];
</script>
<template>
<v-data-table :items="items" :headers="headers">
<template v-slot:item.status="{ item }">
<v-chip
:color="item.status === 'active' ? 'success' : 'error'"
size="small"
>
{{ item.status }}
</v-chip>
</template>
<template v-slot:item.actions="{ item }">
<v-icon size="small" @click="edit(item)">mdi-pencil</v-icon>
</template>
</v-data-table>
</template>
Why good: headers array is stable (no re-render), slot customization per column, built-in sort/filter/paginate
For server-side data tables, expandable rows, and search, see examples/data-tables.md.
Pattern 6: Form Validation
Vuetify forms use :rules arrays on inputs. Each rule is a function returning true or an error string. The useRules composable (v3.8+) provides common validators.
<script setup>
import { ref } from "vue";
import { useRules } from "vuetify/labs/rules";
const form = ref(null);
const email = ref("");
const rules = useRules();
async function submit(event: SubmitEvent) {
const { valid } = await form.value.validate();
if (!valid) return;
// proceed with submission
}
</script>
<template>
<v-form ref="form" validate-on="submit" @submit.prevent="submit">
<v-text-field
v-model="email"
label="Email"
:rules="[rules.required(), rules.email()]"
/>
<v-btn type="submit" color="primary">Submit</v-btn>
</v-form>
</template>
Why good: declarative validation, useRules eliminates boilerplate rule functions, validate-on controls timing
For custom rules, multi-field validation, and input types, see examples/forms.md.
Pattern 7: Responsive Design with useDisplay
The useDisplay composable provides reactive breakpoint state. Use it for logic-driven responsive behavior (template responsiveness uses Vuetify's grid props).
<script setup>
import { useDisplay } from "vuetify";
const { mobile, mdAndUp, name } = useDisplay();
</script>
<template>
<v-navigation-drawer v-if="mdAndUp" permanent />
<v-navigation-drawer v-else v-model="drawer" temporary />
<v-app-bar :density="mobile ? 'compact' : 'default'" />
</template>
Why good: reactive breakpoint booleans, avoids CSS media query duplication in script, matches Vuetify's breakpoint system
Performance
Tree-Shaking
Use vite-plugin-vuetify (Vite) or webpack-plugin-vuetify (Webpack) for automatic tree-shaking. Only imported components are bundled.
// vite.config.ts
import vuetify from "vite-plugin-vuetify";
export default {
plugins: [vuetify({ autoImport: true })],
};
Without the plugin, import vuetify/components and vuetify/directives to include everything (larger bundle).
Stable References
// GOOD: headers defined outside component
const headers: DataTableHeader[] = [{ title: "Name", key: "name" }];
// BAD: inline array recreated every render
// <v-data-table :headers="[{ title: 'Name', key: 'name' }]" />
SASS Variable Customization vs Runtime Theming
Need to change at runtime? --> Use theme colors in createVuetify()
Need compile-time CSS changes? --> Use SASS variables (@use 'vuetify/settings')
Need per-section prop defaults? --> Use v-defaults-provider (zero CSS cost)
<red_flags>
RED FLAGS
High Priority Issues:
- Missing
app.use(vuetify)-- components render as empty custom elements without the plugin - Inline header/column arrays on
v-data-table-- causes full table re-render on every parent update - Using
this.$vuetifyin Composition API -- useuseTheme(),useDisplay(),useDate()composables instead - Importing
vuetify/componentsandvuetify/directiveswhenvite-plugin-vuetifyis available -- negates tree-shaking
Medium Priority Issues:
- Setting
variant,density,roundedon every component instance -- usedefaultsincreateVuetify()instead - Wrapping Vuetify components in extra divs for styling -- use the component's own props/slots/classes
- Hardcoding colors (
#1867C0) in templates instead of using theme colors (color="primary") - Using
v-ifto toggle dialogs/drawers instead ofv-model-- loses transition animations and internal state
Common Mistakes:
- Forgetting
import 'vuetify/styles'when not using the build plugin -- no styles load at all - Using CSS
!importantto override Vuetify styles -- use SASS variables orclassprop with higher specificity - Not setting
validate-ononv-form-- defaults toinputwhich validates on every keystroke (use"submit"or"blur lazy"for better UX) - Placing
v-colwithout a parentv-rowinsidev-container-- grid system requires the full nesting
Gotchas & Edge Cases:
densityaccepts"default","comfortable","compact"-- it is NOT a numeric valuev-data-table-serveris a separate component for server-side pagination -- do not usev-data-tablewith manual paginationv-defaults-providercascades -- nested providers merge with parent, later values winuseDisplaybreakpoints differ from CSS breakpoints in default config (xs: 0, sm: 600, md: 960, lg: 1280, xl: 1920, xxl: 2560)- Theme
variationsgenerate-lighten-Nand-darken-Ncolor variants automatically -- do not manually define them v-modelonv-dialogcontrols visibility -- do not usevalueprop (Vue 3v-modelreplaces.sync)- SASS variables require the Vite/Webpack plugin with
styles.configFilepointing to your settings file
</red_flags>
<critical_reminders>
CRITICAL REMINDERS
All code must follow project conventions in CLAUDE.md (kebab-case, named exports, import ordering,
import type, named constants)
(You MUST install and register Vuetify as a Vue plugin via app.use(vuetify) -- components will not render without the plugin)
(You MUST use the defaults system in createVuetify() or v-defaults-provider for consistent component props -- never repeat the same prop on every instance)
(You MUST use named slots (v-slot:item.<key>, v-slot:prepend) for component customization -- not wrapper divs with manual styling)
(You MUST define v-data-table headers and column arrays outside the component -- inline arrays cause re-renders on every parent update)
Failure to follow these rules will produce unstyled components, unnecessary re-renders, and inconsistent UI.
</critical_reminders>
Frequently asked questions
What to verify before installation and use
What does the web-ui-vuetify source document cover?
Quick Guide: Vuetify provides 80+ pre-styled Vue 3 components implementing Material Design. Configure with createVuetify() -- set theme for colors, defaults for global component props, and blueprint: md3 for MD3 compliance. Use v-defaults-provider for scoped prop overrides. Cust…
How do I install web-ui-vuetify?
The source record exposes this install command: npx skills add https://github.com/agents-inc/skills --skill "src/skills/web-ui-vuetify". Inspect the command and pinned source before running it.
Alternatives
Compare before choosing
coreyhaines31/marketingskills
ab-testing
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program
coreyhaines31/marketingskills
churn-prevention
When the user wants to reduce churn, build cancellation flows, set up save offers, recover failed payments, or implement retention strategies. Also use when the user mentions 'churn,' 'cancel flow,' 'offboarding,' 'save offer,' 'dunning,' 'failed payment recovery,' 'win-back,' 'retention,' 'exit survey,' 'pause subscription,' 'involuntary churn,' 'people keep canceling,' 'churn rate is too high,' 'how do I keep users,' or 'customers are leaving.' Use this whenever someone is losing subscribers o
prowler-cloud/prowler
postgresql-indexing
PostgreSQL indexing best practices for Prowler: index design, partial indexes, partitioned table indexing, EXPLAIN ANALYZE validation, concurrent operations, monitoring, and maintenance. Trigger: When creating or modifying PostgreSQL indexes, analyzing query performance with EXPLAIN, debugging slow queries, reviewing index usage statistics, reindexing, dropping indexes, or working with partitioned table indexes. Also trigger when discussing index strategies, partial indexes, or index maintenance
oaustegard/claude-skills
featuring
Generate hierarchical _FEATURES.md files that describe what a codebase DOES from a user/consumer perspective, anchored to source symbols via tree-sitting. Supports large complex codebases through feature-driven decomposition into sub-feature files. Uses a multi-pass synthesis: orientation → detail → overview rewrite. Use when someone says "what does this do", "document features", "feature inventory", "_FEATURES.md", or needs to understand a codebase's purpose before modifying it. Complements tre