vike-vue-pinia-colada
v0.0.9
Published
Vike extension for Pinia Colada
Maintainers
Readme
Built on top of the same patterns as vike-vue-pinia, with added Pinia Colada query cache serialization/hydration.
[!NOTE] Pinia is included — you don't need
vike-vue-piniaalongside this extension.
Installation
npm install vike-vue-pinia-colada pinia @pinia/coladaExtend
+config.js:// pages/+config.js import vikeVuePiniaColada from 'vike-vue-pinia-colada/config' import vikeVue from 'vike-vue/config' export default { // ... extends: [vikeVue, vikeVuePiniaColada] }
Pinia Colada Options
You can pass options to the Pinia Colada plugin via the piniaColadaOptions config:
// pages/+config.js
export default {
piniaColadaOptions: {
queryOptions: {
staleTime: 5000,
},
}
}All options from PiniaColadaOptions are supported.
Why a separate extension?
Pinia Colada stores its query cache inside Pinia, but serializing it through Pinia's standard state hydration doesn't work reliably — cache keys can be functions, which aren't serializable out of the box. This causes issues when relying solely on vike-vue-pinia for SSR.
The recommended approach is to use the dedicated helpers provided by Pinia Colada (serializeQueryCache / reviveQueryCache) to correctly serialize the query cache on the server and hydrate it on the client. This is exactly what this extension does under the hood.
Architecture differences with vike-vue-pinia
This extension differs from vike-vue-pinia in how Pinia is initialized:
vike-vue-piniauses+onCreatePageContext.ssr.tsfor server-side Pinia creation, then creates the client-side instance separately in+onCreateApp.tsvia a sharedcreatePiniaPlushelper.vike-vue-pinia-coladauses a single+onCreatePageContext.ts(no.ssrsuffix) that handles both environments. On the client, it early-returns if a Pinia instance already exists onglobalContext.
Both approaches avoid unnecessary pageContext.json requests during client-side navigation:
.ssr.jshooks only run during SSR (initial server render), not during client-side navigation.- No-suffix hooks run on both server and client — during client-side navigation, they execute client-side, so no server round-trip is needed.
- Only
.server.jshooks would triggerpageContext.jsonrequests during client-side navigation.
The result is a simpler implementation: one hook handles Pinia creation in both environments, while +onCreateApp focuses solely on app plugin installation and hydration. The trade-off is a negligible extra onCreatePageContext call on each client-side navigation (which immediately early-returns).
See also
- Pinia Colada
vike-vue-pinia— Reference implementation for Pinia integration
