[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-3890":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":18,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":22,"hasPages":22,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":30,"readmeContent":31,"aiSummary":32,"trendingCount":16,"starSnapshotCount":16,"syncStatus":33,"lastSyncTime":34,"discoverSource":35},3890,"pinia","vuejs\u002Fpinia","vuejs","🍍 Intuitive, type safe, light and flexible Store for Vue using the composition api with DevTools support","https:\u002F\u002Fpinia.vuejs.org",null,"TypeScript",14602,1182,67,19,0,1,6,28,77.02,"MIT License",false,"v4",[25,26,27,28,29],"composition-api","ssr","store","vue","vuex","2026-06-12 04:00:19","\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fpinia.vuejs.org\" target=\"_blank\" rel=\"noopener noreferrer\">\n    \u003Cimg width=\"180\" src=\"https:\u002F\u002Fpinia.vuejs.org\u002Flogo.svg\" alt=\"Pinia logo\">\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\u003Cbr\u002F>\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fnpmx.dev\u002Fpackage\u002Fpinia\">\u003Cimg src=\"https:\u002F\u002Fbadgen.net\u002Fnpm\u002Fv\u002Fpinia\u002F^4\" alt=\"npm package\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fpinia\u002Factions\u002Fworkflows\u002Fci.yml\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fpinia\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg\" alt=\"build status\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fcodecov.io\u002Fgh\u002Fvuejs\u002Fpinia\">\u003Cimg src=\"https:\u002F\u002Fcodecov.io\u002Fgh\u002Fvuejs\u002Fpinia\u002Fbranch\u002Fv4\u002Fgraph\u002Fbadge.svg?token=rU2xxQ6BGH\"\u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\u003Cbr\u002F>\n\n# Pinia\n\n> Intuitive, type safe and flexible Store for Vue\n\n- 💡 Intuitive\n- 🔑 Type Safe\n- ⚙️ Devtools support\n- 🔌 Extensible\n- 🏗 Modular by design\n- 📦 Extremely light\n- ⛰️ Nuxt Module\n\nThe latest version of pinia works with Vue 3. See the branch [v2](https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fpinia\u002Ftree\u002Fv2) for a version that works with Vue 2.\n\nPinia 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.\n\n## 👉 [Demo with Vue 3 on StackBlitz](https:\u002F\u002Fstackblitz.com\u002Fgithub\u002Fpiniajs\u002Fexample-vue-3-vite)\n\n## 👉 [Demo with Nuxt 3 on StackBlitz](https:\u002F\u002Fstackblitz.com\u002Fgithub\u002Fpiniajs\u002Fexample-nuxt-3)\n\n## Help me keep working on this project 💚\n\n- [Become a Sponsor on GitHub](https:\u002F\u002Fgithub.com\u002Fsponsors\u002Fposva)\n- [One-time donation via PayPal](https:\u002F\u002Fpaypal.me\u002Fposva)\n\n\u003C!--sponsors start-->\n\n\u003Ch4 align=\"center\">Gold Sponsors\u003C\u002Fh4>\n\u003Cp align=\"center\">\n    \u003Ca href=\"https:\u002F\u002Fwww.coderabbit.ai\u002F?utm_source=vuerouter&utm_medium=sponsor\" target=\"_blank\" rel=\"noopener noreferrer\">\n    \u003Cpicture>\n      \u003Csource srcset=\"https:\u002F\u002Fposva-sponsors.pages.dev\u002Flogos\u002Fcoderabbitai-dark.svg\" media=\"(prefers-color-scheme: dark)\" height=\"72px\" alt=\"CodeRabbit\" \u002F>\n      \u003Cimg src=\"https:\u002F\u002Fposva-sponsors.pages.dev\u002Flogos\u002Fcoderabbitai-light.svg\" height=\"72px\" alt=\"CodeRabbit\" \u002F>\n    \u003C\u002Fpicture>\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Ch4 align=\"center\">Silver Sponsors\u003C\u002Fh4>\n\u003Cp align=\"center\">\n    \u003Ca href=\"https:\u002F\u002Fwww.vuemastery.com\u002F\" target=\"_blank\" rel=\"noopener noreferrer\">\n    \u003Cpicture>\n      \u003Csource srcset=\"https:\u002F\u002Fposva-sponsors.pages.dev\u002Flogos\u002Fvuemastery-dark.png\" media=\"(prefers-color-scheme: dark)\" height=\"42px\" alt=\"VueMastery\" \u002F>\n      \u003Cimg src=\"https:\u002F\u002Fposva-sponsors.pages.dev\u002Flogos\u002Fvuemastery-light.svg\" height=\"42px\" alt=\"VueMastery\" \u002F>\n    \u003C\u002Fpicture>\n  \u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fwww.controla.ai\u002F?utm_source=posva\" target=\"_blank\" rel=\"noopener noreferrer\">\n    \u003Cpicture>\n      \u003Csource srcset=\"https:\u002F\u002Fposva-sponsors.pages.dev\u002Flogos\u002Fcontrola-dark.png\" media=\"(prefers-color-scheme: dark)\" height=\"42px\" alt=\"Controla\" \u002F>\n      \u003Cimg src=\"https:\u002F\u002Fposva-sponsors.pages.dev\u002Flogos\u002Fcontrola-light.png\" height=\"42px\" alt=\"Controla\" \u002F>\n    \u003C\u002Fpicture>\n  \u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fjobs.sendcloud.com\" target=\"_blank\" rel=\"noopener noreferrer\">\n    \u003Cpicture>\n      \u003Csource srcset=\"https:\u002F\u002Fposva-sponsors.pages.dev\u002Flogos\u002Fsendcloud-dark.svg\" media=\"(prefers-color-scheme: dark)\" height=\"42px\" alt=\"SendCloud\" \u002F>\n      \u003Cimg src=\"https:\u002F\u002Fposva-sponsors.pages.dev\u002Flogos\u002Fsendcloud-light.svg\" height=\"42px\" alt=\"SendCloud\" \u002F>\n    \u003C\u002Fpicture>\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Ch4 align=\"center\">Bronze Sponsors\u003C\u002Fh4>\n\u003Cp align=\"center\">\n    \u003Ca href=\"https:\u002F\u002Fwww.rtvision.com\u002F\" target=\"_blank\" rel=\"noopener noreferrer\">\n    \u003Cpicture>\n      \u003Csource srcset=\"https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F8292810\" media=\"(prefers-color-scheme: dark)\" height=\"26px\" alt=\"RTVision\" \u002F>\n      \u003Cimg src=\"https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F8292810\" height=\"26px\" alt=\"RTVision\" \u002F>\n    \u003C\u002Fpicture>\n  \u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fstoryblok.com\" target=\"_blank\" rel=\"noopener noreferrer\">\n    \u003Cpicture>\n      \u003Csource srcset=\"https:\u002F\u002Fposva-sponsors.pages.dev\u002Flogos\u002Fstoryblok.png\" media=\"(prefers-color-scheme: dark)\" height=\"26px\" alt=\"Storyblok\" \u002F>\n      \u003Cimg src=\"https:\u002F\u002Fposva-sponsors.pages.dev\u002Flogos\u002Fstoryblok.png\" height=\"26px\" alt=\"Storyblok\" \u002F>\n    \u003C\u002Fpicture>\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003C!--sponsors end-->\n\u003C!--sponsors end-->\n\n---\n\n## FAQ\n\nA few notes about the project and possible questions:\n\n**Q**: _Is Pinia the successor of Vuex?_\n\n**A**: [Yes](https:\u002F\u002Fvuejs.org\u002Fguide\u002Fscaling-up\u002Fstate-management.html#pinia)\n\n**Q**: _What about dynamic modules?_\n\n**A**: Dynamic modules are not type safe, so instead [we allow creating different stores](https:\u002F\u002Fpinia.vuejs.org\u002Fcookbook\u002Fcomposing-stores.html) that can be imported anywhere\n\n## Installation\n\n```bash\n# or pnpm or yarn\nnpm install pinia\n```\n\n## Usage\n\n### Install the plugin\n\nCreate a pinia (the root store) and pass it to app:\n\n```js\n\u002F\u002F Vue 3\nimport { createApp } from 'vue'\nimport { createPinia } from 'pinia'\nimport App from '.\u002FApp.vue'\n\nconst pinia = createPinia()\nconst app = createApp(App)\n\napp.use(pinia)\napp.mount('#app')\n```\n\nFor more detailed instructions, including [Nuxt configuration](https:\u002F\u002Fpinia.vuejs.org\u002Fssr\u002Fnuxt.html), check the [Documentation](https:\u002F\u002Fpinia.vuejs.org).\n\n### Create a Store\n\nYou can create as many stores as you want, and they should each exist in different files:\n\n```ts\nimport { defineStore } from 'pinia'\n\n\u002F\u002F main is the name of the store. It is unique across your application\n\u002F\u002F and will appear in devtools\nexport const useMainStore = defineStore('main', {\n  \u002F\u002F a function that returns a fresh state\n  state: () => ({\n    counter: 0,\n    name: 'Eduardo',\n  }),\n  \u002F\u002F optional getters\n  getters: {\n    \u002F\u002F getters receive the state as first parameter\n    doubleCounter: (state) => state.counter * 2,\n    \u002F\u002F use getters in other getters\n    doubleCounterPlusOne(): number {\n      return this.doubleCounter + 1\n    },\n  },\n  \u002F\u002F optional actions\n  actions: {\n    reset() {\n      \u002F\u002F `this` is the store instance\n      this.counter = 0\n    },\n  },\n})\n```\n\n`defineStore` returns a function that has to be called to get access to the store:\n\n```ts\nimport { useMainStore } from '@\u002Fstores\u002Fmain'\nimport { storeToRefs } from 'pinia'\n\nexport default defineComponent({\n  setup() {\n    const main = useMainStore()\n\n    \u002F\u002F extract specific store properties\n    const { counter, doubleCounter } = storeToRefs(main)\n\n    return {\n      \u002F\u002F gives access to the whole store in the template\n      main,\n      \u002F\u002F gives access only to specific state or getter\n      counter,\n      doubleCounter,\n    }\n  },\n})\n```\n\n## Documentation\n\nTo learn more about Pinia, check [its documentation](https:\u002F\u002Fpinia.vuejs.org).\n\n## License\n\n[MIT](http:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT)\n","Pinia 是一个为 Vue.js 设计的直观、类型安全且灵活的状态管理库。它利用 Composition API 提供了一种轻量级且模块化的方式来管理应用状态，并支持 DevTools 以方便调试。Pinia 的核心功能包括类型安全、可扩展性以及与 Vue 3 和 Nuxt 3 的良好集成。由于其设计简洁且易于上手，Pinia 特别适合用于需要高效状态管理的中小型到大型 Vue 应用场景中。",2,"2026-06-11 02:56:55","top_language"]