Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
jeffallan avatar

Vue Expert Js

  • 3k installs
  • 10.8k repo stars
  • Updated May 20, 2026
  • jeffallan/claude-skills

vue-expert-js is an agent skill that builds Vue 3 applications in JavaScript with JSDoc typing, Composition API components, Pinia stores, and Vitest tests without TypeScript.

About

vue-expert-js is an agent skill for Vue 3 projects that use JavaScript and JSDoc instead of TypeScript. The core workflow designs component architecture, implements with script setup without lang ts, annotates public APIs using typedef param and returns comments, then tests with Vitest while enforcing JSDoc coverage through eslint-plugin-jsdoc. Reference guides cover JSDoc typing, composable patterns, component architecture, Pinia state management, and testing patterns, with shared Vue concepts deferred to vue-expert references for composition API, components, and stores. Documented patterns include JSDoc-typed defineProps and defineEmits in SFCs, composables such as useCounter exported from .mjs modules, and shared typedef objects in types/user.mjs imported across files. Constraints require Composition API script setup, JSDoc on every public function, .mjs for ES modules when needed, and forbid TypeScript syntax, .ts extensions, CommonJS require in Vue files, or mixing TS and JS in one component. Developers reach for it when building Vue 3 apps without TypeScript, migrating Options API projects to Composition API in JS, or prototyping quickly while keeping type hints via JSDoc.

  • Implements Vue 3 with script setup JavaScript only, using JSDoc typedef param and returns annotations.
  • Reference map covers JSDoc typing, composables, components, Pinia state, and Vitest testing patterns.
  • Includes SFC and .mjs composable examples such as useCounter with computed isPositive.
  • Requires eslint-plugin-jsdoc verification before proceeding after annotation passes.
  • Forbids TypeScript syntax, .ts files, CommonJS require, and mixing TS with JS components.

Vue Expert Js by the numbers

  • 2,964 all-time installs (skills.sh)
  • +79 installs in the week ending Jul 28, 2026 (Skillselion tracking)
  • Ranked #173 of 2,277 Frontend Development skills by installs in the Skillselion catalog
  • Security screen: LOW risk (skills.sh audit)
  • Data as of Jul 28, 2026 (Skillselion catalog sync)
At a glance

vue-expert-js capabilities & compatibility

Capabilities
jsdoc typed sfcs · composable authoring · pinia state patterns · vitest test guidance
Use cases
frontend · testing
npx skills add https://github.com/jeffallan/claude-skills --skill vue-expert-js

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs3k
repo stars10.8k
Security audit3 / 3 scanners passed
Last updatedMay 20, 2026
Repositoryjeffallan/claude-skills

How do I build Vue 3 apps in JavaScript only while keeping type coverage through JSDoc instead of a TypeScript compiler?

Build Vue 3 applications in JavaScript with JSDoc typing, Composition API components, composables, Pinia, and Vitest tests.

Who is it for?

Frontend developers on Vue 3 JavaScript codebases who want JSDoc type hints, .mjs composables, and Composition API patterns.

Skip if: Skip when the project is TypeScript-first or needs only generic React or non-Vue frontend guidance.

When should I use this skill?

User builds Vue 3 with JavaScript only, requests JSDoc typing, migrates Options API to Composition API without TS, or prototypes without TypeScript setup.

What you get

Vue 3 SFCs, composables, and tests with JSDoc-typed public APIs verified by eslint-plugin-jsdoc.

  • Vue 3 SFC component files
  • Typed props and emits definitions
  • v-model binding implementations

By the numbers

  • Covers props, emits, and v-model—the three core Vue 3 SFC composition APIs

Files

SKILL.mdMarkdownGitHub ↗

Vue Expert (JavaScript)

Senior Vue specialist building Vue 3 applications with JavaScript and JSDoc typing instead of TypeScript.

Core Workflow

1. Design architecture — Plan component structure and composables with JSDoc type annotations 2. Implement — Build with <script setup> (no lang="ts"), .mjs modules where needed 3. Annotate — Add comprehensive JSDoc comments (@typedef, @param, @returns, @type) for full type coverage; then run ESLint with the JSDoc plugin (eslint-plugin-jsdoc) to verify coverage — fix any missing or malformed annotations before proceeding 4. Test — Verify with Vitest using JavaScript files; confirm JSDoc coverage on all public APIs; if tests fail, revisit the relevant composable or component, correct the logic or annotation, and re-run until the suite is green

Reference Guide

Load detailed guidance based on context:

TopicReferenceLoad When
JSDoc Typingreferences/jsdoc-typing.mdJSDoc types, @typedef, @param, type hints
Composablesreferences/composables-patterns.mdcustom composables, ref, reactive, lifecycle hooks
Componentsreferences/component-architecture.mdprops, emits, slots, provide/inject
Statereferences/state-management.mdPinia, stores, reactive state
Testingreferences/testing-patterns.mdVitest, component testing, mocking

For shared Vue concepts, defer to vue-expert:

  • vue-expert/references/composition-api.md - Core reactivity patterns
  • vue-expert/references/components.md - Props, emits, slots
  • vue-expert/references/state-management.md - Pinia stores

Code Patterns

Component with JSDoc-typed props and emits

<script setup>
/**
 * @typedef {Object} UserCardProps
 * @property {string} name - Display name of the user
 * @property {number} age - User's age
 * @property {boolean} [isAdmin=false] - Whether the user has admin rights
 */

/** @type {UserCardProps} */
const props = defineProps({
  name:    { type: String,  required: true },
  age:     { type: Number,  required: true },
  isAdmin: { type: Boolean, default: false },
})

/**
 * @typedef {Object} UserCardEmits
 * @property {(id: string) => void} select - Emitted when the card is selected
 */
const emit = defineEmits(['select'])

/** @param {string} id */
function handleSelect(id) {
  emit('select', id)
}
</script>

<template>
  <div @click="handleSelect(props.name)">
    {{ props.name }} ({{ props.age }})
  </div>
</template>

Composable with @typedef, @param, and @returns

// composables/useCounter.mjs
import { ref, computed } from 'vue'

/**
 * @typedef {Object} CounterState
 * @property {import('vue').Ref<number>} count - Reactive count value
 * @property {import('vue').ComputedRef<boolean>} isPositive - True when count > 0
 * @property {() => void} increment - Increases count by step
 * @property {() => void} reset - Resets count to initial value
 */

/**
 * Composable for a simple counter with configurable step.
 * @param {number} [initial=0] - Starting value
 * @param {number} [step=1]    - Amount to increment per call
 * @returns {CounterState}
 */
export function useCounter(initial = 0, step = 1) {
  /** @type {import('vue').Ref<number>} */
  const count = ref(initial)

  const isPositive = computed(() => count.value > 0)

  function increment() {
    count.value += step
  }

  function reset() {
    count.value = initial
  }

  return { count, isPositive, increment, reset }
}

@typedef for a complex object used across files

// types/user.mjs

/**
 * @typedef {Object} User
 * @property {string}   id       - UUID
 * @property {string}   name     - Full display name
 * @property {string}   email    - Contact email
 * @property {'admin'|'viewer'} role - Access level
 */

// Import in other files with:
// /** @type {import('./types/user.mjs').User} */

Constraints

MUST DO

  • Use Composition API with <script setup>
  • Use JSDoc comments for type documentation
  • Use .mjs extension for ES modules when needed
  • Annotate every public function with @param and @returns
  • Use @typedef for complex object shapes shared across files
  • Use @type annotations for reactive variables
  • Follow vue-expert patterns adapted for JavaScript

MUST NOT DO

  • Use TypeScript syntax (no <script setup lang="ts">)
  • Use .ts file extensions
  • Skip JSDoc types for public APIs
  • Use CommonJS require() in Vue files
  • Ignore type safety entirely
  • Mix TypeScript files with JavaScript in the same component

Output Templates

When implementing Vue features in JavaScript: 1. Component file with <script setup> (no lang attribute) and JSDoc-typed props/emits 2. @typedef definitions for complex prop or state shapes 3. Composable with @param and @returns annotations 4. Brief note on type coverage

Knowledge Reference

Vue 3 Composition API, JSDoc, ESM modules, Pinia, Vue Router 4, Vite, VueUse, Vitest, Vue Test Utils, JavaScript ES2022+

Documentation

Related skills

How it compares

Use vue-expert-js for Vue 3 Composition API SFC implementation rather than general JavaScript refactoring skills.

FAQ

Can vue-expert-js use TypeScript files?

No. It forbids TypeScript syntax, .ts extensions, and mixing TypeScript with JavaScript in the same component.

How is type coverage enforced without TS?

Through comprehensive JSDoc typedef, param, and returns annotations verified with eslint-plugin-jsdoc.

Is Vue Expert Js safe to install?

skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.