Pinia Colada integration for vike-vue with SSR support
Pinia Colada integration for vike-vue with SSR support.
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 needvike-vue-piniaalongside this extension.
npm install vike-vue-pinia-colada pinia @pinia/colada
Extend +config.js:
// pages/+config.js
import vikeVuePiniaColada from 'vike-vue-pinia-colada/config'
import vikeVue from 'vike-vue/config'
export default {
// ...
extends: [vikeVue, vikeVuePiniaColada]
}
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.
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.
vike-vue-piniaThis extension differs from vike-vue-pinia in how Pinia is initialized:
vike-vue-pinia uses +onCreatePageContext.ssr.ts for server-side Pinia creation, then creates the client-side instance separately in +onCreateApp.ts via a shared createPiniaPlus helper.vike-vue-pinia-colada uses a single +onCreatePageContext.ts (no .ssr suffix) that handles both environments. On the client, it early-returns if a Pinia instance already exists on globalContext.Both approaches avoid unnecessary pageContext.json requests during client-side navigation:
.ssr.js hooks only run during SSR (initial server render), not during client-side navigation..server.js hooks would trigger pageContext.json requests 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).
vike-vue-pinia — Reference implementation for Pinia integrationWe use cookies
We use cookies to analyze traffic and improve your experience. You can accept or reject analytics cookies.