A look at storybookjs/react-native: 1.3k stars on GitHub, written primarily in TypeScript, tracked under the Frontend category. ๐ Storybook for React Native!
Snapshot summary built from the project's own GitHub metadata โ there's no written TopGit review yet. The page will update automatically when a full review is published.
WHY NO REVIEW YET
TopGit writes full reviews for the most-starred, most-requested repositories. This page is a snapshot until then โ see the READ ME tab for the original README in full.
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.
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.
Reanimated setup
Make sure you have react-native-reanimated in your project and the plugin setup in your babel config.
For projects using Re.Pack (Rspack/Webpack) instead of Metro, see the full Re.Pack Setup guide. You can also reference the RepackStorybookStarter project.
Expo router specific setup
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.
Writing stories
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.
The cli will install some basic addons for you such as controls and actions.
Ondevice addons are addons that can render with the device ui that you see on the phone.
Currently, the addons available are:
@storybook/addon-ondevice-controls: adjust your components props in realtime
@storybook/addon-ondevice-actions: mock onPress calls with actions that will log information in the actions tab
@storybook/addon-ondevice-notes: Add some Markdown to your stories to help document their usage
@storybook/addon-ondevice-backgrounds: change the background of storybook to compare the look of your component against different backgrounds
Install each one you want to use and add them to the deviceAddons list in your main.ts:
// .rnstorybook/main.ts
import type { StorybookConfig } from '@storybook/react-native';
const main: StorybookConfig = {
// ... rest of config
deviceAddons: [
'@storybook/addon-ondevice-notes',
'@storybook/addon-ondevice-controls',
'@storybook/addon-ondevice-backgrounds',
'@storybook/addon-ondevice-actions',
],
};
export default main;
[!NOTE]
deviceAddons ensures on-device addons are only loaded at runtime on the device, avoiding errors during server-side operations. .rnstorybook does not read addons.
Using the addons in your story
For details of each ondevice addon you can see the readme:
actions
backgrounds
controls
notes
Hide/Show storybook
Starting with v10.4, entry-point swapping is the default setup. Your existing in-app integration setup continues to work and is fully supported, but entry-point swapping is the recommended approach for new projects.
Entry-point swapping (recommended, v10.4+)
When using the bundler-agnostic withStorybook wrapper, set STORYBOOK_ENABLED=true to run Storybook. The wrapper swaps your app's entry point with Storybook's entry point automatically. When the variable is not set, your app runs normally with zero Storybook code in the bundle.
// app/storybook.tsx
export { default } from '../.rnstorybook';
Then navigate to /storybook in your app to view stories.
In-app integration (fully supported)
You can also import Storybook directly in your App.tsx. This approach continues to work and is fully supported:
import StorybookUI from './.rnstorybook';
import { MyApp } from './MyApp';
const isStorybook = process.env.EXPO_PUBLIC_STORYBOOK_ENABLED === 'true';
export default function App() {
return isStorybook ? <StorybookUI /> : <MyApp />;
}
withStorybook wrapper
withStorybook is a bundler-agnostic wrapper that configures your project for Storybook. It auto-detects whether you're using Metro or Re.Pack and handles entry-point swapping, story generation, and WebSocket setup.
The location of your Storybook configuration directory, which includes main.ts and other project-related files.
useJs
Type: boolean, default: false
Generates the .rnstorybook/storybook.requires file in JavaScript instead of TypeScript.
docTools
Type: boolean, default: true
Whether to include doc tools in the storybook.requires file. Doc tools provide additional documentation features and work with babel-plugin-react-docgen-typescript.
liteMode
Type: boolean, default: false
Whether to use lite mode for Storybook. In lite mode, the default Storybook UI is mocked out so you don't need to install all its dependencies like react-native-reanimated. This is useful for reducing bundle size and dependencies. Use this when using @storybook/react-native-ui-lite instead of @storybook/react-native-ui. Note: STORYBOOK_DISABLE_UI=true is equivalent to onDeviceUI: false, not liteMode: true.
experimental_mcp
Type: boolean, default: false
Enables an experimental MCP (Model Context Protocol) server for AI tooling to query Storybook documentation and component/story metadata.
The MCP server is available at the /mcp endpoint on the Storybook channel server. Configure your MCP client via its settings UI, or use:
If specified, create a WebSocket server on startup. This allows you to sync up multiple devices to show the same story and arg values connected to the story in the UI.
Use 'auto' to automatically detect your LAN IP and inject host/port into the generated storybook.requires file. WebSocket settings can also be overridden via STORYBOOK_WS_HOST, STORYBOOK_WS_PORT, and STORYBOOK_WS_SECURED environment variables.
Note: A Metro-specific withStorybook is also available at @storybook/react-native/metro/withStorybook for advanced Metro configuration. See the Metro Configuration docs for details.
getStorybookUI options
You can pass these parameters to getStorybookUI call in your storybook entry point:
Note: WebSocket options (enableWebsockets, host, port, secured) are auto-injected when using the bundler-agnostic withStorybook wrapper. You only need to set them manually if you're using the Metro-specific wrapper or a custom setup.
Feature Flags
Feature flags let you opt into new functionality without breaking existing behavior. In the next major version, the behavior behind these flags will become the default and the flags will no longer be needed.
New backgrounds API with globals-based configuration, full-screen support, and no extra package needed. Available from v10.3.
For full documentation including configuration examples, see the Feature Flags guide.
Using stories in unit tests
Storybook provides testing utilities that allow you to reuse your stories in external test environments, such as Jest. This way you can write unit tests easier and reuse the setup which is already done in Storybook, but in your unit tests. You can find more information about it in the portable stories section.
Contributing
We welcome contributions to Storybook!
๐ฅ Pull requests and ๐ Stars are always welcome.
Read our contributing guide to get started,
or find us on Discord and look for the react-native channel.
Looking for a first issue to tackle?
We tag issues with Good First Issue when we think they are well suited for people who are new to the codebase or OSS in general.
Talk to us, we'll find something to suits your skills and learning interest.
Examples
Here are some example projects to help you get started
A mono repo setup by @axeldelafosse https://github.com/axeldelafosse/storybook-rnw-monorepo
Want to showcase your own project? open a PR and add it to the list!
Agent skills
This repo includes agent skills for setting up and working with Storybook for React Native.
Skills
writing-react-native-storybook-stories - Guides Claude on writing stories using Component Story Format (CSF), including controls, addons, decorators, parameters, and portable stories
setup-react-native-storybook - Guides Claude through adding Storybook to your project, covering Expo, Expo Router, React Native CLI, and Re.Pack setups
upgrading-react-native-storybook - Guides Claude through incremental React Native Storybook upgrades, split by supported migration paths from 5.3.x through 10.x, including converting remaining storiesOf stories to CSF during the 6.5.x to 7.6.x migration
Installation
Any AI agent or IDE (universal)
npx skills add storybookjs/react-native
This works with any agent harness that supports skills (Claude Code, Cursor, Windsurf, etc.).
How active is development on storybookjs/react-native?
The most recent commit recorded on storybookjs/react-native was 3 days ago, based on the GitHub push timestamp. The repository has 187 forks โ one of the better signals of community interest.
How many stars does storybookjs/react-native have?
storybookjs/react-native has 1.3k GitHub stars โ refresh the page for the live number, or check github.com/storybookjs/react-native. TopGit mirrors GitHub's count but does not claim minute-by-minute accuracy.
What else is in the Frontend space?
storybookjs/react-native is tracked by TopGit under the Frontend category, alongside 4 GitHub-tagged topics. Trending and Topics pages list peer repositories of comparable stars and language.
What language is storybookjs/react-native written in?
storybookjs/react-native is written primarily in TypeScript. GitHub's language field is based on the largest share of bytes in the default branch.
What topics is storybookjs/react-native associated with?
GitHub's repository topics for storybookjs/react-native: "expo", "react", "react-native", "storybook". TopGit's editorial category is Frontend.
Where do I read more about storybookjs/react-native?
This TopGit page is a snapshot โ the READ ME tab shows the project's own README content (links stripped, images preserved). The GitHub repository at github.com/storybookjs/react-native is the definitive source.
Why is storybookjs/react-native categorized under Frontend?
TopGit places storybookjs/react-native in the Frontend category based on its GitHub topics and description (tagged: "expo", "react", "react-native"). Categories are assigned from real repository metadata, not editorial guesswork.
Read full README in the tab above.
Is react-native worth your time?
ChatGPT, Claude and Perplexity can all read this page. Ask one of them what it makes of react-native.