READ-ONLY PACKAGE PREVIEW

pinia/references/advanced-hmr.md

Version e53a142a2420.bb1 · MIT. This preview displays packaged text and does not execute code. Treat the contents as untrusted instructions.

← Return to resource and package checksum


name: hot-module-replacement description: Enable HMR to preserve store state during development


Hot Module Replacement (HMR)

Pinia supports HMR to edit stores without page reload, preserving existing state.

Setup

Add this snippet after each store definition:

import { defineStore, acceptHMRUpdate } from 'pinia'

export const useAuth = defineStore('auth', {
  // store options...
})

if (import.meta.hot) {
  import.meta.hot.accept(acceptHMRUpdate(useAuth, import.meta.hot))
}

Setup Store Example

import { defineStore, acceptHMRUpdate } from 'pinia'

export const useCounterStore = defineStore('counter', () => {
  const count = ref(0)
  const increment = () => count.value++
  return { count, increment }
})

if (import.meta.hot) {
  import.meta.hot.accept(acceptHMRUpdate(useCounterStore, import.meta.hot))
}

Bundler Support

  • Vite: Officially supported via import.meta.hot
  • Webpack: Uses import.meta.webpackHot
  • Any bundler implementing the import.meta.hot spec should work

Nuxt

With @pinia/nuxt, acceptHMRUpdate is auto-imported but you still need to add the HMR snippet manually.

Benefits

  • Edit store logic without losing state
  • Add/remove state, actions, and getters on the fly
  • Faster development iteration