
pinia-skilld
Use when writing, debugging, or refactoring code that imports "pinia", the Vue 3 store library. Covers pinia 4.x: option and setup stores, state, getters, actions, subscriptions, plugins, SSR hydration, testing, Options API map helpers, and v4 nostics diagnostics. Provides version-correct API usage and migration notes from v2 and v3.
- Installs
- 315
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/skilld-dev/vue-ecosystem-skills --skill pinia-skilld- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads pinia-skilld automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
pinia@4.0.3
Source citations use package-relative paths from the prepared pinia 4.0.3 source: package.json, README.md, dist/pinia.js (runtime), dist/pinia.d.ts (types). Other citations are official documentation URLs.
Requirements
- Vue
^3.5.11peer [package.json:62]. Vue 2 is unsupported since v3. @vue/devtools-api^8.1.5is a required, non-optional peer [package.json:60-68]. Install it alongside pinia:npm install pinia @vue/devtools-api[README.md:108-111], v4.0.0 release notes.- TypeScript
>=5.6.0optional peer [package.json:69-71]. - ESM-only package:
"type": "module", single export.todist/pinia.js[package.json:42,47-50]. v4 removed CJS resolution; a require() fallback breaks. @pinia/nuxt1.x and@pinia/testing2.x are the companion versions for pinia 4 (https://github.com/vuejs/pinia/releases).
Install and setup
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')
From [README.md:119-130]. In dev on the client, createPinia() registers the devtools plugin itself [dist/pinia.js:832,847].
Define a store
Two syntaxes. The id is a unique string, first argument in both [dist/pinia.d.ts:645,653].
import { defineStore } from 'pinia'
// Option store: state/getters/actions
export const useCounterStore = defineStore('counter', {
state: () => ({ count: 0 }),
getters: {
doubleCount: (state) => state.count * 2,
},
actions: {
increment() {
this.count++
},
},
})
// Setup store: refs are state, computed are getters, functions are actions
export const useTodos = defineStore('todos', () => {
const todos = ref<Todo[]>([])
const done = computed(() => todos.value.filter((t) => t.done))
function add(todo: Todo) {
todos.value.push(todo)
}
return { todos, done, add }
})
Rules for setup stores [dist/pinia.js:1178-1202]:
ref()andreactive()become state.computed()becomes a getter.- Functions become actions, wrapped automatically for
$onAction. - Return every state property. Pinia only picks up returned state, so private state breaks SSR hydration and devtools.
The setup function receives helpers: defineStore('id', ({ action }) => { ... }) [dist/pinia.js:1177, dist/pinia.d.ts:628-638]. action(fn, name?) makes a helper function trackable by $onAction when called within the store. Rarely needed; intended for advanced cases like Pinia Colada.
Use a store
Call useStore() inside setup() (or any composable). Every call returns the same store instance.
const counter = useCounterStore()
counter.count++ // direct state mutation
counter.doubleCount // getter
counter.increment() // action
const { count, doubleCount } = storeToRefs(counter) // refs for destructuring
storeToRefs() converts state and getters to refs. It ignores actions and non-reactive properties [dist/pinia.js:1475-1489]. Destructure with it, never plain toRefs() or ...store, when you need reactivity.
Common operations:
- Group changes into one devtools entry with
store.$patch(obj)or$patch(fn). The function form must be synchronous [dist/pinia.d.ts:219-225] and suits array, Map, and Set edits [dist/pinia.js:964-975]. $reset()exists only on option stores. On a setup store it throws in dev [dist/pinia.js:1085-1087]; implement your own$resetin the returned object.- Assigning
store.$state = {...}does not replace state; it calls$patchinternally [dist/pinia.js:1207-1216]. - Declare every state key in
state()(or return it from setup), even when the initial value isundefined. New keys added later are not reactive. - Outside a component, pass the pinia instance:
useStore(pinia). On the server this is mandatory; skipping it risks cross-request state pollution [dist/pinia.js:37-39].
Details: stores, subscriptions.
Version notes and migration
v4.0.0, technically breaking only (https://github.com/vuejs/pinia/releases/tag/v4.0.0):
- ESM-only distribution.
@vue/devtools-apiupgraded to v8 and now a required install.- Errors and dev warnings refactored onto Nostics diagnostics, codes
PINIA_R1001toPINIA_R1007[dist/pinia.js:18-56]. See diagnostics. piniaSymbolis now part of the public exports [dist/pinia.js:1491].storeToRefs()skips nullish values gracefully;$subscribe()ignores a duplicate callback instead of stacking a second watcher.
Still relevant from v3.0.0 (https://pinia.vuejs.org/cookbook/migration-v2-v3.html):
defineStore({ id: 'x', ... })object-only signature removed. UsedefineStore('x', { ... }).PiniaStorePlugintype removed. UsePiniaPlugin.- Vue 2 support dropped. Vue 2 users stay on pinia v2.
Reference files
- API surface: every public export with signatures and type helpers.
- Stores: state, getters, actions, typing, composing stores, HMR.
- Subscriptions:
$subscribe,$onAction,MutationType, detached and flush options. - Plugins:
pinia.use(), context, typing extensions, new state and options. - SSR: hydration,
skipHydrate, per-request pinia, Nuxt. - Testing:
setActivePinia,@pinia/testing2.x usage. - Options API: map helpers without
setup(). - Diagnostics: dev-only
PINIA_R100xcatalog with fixes.
Official docs: https://pinia.vuejs.org
FAQ
What does the pinia-skilld skill do?
Use when writing, debugging, or refactoring code that imports "pinia", the Vue 3 store library. Covers pinia 4.x: option and setup stores, state, getters, actions, subscriptions, plugins, SSR hydration, testing, Options API map helpers, and v4 nostics diagnostics. Provides version-correct API usage and migration notes from v2 and v3.
How do I install pinia-skilld?
Run npx skills add https://github.com/skilld-dev/vue-ecosystem-skills --skill pinia-skilld in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/pinia-skilld/ (personal) or .claude/skills/pinia-skilld/ (project).
Which AI agents can use pinia-skilld?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is pinia-skilld safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains pinia-skilld?
It is published by skilld-dev in skilld-dev/vue-ecosystem-skills. It has 315 recorded installs.
More from skilld-dev/vue-ecosystem-skills
quasar-skilld
skilld-dev/vue-ecosystem-skills
Build, configure, and debug apps with the Quasar framework (quasar npm package, v2.33.1). Use when writing, reviewing, or debugging code that imports "quasar" or "quasar/wrappers", configuring Quasar with Vite, Vitest, Storybook, UMD, or Quasar CLI, styling with Quasar Sass variables, or upgrading between Quasar v2 releases.
vue-i18n-skilld
skilld-dev/vue-ecosystem-skills
Use when writing or debugging code that imports vue-i18n (Vue 3 internationalization). Covers createI18n, useI18n, message syntax, i18n-t/i18n-n/i18n-d components, pluralization, datetime and number formatting, TypeScript schemas, lazy loading, bundle optimization, and v10/v11/v12 migration.
vue-skilld
skilld-dev/vue-ecosystem-skills
Build, debug, and modernize UI with Vue 3.6. Use when editing .vue files, writing components or composables, or working with code that imports "vue". Covers script setup, reactivity, Vapor Mode, SSR, and version-specific API changes from 3.4 through 3.6.0-beta.17.
vuetify-skilld
skilld-dev/vue-ecosystem-skills
Vue Material Component Framework. Use when writing, debugging, or configuring code that imports vuetify v4.x. Covers createVuetify setup, components and labs, composables, theming, icons, dates and locale, styles and SASS variables, treeshaking, and v3 to v4 migration.
vue-router-skilld
skilld-dev/vue-ecosystem-skills
Open the skill to read its SKILL.md instructions.
pinia-colada-skilld
skilld-dev/vue-ecosystem-skills
Data fetching layer for Vue built on Pinia. Use when writing, debugging, or reviewing code that imports @pinia/colada (pinia colada), including useQuery, useMutation, useInfiniteQuery, defineQuery, query cache invalidation, optimistic updates, plugins, SSR, or migrating from older versions. Provides current 1.4.x APIs, patterns, and migration rules.
Popular code quality & workflow skills
grill-me
mattpocock/skills
A relentless interview to sharpen a plan or design.
improve-codebase-architecture
mattpocock/skills
Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.
handoff
mattpocock/skills
Compact the current conversation into a handoff document for another agent to pick up.
domain-modeling
mattpocock/skills
Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a GLOSSARY.md, or recording or editing an ADR.
codebase-design
mattpocock/skills
Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.
diagnosing-bugs
mattpocock/skills
Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.