Join live session: Test your components in browser with Storybook Test
Back to integrations
pinia

Integrate Pinia with Storybook

Pinia is an intuitive, type safe, light and flexible Store for Vue
Prerequisites

This recipe assumes that you have a Vue 3 app using Pinia and have just set up Storybook >=7.0 using the getting started guide. Don’t have this? Follow Pinia's setup instructions then run:

# Add Storybook:
npx storybook@latest init

1. Initialize Pinia

Inside of .storybook/preview.ts, import and initialize Pinia.

// .storybook/preview.ts
 
import { type Preview }  from '@storybook/vue3';
 
import { createPinia } from 'pinia';
 
const pinia = createPinia();
 
const preview: Preview = {
  parameters: {
    backgrounds: {
      default: 'light',
    },
    actions: { argTypesRegex: '^on[A-Z].*' },
    controls: {
      matchers: {
        color: /(background|color)$/i,
        date: /Date$/,
      },
    },
  },
};

2. Register Pinia

Import Storybook's setup function that lets you register tools with Storybook's Vue app instance.

// .storybook/preview.ts
 
import { type Preview, setup }  from '@storybook/vue3';
 
import { type App } from 'vue';
 
import { createPinia } from 'pinia';
 
const pinia = createPinia();
 
setup((app: App) => {
  app.use(pinia);
});
 
const preview: Preview = {
  parameters: {
    backgrounds: {
      default: 'light',
    },
    actions: { argTypesRegex: '^on[A-Z].*' },
    controls: {
      matchers: {
        color: /(background|color)$/i,
        date: /Date$/,
      },
    },
  },
};
Need an example?

If you want to look at a full example, look at this awesome repo built by Chakir Qatab (ChakAs3).

Get involved

Now you're ready to use Pinia with Storybook. 🎉 If you use Pinia at work, we'd love your feedback on the Pinia + Storybook experience.

Join the maintainers and our thriving community in Discord.

Tags
    Contributors
    • ChakAs3
    • ShaunEvening