Pinia

Intuitive, type-safe, and flexible state management store for Vue applications.

Library
npm
v4.1.0
14,745 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
90 /100 Excellent
Development Activity 92
Maintenance 100
Community 68
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
91 /100 Excellent
Architecture 92
Code Quality 90
Innovation 90
Learning Curve 85

Pinia is the official state management library for Vue, designed around the Composition API to provide a store that is intuitive, fully type-safe, and modular by design. It replaces Vuex as the recommended solution for sharing state across components, letting you define independent stores that are automatically inferred by TypeScript without any extra typing boilerplate.

Stores in Pinia are extremely lightweight and tree-shakeable, expose state, getters, and actions through a flat API, and integrate directly with Vue Devtools for time-travel debugging, hot module replacement, and plugin extensibility. It works seamlessly with both Vue 3 and server-side rendering setups such as Nuxt.

What You Get

  • A createPinia() root store you install once and share across the whole application, including SSR-safe state hydration.
  • The defineStore API for declaring modular stores using either an options object or a Composition-API setup function.
  • Automatic, boilerplate-free TypeScript inference for state, getters, and actions across every store.
  • First-class Vue Devtools integration with time-travel debugging, action tracking, and hot module replacement support.
  • An extensible plugin system plus helpers like storeToRefs, mapStores, and mapState for both Composition and Options API components.

Common Use Cases

  • Sharing authentication, user, or session state across many components in a Vue 3 single-page application.
  • Managing server-fetched data and cart or form state in Nuxt applications with proper SSR hydration.
  • Migrating an existing Vuex-based codebase to a lighter, fully type-safe store without dynamic module complexity.
  • Composing multiple focused stores that reference one another instead of a single monolithic global state tree.

Under The Hood

Architecture

Pinia is built as a thin, reactivity-driven layer over Vue’s core primitives. createPinia() (in src/createPinia.ts) creates an effectScope and a root ref holding a record of every store’s state, then returns a markRaw Pinia object whose install method provides the instance via app.provide(piniaSymbol, ...) and registers devtools. defineStore (in src/store.ts, the largest module at ~29KB) returns a useStore composable that lazily instantiates the store on first call, caching instances in the Pinia _s map; both options-style stores (state/getters/actions) and setup-style stores collapse into the same reactive store object via reactive, computed, and per-store effectScope. Subscriptions (src/subscriptions.ts), HMR patching (src/hmr.ts), and storeToRefs (src/storeToRefs.ts) layer additional behavior on top of this reactive core.

Tech Stack

The library is written entirely in TypeScript and targets Vue 3.5+ as a peer dependency, pulling in @vue/devtools-api for its devtools bridge. It ships as a pnpm monorepo (packages/pinia, packages/nuxt, packages/testing, packages/docs) and is bundled with tsdown/Rollup into ESM and IIFE outputs, using compile-time __DEV__, __TEST__, and __USE_DEVTOOLS__ flags to strip development-only code from production builds. It is marked sideEffects: false for full tree-shaking.

Code Quality

The codebase is mature and well-tested, with 17 dedicated spec files under packages/pinia/__tests__ covering actions, getters, subscriptions, SSR, HMR, plugins, state patching, and store setup, run under Vitest with v8 coverage. Internal-only types are consistently prefixed with an underscore and marked @internal, public functions carry JSDoc, and the strict TypeScript configuration plus dedicated test-dts type tests guard the public type surface. Naming is precise and the separation between reactivity plumbing and public API is clear.

API Design

Pinia’s public surface is deliberately small and ergonomic: createPinia, defineStore, storeToRefs, the mapX helpers, and acceptHMRUpdate cover nearly all usage. Getting started requires almost no boilerplate — a single store definition is immediately type-safe with no manual generics — and the flat store shape (accessing state and actions directly on the instance) reads naturally. Documentation at pinia.vuejs.org is thorough, and the dual options/setup store styles let teams pick the ergonomics that fit their existing Vue patterns.

Used by 31 apps in this directory

Go
38%
MIT

ezBookkeeping

Invoicing Finance

5,814

Lightweight self-hosted personal finance manager with AI receipt scanning, multi-currency support, and MCP integration for complete data privacy.

View details
88
Repo Health
80
Technical
71
Dependency
Built with
Go 38%
Vue 33%
TypeScript 25%
Updated 6 days ago
Vue
46%
MIT

flatnotes

Knowledge Management · Note Taking

3,262

Self-hosted, database-free note-taking with plain Markdown files, full-text search, wikilinks, and zero proprietary lock-in.

View details
69
Repo Health
64
Technical
79
Dependency
Built with
Vue 46%
Python 32%
JavaScript 13%
Updated 2 months ago
Python
66%
MIT

Flowfile

Data Engineering

398

Visual ETL that compiles to Polars — build pipelines on a canvas, export as standalone Python, and run anywhere without platform lock-in.

View details
83
Repo Health
81
Technical
66
Dependency
Built with
Python 66%
TypeScript 17%
Vue 16%
Updated 6 days ago
Vue
51%
AGPL 3.0

Frappe CRM

CRM

3,846

Open-source CRM with unlimited users, built-in Twilio, Exotel, WhatsApp, and ERPNext integrations — self-host in minutes.

View details
92
Repo Health
68
Technical
77
Dependency
Built with
Vue 51%
Python 34%
JavaScript 11%
Updated 6 days ago
Go
85%
Apache 2.0

frp

Networking

110,102

A fast reverse proxy that exposes local servers behind NAT or firewalls to the public internet with multi-protocol support.

View details
95
Repo Health
82
Technical
71
Dependency
Built with
Go 85%
Vue 11%
Updated 6 days ago
Ruby
66%
Other

GitLab

Developer Tools · Devops

24,537

The complete DevOps platform that unifies Git hosting, CI/CD, issue tracking, and security scanning into a single self-hostable application.

View details
87
Repo Health
86
Technical
65
Dependency
Built with
Ruby 66%
JavaScript 20%
Updated 6 days ago
Rust
51%
Other

hoodik

File Storage · Security

1,539

Self-hosted, end-to-end encrypted cloud storage with browser-based encryption and S3-compatible storage support

View details
77
Repo Health
71
Technical
63
Dependency
Built with
Rust 51%
TypeScript 34%
Vue 14%
Updated 1 weeks ago
Rust
37%
Other

Hook0

Devops

1,504

Open-source Webhooks-as-a-Service: deliver events to your users with auto-retry, signed payloads, and a real-time subscriber dashboard — all without building the infrastructure yourself.

View details
84
Repo Health
82
Technical
69
Dependency
Built with
Rust 37%
TypeScript 12%
Updated 6 days ago
Vue
50%
GPL 3.0

IT-Tools

Developer Tools

40,954

A unified collection of 88 web-based developer utilities — from JSON formatting to subnet calculation — all self-hostable, keyboard-searchable, and offline-ready.

View details
60
Repo Health
74
Technical
63
Dependency
Built with
Vue 50%
TypeScript 48%
Updated 1 weeks ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers