pinia
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
Silver Sponsors
Bronze Sponsors
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 @vue/devtools-api
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
Related Packages
Intuitive, type safe and flexible Store for Vue (with updated dependencies)
Version History
| Version | Released | Vue | License |
|---|---|---|---|
| 4.1.0 | ^3.5.11 | MIT | |
| 4.0.3 | ^3.5.11 | MIT | |
| 4.0.2 | ^3.5.11 | MIT | |
| 4.0.1 | ^3.5.11 | MIT | |
| 4.0.0 | ^3.5.11 | MIT | |
| 3.0.4 | ^3.5.11 | MIT | |
| 3.0.3 | ^2.7.0 || | MIT | |
| 3.0.2 | ^2.7.0 || | MIT | |
| 3.0.1 | ^2.7.0 || | MIT | |
| 3.0.0 | ^2.7.0 || | MIT | |
| 2.3.1 | ^2.7.0 || | MIT | |
| 2.3.0 | ^2.7.0 || | MIT | |
| 2.2.8 | ^2.6.14 || | MIT | |
| 2.2.7 | ^2.6.14 || | MIT | |
| 2.2.6 | ^2.6.14 || | MIT | |
| 2.2.5 | ^2.6.14 || | MIT | |
| 2.2.4 | ^2.6.14 || | MIT | |
| 2.2.3 | ^2.6.14 || | MIT | |
| 2.2.2 | ^2.6.14 || | MIT | |
| 2.2.1 | ^2.6.14 || | MIT | |
| 2.2.0 | ^2.6.14 || | MIT | |
| 2.1.7 | ^2.6.14 || | MIT | |
| 2.1.6 | ^2.6.14 || | MIT | |
| 2.1.5 | ^2.6.14 || | MIT | |
| 2.1.4 | ^2.6.14 || | MIT | |
| 2.1.3 | ^2.6.14 || | MIT | |
| 2.1.2 | ^2.6.14 || | MIT | |
| 2.1.1 | ^2.6.14 || | MIT | |
| 2.1.0 | ^2.6.14 || | MIT | |
| 2.0.36 | ^2.6.14 || | MIT |
Showing the latest 30 of 90. See every release on npm
Pre-releases (43)
| Version | Released | Vue | License |
|---|---|---|---|
| 2.1.8-beta.0 | ^2.6.14 || | MIT | |
| 2.0.0-rc.15 | ^2.6.14 || | MIT | |
| 2.0.0-rc.14 | ^2.6.14 || | MIT | |
| 2.0.0-rc.13 | ^2.6.14 || | MIT | |
| 2.0.0-rc.12 | ^2.6.14 || | MIT | |
| 2.0.0-rc.11 | ^2.6.14 || | MIT | |
| 2.0.0-rc.10 | ^2.6.14 || | MIT | |
| 2.0.0-rc.9 | ^2.6.14 || | MIT | |
| 2.0.0-rc.8 | ^2.6.14 || | MIT | |
| 2.0.0-rc.7 | ^2.6.14 || | MIT | |
| 2.0.0-rc.6 | ^2.6.14 || | MIT | |
| 2.0.0-rc.5 | ^2.6.14 || | MIT | |
| 2.0.0-rc.4 | ^2.6.14 || | MIT | |
| 2.0.0-rc.3 | ^2.6.14 || | MIT | |
| 2.0.0-rc.2 | ^2.6.14 || | MIT | |
| 2.0.0-rc.1 | ^3.2.0 || | MIT | |
| 2.0.0-rc.0 | ^3.2.0 || | MIT | |
| 2.0.0-beta.5 | ^3.1.4 | MIT | |
| 2.0.0-beta.4 | ^3.1.4 | MIT | |
| 2.0.0-beta.3 | ^3.1.1 | MIT | |
| 2.0.0-beta.2 | ^3.0.11 | MIT | |
| 2.0.0-beta.1 | ^3.0.11 | MIT | |
| 2.0.0-alpha.19 | ^3.0.11 | MIT | |
| 2.0.0-alpha.18 | ^3.0.11 | MIT | |
| 2.0.0-alpha.17 | ^3.0.11 | MIT | |
| 2.0.0-alpha.16 | ^3.0.11 | MIT | |
| 2.0.0-alpha.15 | ^3.0.11 | MIT | |
| 2.0.0-alpha.14 | ^3.0.11 | MIT | |
| 2.0.0-alpha.13 | ^3.0.11 | MIT | |
| 2.0.0-alpha.12 | ^3.0.11 | MIT |
Showing the latest 30 of 43. See every release on npm