Help us improve
Share bugs, ideas, or general feedback.
Share bugs, ideas, or general feedback.
Share bugs, ideas, or general feedback.
By storybookjs
Manage React Native Storybook stories using Component Story Format (CSF) โ set up Storybook v10 in Expo, CLI, or Re.Pack projects, upgrade across major versions, and connect to a local Storybook instance for accessing UI components and documentation in Claude Code.
npx claudepluginhub storybookjs/react-native --plugin react-native-storybookSet up Storybook for React Native in Expo, React Native CLI, or Re.Pack projects. Use when adding Storybook to a project, configuring metro.config.js with withStorybook, creating .rnstorybook configuration files, setting up Storybook routes in Expo Router, configuring getStorybookUI, or adding the StorybookPlugin to a Re.Pack rspack/webpack config. Covers Expo, Expo Router, plain React Native CLI, and Re.Pack setups.
Incrementally upgrade React Native Storybook across the supported migration paths. Use when upgrading `@storybook/react-native` projects from 5.3.x to 6.5.x, 6.5.x to 7.6.x, 7.6.x to 8.3.x, 8.x to 9.x, or 9.x to 10.x. Detect the currently installed Storybook version, choose only the next migration step, update dependencies and config, regenerate `storybook.requires`, convert remaining `storiesOf` stories to CSF during the `6.5.x -> 7.6.x` upgrade, and stop after a single version hop instead of jumping multiple major versions at once.
Create and edit React Native Storybook stories using Component Story Format (CSF). Use when writing .stories.tsx files, adding stories to React Native components, configuring Storybook addons (controls, actions, backgrounds, notes), setting up argTypes, decorators, parameters, or working with portable stories for testing. Applies to any task involving @storybook/react-native story authoring.
Share bugs, ideas, or general feedback.
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge.
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge.
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
Build, preview, and test UI components with Storybook.
React Native & Expo development workflow: skills library for Claude Code with TDD, debugging, collaboration patterns, and proven techniques
Complete AI coding agent harness for React Native and Expo โ 13 agents, 22 commands, 7 skills, 10 MCP integrations, autonomous worker mode, visual debugging, smart routing
Editorial "Expo & React Native" bundle for Claude Code from Antigravity Awesome Skills.
Maestro E2E testing for React Native โ isolated screens, dev catalog, visual regression
React Native and Expo best practices for building performant mobile apps. Use when building React Native components, optimizing list performance, implementing animations, or working with native modules.
Build, preview, and test UI components with Storybook.
A new docs site is being built for Storybook for React Native, you can find it at https://storybookjs.github.io/react-native/docs/intro/.
[!IMPORTANT] This readme is for v10, for v9 docs see the v9.1 docs.
With Storybook for React Native you can design and develop individual React Native components without running your app.
If you are migrating from 9 to 10 you can find the migration guide here
For more information about storybook visit: storybook.js.org
[!NOTE] Make sure you align your storybook dependencies to the same major version or you will see broken behaviour.
There is some project boilerplate with @storybook/react-native and @storybook/addon-react-native-web both already configured with a simple example.
For Expo you can use this template with the following command
# With NPM
npx create-expo-app --template expo-template-storybook AwesomeStorybook
For React Native CLI you can use this template
npx @react-native-community/cli init MyApp --template react-native-template-storybook
Run init to setup your project with all the dependencies and configuration files:
npm create storybook@latest
Then wrap your bundler config with the withStorybook function. It auto-detects Metro vs Re.Pack and handles everything โ entry-point swapping, story generation, and optional WebSocket setup.
// metro.config.js
const { getDefaultConfig } = require('expo/metro-config');
const { withStorybook } = require('@storybook/react-native/withStorybook');
const config = getDefaultConfig(__dirname);
module.exports = withStorybook(config);
No changes to App.tsx are needed. Set STORYBOOK_ENABLED=true and run:
STORYBOOK_ENABLED=true expo start
The wrapper automatically swaps your app's entry point with Storybook's entry point. When the variable is not set, your app runs normally with zero Storybook code in the bundle.
If you want to add everything yourself check out the manual setup guide.
Make sure you have react-native-reanimated in your project and the plugin setup in your babel config.
// babel.config.js
plugins: ['react-native-reanimated/plugin'],
For projects using Re.Pack (Rspack/Webpack) instead of Metro, see the full Re.Pack Setup guide. You can also reference the RepackStorybookStarter project.
For Expo Router projects, you can either use entry-point swapping (recommended) or create a dedicated Storybook route.
See the full Expo Router Setup guide for details.
In Storybook we use a syntax called CSF that looks like this:
import type { Meta, StoryObj } from '@storybook/react-native';
import { MyButton } from './Button';
const meta = {
component: MyButton,
} satisfies Meta<typeof MyButton>;
export default meta;
type Story = StoryObj<typeof meta>;
export const Basic: Story = {
args: {
text: 'Hello World',
color: 'purple',
},
};
You should configure the path to your story files in the main.ts config file from the .rnstorybook folder.
// .rnstorybook/main.ts
import type { StorybookConfig } from '@storybook/react-native';
const main: StorybookConfig = {
stories: ['../components/**/*.stories.?(ts|tsx|js|jsx)'],
deviceAddons: ['@storybook/addon-ondevice-controls', '@storybook/addon-ondevice-actions'],
};
export default main;
For stories you can add decorators and parameters on the default export or on a specific story.
import type { Meta } from '@storybook/react';
import { Button } from './Button';