SE

setup-react-native-storybook

Automates the initialization and configuration of Storybook within React Native projects.

Install

mkdir -p .claude/skills/setup-react-native-storybook && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/4646" && unzip -o skill.zip -d .claude/skills/setup-react-native-storybook && rm skill.zip

Installs to .claude/skills/setup-react-native-storybook

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Set 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.
420 chars✓ has a “when” triggerlonger than Claude Code's old 250-char listing cap (fine on current versions)
Intermediate

Key capabilities

  • Install Storybook dependencies
  • Configure metro.config for Storybook integration
  • Initialize project-specific story configuration
  • Route story files correctly in Expo/React Native

How it works

Determines project architecture and injects the appropriate Storybook initialization logic and configuration files.

Inputs & outputs

You give it
Project type (Expo, RN CLI, Re.Pack)
You get back
Configured Storybook environment

When to use setup-react-native-storybook

  • Add Storybook to an Expo project
  • Configure Storybook with Expo Router
  • Setup Re.Pack with Storybook
  • Initialize Storybook in React Native CLI

About this skill

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:

  1. Expo (no router) - see references/expo-setup.md
  2. Expo with Expo Router - see references/expo-router-setup.md
  3. React Native CLI (no Expo) - see references/react-native-cli-setup.md
  4. Re.Pack (rspack/webpack) - see references/repack-setup.md

Flow Selection

  • Project has rspack.config or webpack.config and uses @callstack/repack -> Re.Pack
  • Project has app/ directory with _layout.tsx and uses expo-router -> Expo Router
  • Project uses Expo but not file-based routing -> Expo
  • Project uses @react-native-community/cli with 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' }
});

When not to use it

  • Pure web-only projects
  • Projects without a UI component structure

Prerequisites

Existing React Native or Expo projectNPM/Yarn/PNPM package manager

Limitations

  • Requires consistent project structure to function
  • Might conflict with highly custom metro build configs

How it compares

Automates framework-specific setup paths for Storybook, preventing manual configuration errors in React Native build files.

Compared to similar skills

setup-react-native-storybook side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
setup-react-native-storybook (this skill)13moReviewIntermediate
frontend-mobile-development-component-scaffold14moNo flagsIntermediate
react-native-architecture552moReviewAdvanced
claude-mobile-ios-testing189moNo flagsIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

You might also like

frontend-mobile-development-component-scaffold

sickn33

You are a React component architecture expert specializing in scaffolding production-ready, accessible, and performant components. Generate complete component implementations with TypeScript, tests, s

12

react-native-architecture

wshobson

Build production React Native apps with Expo, navigation, native modules, offline sync, and cross-platform patterns. Use when developing mobile apps, implementing native integrations, or architecting React Native projects.

55109

claude-mobile-ios-testing

krzemienski

Use when testing iOS apps on simulator, capturing screenshots for validation gates, automating UI testing with expo-mcp and xc-mcp, or verifying visual correctness - combines expo-mcp autonomous testing (React Native level) with xc-mcp simulator management (iOS level)

18116

react-native-design

wshobson

Master React Native styling, navigation, and Reanimated animations for cross-platform mobile development. Use when building React Native apps, implementing navigation patterns, or creating performant animations.

3385

tamagui

tamagui

Universal React UI framework for web and native. Use when building cross-platform apps with Tamagui, creating styled components with `styled()`, configuring design tokens/themes, using Tamagui UI components, or working with animations. Triggers: "tamagui", "styled()", "$token", "XStack/YStack", "useTheme", "@tamagui/*" imports, "createStyledContext", "variants".

2478

swiftui-liquid-glass

Dimillian

Implement, review, or improve SwiftUI features using the iOS 26+ Liquid Glass API. Use when asked to adopt Liquid Glass in new SwiftUI UI, refactor an existing feature to Liquid Glass, or review Liquid Glass usage for correctness, performance, and design alignment.

1567

Search skills

Search the agent skills registry