Pinia v3 Vue state management with defineStore, getters, actions. Use for Vue 3 stores, Nuxt SSR, Vuex migration, or encountering store composition, hydration, testing errors.
View on GitHubsecondsky/claude-skills
pinia-v3
January 24, 2026
Select agents to install to:
npx add-skill https://github.com/secondsky/claude-skills/blob/main/plugins/pinia-v3/skills/pinia-v3/SKILL.md -a claude-code --skill pinia-v3Installation paths:
.claude/skills/pinia-v3/# Pinia v3 - Vue State Management
**Status**: Production Ready ✅
**Last Updated**: 2025-11-11
**Dependencies**: Vue 3 (or Vue 2.7 with @vue/composition-api)
**Latest Versions**: pinia@^3.0.4, @pinia/nuxt@^0.11.2, @pinia/testing@^1.0.2
---
## Quick Start (5 Minutes)
### 1. Install Pinia
```bash
bun add pinia
# or
bun add pinia
# or
bun add pinia
```
**For Vue <2.7 users**: Also install `@vue/composition-api` with `bun add @vue/composition-api`
**Why this matters:**
- Pinia is the official Vue state management library
- Provides better TypeScript support than Vuex
- Eliminates mutations and namespacing complexity
- Full DevTools support with time-travel debugging
### 2. Create and Register Pinia Instance
```typescript
// main.ts
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'
const pinia = createPinia()
const app = createApp(App)
app.use(pinia)
app.mount('#app')
```
**CRITICAL:**
- Install Pinia BEFORE using any store
- Call `app.use(pinia)` before mounting the app
- Only one Pinia instance per application (unless SSR)
### 3. Define Your First Store
```typescript
// stores/counter.ts
import { defineStore } from 'pinia'
export const useCounterStore = defineStore('counter', {
state: () => ({
count: 0,
name: 'Eduardo'
}),
getters: {
doubleCount: (state) => state.count * 2
},
actions: {
increment() {
this.count++
}
}
})
```
### 4. Use Store in Components
```vue
<script setup>
import { useCounterStore } from '@/stores/counter'
const counter = useCounterStore()
</script>
<template>
<div>
<p>Count: {{ counter.count }}</p>
<p>Double: {{ counter.doubleCount }}</p>
<button @click="counter.increment">Increment</button>
</div>
</template>
```
---
## The Two Store Syntaxes
**Load `references/store-syntax-guide.md` for complete comparison of Option vs Setup stores.**
### Quick Overview
Pinia supports two store definition syntaxes:
**Option Stores:**
- Simil