MCPcopy
hub / github.com/vuejs/pinia

github.com/vuejs/pinia @v3.0.4 sqlite

repository ↗ · DeepWiki ↗ · release v3.0.4 ↗
378 symbols 1,012 edges 117 files 21 documented · 6%
README

Pinia logo

npm package build status

Pinia

Intuitive, type safe and flexible Store for Vue

  • 💡 Intuitive
  • 🔑 Type Safe
  • ⚙️ Devtools support
  • 🔌 Extensible
  • 🏗 Modular by design
  • 📦 Extremely light
  • ⛰️ Nuxt Module

The latest version of pinia works with Vue 3. See the branch v2 for a version that works with Vue 2.

Pinia is the most similar English pronunciation of the word pineapple in Spanish: piña. A pineapple is in reality a group of individual flowers that join together to create a multiple fruit. Similar to stores, each one is born individually, but they are all connected at the end. It's also a delicious tropical fruit indigenous to South America.

👉 Demo with Vue 3 on StackBlitz

👉 Demo with Nuxt 3 on StackBlitz

Help me keep working on this project 💚

Gold Sponsors

<a href="https://www.coderabbit.ai/?utm_source=vuerouter&utm_medium=sponsor" target="_blank" rel="noopener noreferrer">






  <img src="https://posva-sponsors.pages.dev/logos/coderabbitai-light.svg" height="72px" alt="CodeRabbit" />

Silver Sponsors

<a href="https://www.vuemastery.com/" target="_blank" rel="noopener noreferrer">






  <img src="https://posva-sponsors.pages.dev/logos/vuemastery-light.svg" height="42px" alt="VueMastery" />

  <img src="https://posva-sponsors.pages.dev/logos/prefectlogo-light.svg" height="42px" alt="Prefect" />

  <img src="https://posva-sponsors.pages.dev/logos/controla-light.png" height="42px" alt="Controla" />

  <img src="https://posva-sponsors.pages.dev/logos/sendcloud-light.svg" height="42px" alt="SendCloud" />

  <img src="https://posva-sponsors.pages.dev/logos/route4me.png" height="42px" alt="Route Optimizer and Route Planner Software" />

Bronze Sponsors

<a href="https://storyblok.com" target="_blank" rel="noopener noreferrer">






  <img src="https://posva-sponsors.pages.dev/logos/storyblok.png" height="26px" alt="Storyblok" />

  <img src="https://posva-sponsors.pages.dev/logos/nuxt-light.svg" height="26px" alt="NuxtLabs" />

  <img src="https://avatars.githubusercontent.com/u/2486424?u=7b0c73ae5d090ce53bf59473094e9606fe082c59&v=4" height="26px" alt="Stanislas Ormières" />


FAQ

A few notes about the project and possible questions:

Q: Is Pinia the successor of Vuex?

A: Yes

Q: What about dynamic modules?

A: Dynamic modules are not type safe, so instead we allow creating different stores that can be imported anywhere

Installation

# or pnpm or yarn
npm install pinia

Usage

Install the plugin

Create a pinia (the root store) and pass it to app:

// Vue 3
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')

For more detailed instructions, including Nuxt configuration, check the Documentation.

Create a Store

You can create as many stores as you want, and they should each exist in different files:

import { defineStore } from 'pinia'

// main is the name of the store. It is unique across your application
// and will appear in devtools
export const useMainStore = defineStore('main', {
  // a function that returns a fresh state
  state: () => ({
    counter: 0,
    name: 'Eduardo',
  }),
  // optional getters
  getters: {
    // getters receive the state as first parameter
    doubleCounter: (state) => state.counter * 2,
    // use getters in other getters
    doubleCounterPlusOne(): number {
      return this.doubleCounter + 1
    },
  },
  // optional actions
  actions: {
    reset() {
      // `this` is the store instance
      this.counter = 0
    },
  },
})

defineStore returns a function that has to be called to get access to the store:

import { useMainStore } from '@/stores/main'
import { storeToRefs } from 'pinia'

export default defineComponent({
  setup() {
    const main = useMainStore()

    // extract specific store properties
    const { counter, doubleCounter } = storeToRefs(main)

    return {
      // gives access to the whole store in the template
      main,
      // gives access only to specific state or getter
      counter,
      doubleCounter,
    }
  },
})

Documentation

To learn more about Pinia, check its documentation.

License

MIT

Extension points exported contracts — how you extend this code

MarkedAction (Interface)
* Function type extended with action markers * @internal
packages/pinia/src/store.ts
Process (Interface)
(no doc)
packages/nuxt/shims.d.ts
PiniaCustomProperties (Interface)
(no doc)
packages/playground/src/main.ts
TestingOptions (Interface)
(no doc)
packages/testing/src/testing.ts
MapStoresCustomization (Interface)
(no doc)
packages/pinia/test-dts/customizations.test-d.ts
ModuleOptions (Interface)
(no doc)
packages/nuxt/src/module.ts
User (Interface)
(no doc)
packages/playground/src/stores/wholeStore.ts
TestingPinia (Interface)
(no doc)
packages/testing/src/testing.ts

Core symbols most depended-on inside this repo

defineStore
called by 197
packages/pinia/src/store.ts
createPinia
called by 93
packages/pinia/src/createPinia.ts
$patch
called by 64
packages/pinia/src/types.ts
setActivePinia
called by 58
packages/pinia/src/rootStore.ts
useStore
called by 29
packages/pinia/src/store.ts
storeToRefs
called by 28
packages/pinia/src/storeToRefs.ts
use
called by 27
packages/pinia/src/rootStore.ts
$subscribe
called by 27
packages/pinia/src/types.ts

Shape

Function 309
Interface 56
Method 10
Class 2
Enum 1

Languages

TypeScript100%

Modules by API surface

packages/pinia/src/types.ts24 symbols
packages/pinia/src/store.ts19 symbols
packages/pinia/src/devtools/formatting.ts13 symbols
packages/testing/src/testing.ts11 symbols
packages/pinia/__tests__/getters.spec.ts11 symbols
packages/pinia/__tests__/actions.spec.ts11 symbols
packages/pinia/test-dts/store.test-d.ts10 symbols
packages/pinia/test-dts/customizations.test-d.ts10 symbols
packages/pinia/__tests__/onAction.spec.ts10 symbols
scripts/release.mjs9 symbols
packages/pinia/src/devtools/actions.ts9 symbols
packages/pinia/__tests__/vitest-mock-warn.ts9 symbols

Dependencies from manifests, versioned

@chenfengyuan/vue-countdown2.1.3 · 1×
@microsoft/api-extractor7.53.3 · 1×
@nuxt/kit4.2.0 · 1×
@nuxt/module-builder1.0.2 · 1×
@nuxt/schema4.2.0 · 1×
@nuxt/test-utils3.20.1 · 1×
@posva/prompts2.4.4 · 1×
@rollup/plugin-alias6.0.0 · 1×
@rollup/plugin-commonjs29.0.0 · 1×
@rollup/plugin-node-resolve16.0.3 · 1×
@rollup/plugin-replace6.0.3 · 1×
@rollup/plugin-terser0.4.4 · 1×

For agents

$ claude mcp add pinia \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact