pinia-plugin-capacitor-persist

A Vue 3 Pinia plugin which persists store content using the CapacitorJS Preferences store.
21,737 9
Install
npm install pinia-plugin-capacitor-persist
Latest Version:1.8.1
Vue:3
License:MIT
Last Updated:Aug 24, 2026
Links: GitHub  ·  npm
Maintainer: craigrileyuk

Buy Me A Coffee

Pinia Persist Plugin for Capacitor

Pinia plugin that syncs with Capacitor's Preferences plugin's storage.

Installation

npm i pinia-plugin-capacitor-persist

Usage

First, install the plugin as part of your Pinia initialisation

import { createApp } from 'vue';
import { createPinia } from 'pinia';
import { piniaCapacitorPersist } from 'pinia-plugin-capacitor-persist';
import App from './App.vue';

const pinia = createPinia();
pinia.use(piniaCapacitorPersist);

createApp(App).use(pinia).mount('#app');

Then you can enable persist as part of your store declarations:

import { defineStore } from 'pinia';

export const useUserStore = defineStore('user', {
	state() {
		return {
			name: '',
			address: '',
			address_2: '',
			city: '',
			country: '',
		};
	},
	persist: {
		enabled: true,
		// See below for additional options that go here
	},
});

Persist options

Option Type Example Description
enabled Boolean true Should the store be persisted?
include Array ['address'] Only persist these properties
exclude Array ['name'] Don't persist these properties
onRestored Function (store) => { // do stuff } Callback function for after restoration

Async Restoration

Because CapacitorJS uses async functions to read/write its storage, there may be times when you need to await your store being hydrated from local storage before doing an action.

Fortunately, there's a property, restored, that's added to each of your persist enabled stores that can be awaited.

import { createRouter, createWebHashHistory } from 'vue-router';
import routes from '@/router/routes';
import { useUserStore } from '@/stores/user';
import { axiosInstance } from '@/plugins/axios';

const router = createRouter({
	history: createWebHashHistory(),
	routes,
});

router.beforeEach(async () => {
	const userStore = useUserStore();
	await userStore.restored;

	axiosInstance.defaults.headers.common['Authorization'] = `Bearer ${userStore.token}`;
});

export default router;

Related Packages

pinia-plugin-persistedstate-2

Persist and rehydrate your Pinia state between page reloads

257,084 115
@tauri-store/pinia

Persistent Pinia stores for Tauri

21,382 137
pinia-plugin-logger

Logger for Pinia

2,311 4
pinia-plugin-extending-store

A Pinia plugin to create reusable stores that can extend other Pinia stores.

3,030 0

Version History

Version Released Vue License
1.8.1 ^3.0.0 MIT
1.8.0 ^3.0.0 MIT
1.7.1 ^3.0.0 MIT
1.7.0 ^3.0.0 MIT
1.6.0 ^3.0.0 MIT