setup-react-native-storybook▌
storybookjs/react-native · updated Apr 8, 2026
Add @storybook/react-native v10 to a React Native project.
React Native Storybook Setup
Add @storybook/react-native v10 to a React Native project.
Important: Detect the project's package manager (look for yarn.lock, pnpm-lock.yaml, or bun.lockb) and use it for all install/run commands instead of npm. The examples below use npm but substitute accordingly (e.g. yarn add instead of npm install, yarn storybook instead of npm run storybook). For Expo projects, use npx expo install (or bunx expo install, etc.) to install dependencies so Expo can resolve compatible versions.
For the init command, use <pm> create storybook with the flags shown below. Only npm needs -- before the flags. Never use npx/bunx etc for this.
Four setup flows based on project type:
- Expo (no router) - see references/expo-setup.md
- Expo with Expo Router - see references/expo-router-setup.md
- React Native CLI (no Expo) - see references/react-native-cli-setup.md
- Re.Pack (rspack/webpack) - see references/repack-setup.md
Flow Selection
- Project has
rspack.configorwebpack.configand uses@callstack/repack-> Re.Pack - Project has
app/directory with_layout.tsxand usesexpo-router-> Expo Router - Project uses Expo but not file-based routing -> Expo
- Project uses
@react-native-community/cliwith no Expo -> React Native CLI
Common Steps (all flows)
1. Run CLI Init
npm create storybook -- --type react_native --yes
# or: pnpm create storybook --type react_native --yes
# or: bun create storybook --type react_native --yes
This installs dependencies and creates .rnstorybook/ with main.ts, preview.tsx, and index.tsx.
2. Enable WebSockets in .rnstorybook/index.tsx
Update the generated .rnstorybook/index.tsx to enable WebSocket support. This is required for remote control and syncing with the Storybook web companion:
// .rnstorybook/index.tsx
import AsyncStorage from '@react-native-async-storage/async-storage';
import { view } from './storybook.requires';
const StorybookUIRoot = view.getStorybookUI({
storage: {
getItem: AsyncStorage.getItem,
setItem: AsyncStorage.setItem,
},
enableWebsockets: true,
});
export default StorybookUIRoot;
If the project doesn't have @react-native-async-storage/async-storage, install it:
npm install @react-native-async-storage/async-storage
3. Update Story Globs in main.ts
The CLI generates a default stories glob in .rnstorybook/main.ts. Keep the existing glob and add an additional entry pointing to where UI components actually live in the project. Look for directories like components/, src/components/, src/, ui/, etc.:
// .rnstorybook/main.ts
const main: StorybookConfig = {
stories: [
'./stories/**/*.stories.?(ts|tsx|js|jsx)', // example stories from init
'../src/components/**/*.stories.?(ts|tsx|js|jsx)', // add based on project structure
],
// ...
};
4. Configure Bundler
For Metro projects, wrap the metro config with withStorybook. For Re.Pack projects, add the StorybookPlugin to your rspack/webpack config. See the relevant reference file for details.
5. Create Entrypoint
How Storybook is rendered differs per flow - see the relevant reference file.
6. Run
npm run start
npm run ios # or npm run android
withStorybook Options (Metro)
module.exports = withStorybook(config, {
enabled: true, // Remove Storybook from bundle when false
configPath: './.rnstorybook', // Optional and redundant when using the default ./.rnstorybook folder
useJs: false, // Generate .js instead of .ts
docTools: true, // Auto arg extraction
liteMode: false, // Mock default UI deps (use with react-native-ui-lite)
websockets: { port: 7007, host: 'localhost' }, // Remote control
});
StorybookPlugin Options (Re.Pack)
new StorybookPlugin({
enabled: true, // Strip Storybook from bundle when false
configPath: './.rnstorybook', // Optional and redundant when using the default ./.rnstorybook folder
useJs: false, // Generate .js instead of .ts
docTools: true, // Auto arg extraction
liteMode: false, // Mock default UI deps (use with react-native-ui-lite)
websockets: 'auto', // 'auto' detects LAN IP, or { port: 7007, host: 'localhost' }
});
Discussion
Product Hunt–style comments (not star reviews)- No comments yet — start the thread.
Ratings
4.6★★★★★45 reviews- ★★★★★Pratham Ware· Dec 28, 2024
I recommend setup-react-native-storybook for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
- ★★★★★Ira Johnson· Dec 28, 2024
Solid pick for teams standardizing on skills: setup-react-native-storybook is focused, and the summary matches what you get after install.
- ★★★★★Sakura Diallo· Dec 20, 2024
Keeps context tight: setup-react-native-storybook is the kind of skill you can hand to a new teammate without a long onboarding doc.
- ★★★★★Noor Nasser· Dec 4, 2024
setup-react-native-storybook is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
- ★★★★★Yuki Srinivasan· Nov 27, 2024
Registry listing for setup-react-native-storybook matched our evaluation — installs cleanly and behaves as described in the markdown.
- ★★★★★Liam Taylor· Nov 23, 2024
Solid pick for teams standardizing on skills: setup-react-native-storybook is focused, and the summary matches what you get after install.
- ★★★★★Sakshi Patil· Nov 19, 2024
Useful defaults in setup-react-native-storybook — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
- ★★★★★Ren Bhatia· Nov 19, 2024
setup-react-native-storybook is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
- ★★★★★Liam Abebe· Oct 18, 2024
Keeps context tight: setup-react-native-storybook is the kind of skill you can hand to a new teammate without a long onboarding doc.
- ★★★★★Yuki Malhotra· Oct 14, 2024
We added setup-react-native-storybook from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
showing 1-10 of 45