New
Storybook’s Visual Tests addon enters betaVisual test with Chromatic
Star82,099
Back to integrations
Add your integration
Categories
  • ⭐️ Popular
  • 🧩 Essentials
  • 🛠 Code
  • ⚡️ Data & state
  • ✅ Test
  • 💅 Style
  • 🎨 Design
  • ⚙️ Appearance
  • 🗄 Organize
How to install addons Create an addon

Integrate Emotion and Storybook

Emotion is a css-in-js framework to build fast and functional components. This recipe shows you how to get the most out of Emotion in Storybook.

Prerequisites

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

Terminal
Loading...

1. Add @storybook/addon-themes

To get started, you'll need to install @storybook/addon-themes.

Run the following script to install and register the addon:

Loading...
Did the configuration script fail?

Under the hood, this runs npx @storybook/auto-config themes, which should read your project and try to configure your Storybook with the correct decorator. If running that command directly does not solve your problem, please file a bug on the @storybook/auto-config repository so that we can further improve it. To manually add this addon, install it, and then add it to the addons array in your .storybook/main.ts.

2. Provide GlobalStyles

Inside of .storybook/preview.js, create a <GlobalStyles /> component that includes a font-family. Then apply it to your stories with the withThemeFromJSXProvider decorator by adding it to the decorators array.

.storybook/preview.jsx
Loading...

If you already have <Global /> in your app, you can import it into .storybook/preview.js instead of creating it anew.

3. Provide your theme(s)

To share your theme(s) with the components in Storybook, you'll need to provide them to the withThemeFromJSXProvider decorator along with @emotion/styled's <ThemeProvider /> component.

.storybook/preview.jsx
Loading...

Now, components made with Emotion will get the theme through the theme prop along with the styles inherited from <Global />.

When you provide more than one theme, a toolbar menu will appear in the Storybook UI to select your desired theme for your stories.

Completed Emotion example with theme switcher

Get involved

Now you're ready to use Emotion with Storybook. 🎉

If you use Emotion at work, we'd love your help making this setup even better. Join the maintainers in Discord to get involved, or jump into addon docs.

Join the community
6,514 developers and counting
WhyWhy StorybookComponent-driven UI
Open source software
Storybook

Maintained by
Chromatic
Special thanks to Netlify and CircleCI