Skip to content

feat:unified withStorybook wrapper for entrypoint-swapping#871

Merged
ndelangen merged 78 commits into
nextfrom
copilot/add-entry-point-swapping-storybook
May 5, 2026
Merged

feat:unified withStorybook wrapper for entrypoint-swapping#871
ndelangen merged 78 commits into
nextfrom
copilot/add-entry-point-swapping-storybook

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 1, 2026

Tracked by storybookjs/storybook#34276 ("Easy React Native Setup")
Companion PR: storybookjs/storybook#34333 (CLI init overhaul, codemods, automigrations)
Closes #873 (deviceAddons)
Documentation PR: storybookjs/react-native#877

What this does

This PR adds a bundler-agnostic withStorybook wrapper at @storybook/react-native/withStorybook that introduces entry-point swapping as the new recommended way to run Storybook for React Native — matching the mental model of Storybook for Web, where Storybook runs as its own entry point rather than being deeply integrated into the user's app.

It also introduces the deviceAddons config property, separating on-device addons from the addons array to prevent CriticalPresetLoadError during server-side operations like extract.

Entry-point swapping

The new withStorybook wrapper:

  • Auto-detects whether the project uses Metro or Re.Pack and delegates accordingly.
  • Swaps the app entry point for .rnstorybook/index when STORYBOOK_ENABLED=true is set — no changes to App.tsx required.
  • Is a strict no-op when STORYBOOK_ENABLED is not set — zero Storybook code in the production bundle.
  • Reads configuration from environment variables (STORYBOOK_ENABLED, STORYBOOK_WS_HOST, STORYBOOK_WS_PORT, STORYBOOK_WS_SECURED, STORYBOOK_SERVER, STORYBOOK_DISABLE_UI), so the same metro config works for all environments.
  • Auto-injects WebSocket host/port into the generated storybook.requires file, eliminating the need to manually match config between withStorybook and getStorybookUI.

The existing ./metro/withStorybook and ./repack/withStorybook exports are completely untouched and remain fully supported for projects using the in-app integration approach.

deviceAddons

On-device addons (like @storybook/addon-ondevice-controls) contain React Native code that can't be evaluated in Node.js. When listed in addons, Storybook Core tries to load them as presets during operations like extract, which fails. The new deviceAddons property ensures they're only loaded at runtime on the device.

const main: StorybookConfig = {
  stories: ['../components/**/*.stories.?(ts|tsx|js|jsx)'],
  deviceAddons: [
    '@storybook/addon-ondevice-controls',
    '@storybook/addon-ondevice-actions',
  ],
};

Backwards compatible — addons still works and a console warning guides users to migrate. The companion PR (storybookjs/storybook#34333) includes an automigration (rn-ondevice-addons-to-device-addons) that handles this automatically via npx storybook automigrate.

How it works together

This PR (react-native repo) provides the runtime bundler wrapper. The companion PR (storybook repo) provides the CLI tooling:

Concern This PR storybookjs/storybook#34333
Bundler-agnostic withStorybook ✅ Implementation
Entry-point swapping ✅ Metro resolver + Re.Pack plugin
Env var support ✅ Runtime reading
deviceAddons type + runtime StorybookConfig type, generate.js
storybook init for RN ✅ Codemod, entrypoint generation, scripts
deviceAddons automigration rn-ondevice-addons-to-device-addons
Metro config codemod ✅ AST-based withStorybook() wrapping

Manual verification

Existing withStorybook (backwards compatibility)

Upgraded two existing projects to the canary release of this branch to verify the legacy ./metro/withStorybook path is unaffected:

  • React Native CLI project — upgraded to canary, confirmed existing setup works unchanged.
  • Expo project — upgraded to canary, confirmed existing setup works unchanged.

Both projects continued to function correctly with their existing metro config and in-app Storybook integration, confirming zero regressions.

npx storybook init CLI

Tested npx storybook@0.0.0-pr-34333-sha-865b50bc init in a fresh Expo project:

  • .rnstorybook/index.ts generated correctly.
  • metro.config.js wrapped with withStorybook() using the bundler-agnostic import.
  • storybook:ios and storybook:android scripts added to package.json.
  • ⚠️ The CLI currently pulls main.ts (and other templates) from the latest published version of @storybook/react-native, not from the canary. This means the generated main.ts won't have deviceAddons until this PR is released. This will resolve itself once we publish the minor release.

npx storybook automigrate

Verified that npx storybook@0.0.0-pr-34333-sha-865b50bc automigrate correctly moves on-device addons from addonsdeviceAddons in an existing project's .rnstorybook/main.ts.

Release plan

Targeting release as a new minor version this week (v10.4), alongside:

Test coverage

  • 39 tests in @storybook/react-native (unit tests for withStorybook, enhanceMetroConfig, enhanceRepackConfig, entry-point resolution, env var handling).
  • 14 tests in the tests package (story generation snapshots).
  • All passing ✅

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Apr 1, 2026

🦋 Changeset detected

Latest commit: 7960793

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 9 packages
Name Type
@storybook/react-native Minor
@storybook/react-native-ui Minor
@storybook/react-native-ui-lite Minor
@storybook/react-native-ui-common Minor
@storybook/react-native-theming Minor
@storybook/addon-ondevice-actions Minor
@storybook/addon-ondevice-backgrounds Minor
@storybook/addon-ondevice-controls Minor
@storybook/addon-ondevice-notes Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@ndelangen
Copy link
Copy Markdown
Member

@copilot, can you try again? It looks like you had some internal error.

Copilot AI and others added 2 commits April 1, 2026 10:39
…overrides to withStorybook

M4 implementation:
- Add resolveEntryPoint() to detect app entry (Expo, Expo Router, RN CLI)
- Add entry-point swapping in resolver when STORYBOOK_ENABLED=true
- Add websocket env variable overrides (STORYBOOK_WS_HOST/PORT/SECURED)
- Add comprehensive tests for all new functionality

Agent-Logs-Url: https://github.com/storybookjs/react-native/sessions/58a5fb17-1ee3-4e0b-ae60-aee474de2d32

Co-authored-by: ndelangen <3070389+ndelangen@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 1, 2026

@copilot, can you try again? It looks like you had some internal error.

Implemented M4 in commits a889fb4 and 537de98. The changes add:

  1. resolveEntryPoint() - detects app entry point for Expo (package.json#main), Expo Router (expo-router/entry), and RN CLI (index.js fallback)
  2. Entry-point swapping - when STORYBOOK_ENABLED=true, the Metro resolver redirects the app entry to .rnstorybook/index. Strict no-op when not set.
  3. Websocket env overrides - STORYBOOK_WS_HOST, STORYBOOK_WS_PORT, STORYBOOK_WS_SECURED environment variables
  4. 15 new tests covering all new functionality, all 33 tests passing

Copilot AI changed the title [WIP] Add entry point swapping for React Native Storybook feat: Add entry point swapping for React Native Storybook (M4) Apr 1, 2026
@ndelangen
Copy link
Copy Markdown
Member

@copilot Did you catch that we'd need backwards support?

I think it'd be best if we created 2 separate withStorybook config wrappers, so that 1 does entrypoint-swapping, and the other acts as the backwards support way.

Copilot AI and others added 2 commits April 1, 2026 13:04
- Restore withStorybook to original behavior (no entry-point swapping, no ws env overrides)
- Create withStorybookSwap with entry-point swapping + ws env overrides
- Export shared utilities (resolveEntryPoint, resolveFileWithExtensions, resolveStorybookEntry, applyWebsocketEnvOverrides) from withStorybook.ts
- Add metro/withStorybookSwap.js re-export and package.json export path
- Add withStorybookSwap to tsup build entries
- Tests: 33 passing across 5 suites

Agent-Logs-Url: https://github.com/storybookjs/react-native/sessions/a3213ee7-9a44-4b9a-a4b2-f434af51c3ce

Co-authored-by: ndelangen <3070389+ndelangen@users.noreply.github.com>
Copilot AI changed the title feat: Add entry point swapping for React Native Storybook (M4) feat: split withStorybook into backwards-compat and entry-swap wrappers Apr 1, 2026
@ndelangen
Copy link
Copy Markdown
Member

@copilot I'm aiming for the new config wrapper to be a single agnostic one, exposed as @storybook/react-native/withStorybook.

This exports a single named export (withStorybook) which should support both metro and repack.
This way SB init command doesn't need to know about this complaexity, and can always generate the same thing.

The types of this function should be like so:
function<T>: T

Though internally we should try to be somewhat type-safe, but externally it's not exposed.

Copilot AI and others added 2 commits April 2, 2026 08:07
…/withStorybook

Creates a bundler-agnostic withStorybook<T>(config: T, options?): T that
auto-detects Metro vs Repack and delegates accordingly:
- Metro: entry-point swapping + ws env overrides (via withStorybookSwap)
- Repack: adds StorybookPlugin with ws env overrides to plugins array

This allows sb init to always generate the same config regardless of bundler.

Agent-Logs-Url: https://github.com/storybookjs/react-native/sessions/e08bd14d-760c-471e-938c-e26d89e9ae9b

Co-authored-by: ndelangen <3070389+ndelangen@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 2, 2026

@copilot I'm aiming for the new config wrapper to be a single agnostic one, exposed as @storybook/react-native/withStorybook.

This exports a single named export (withStorybook) which should sup...

Added a unified withStorybook<T>(config: T, options?): T at @storybook/react-native/withStorybook in commit 7e754f5. It auto-detects Metro vs Repack from the config object (checks for transformer property) and delegates accordingly:

  • MetrowithStorybookSwap (entry-point swapping + ws env overrides)
  • Repack/Rspack/Webpack → adds StorybookPlugin to config.plugins with ws env overrides

Usage is identical regardless of bundler:

const { withStorybook } = require('@storybook/react-native/withStorybook');
module.exports = withStorybook(config);

The existing ./metro/withStorybook and ./repack/withStorybook exports remain for direct access.

@ndelangen
Copy link
Copy Markdown
Member

@copilot the previously existing ./metro/withStorybook and ./repack/withStorybook ARE the backwards support, and should remain completely untouched.

The @storybook/react-native/withStorybook should be the new entrypoint swapping config wrapper, can you check if that's what you did?

Copilot AI changed the title feat: split withStorybook into backwards-compat and entry-swap wrappers feat: add unified bundler-agnostic withStorybook wrapper Apr 2, 2026
Copy link
Copy Markdown
Member

@dannyhw dannyhw left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • I believe there is still some unresolved issue regarding resolving the expo router entry point in node_modules when node_modules is not in project root (monorepo), i believe we should solve this before moving forward.
  • When enabled is explicitly false, the new @storybook/react-native/withStorybook wrapper currently returns the original Metro config, so projects that still import .rnstorybook from their app entry keep rendering Storybook instead of being stubbed like the existing Metro wrapper does. I think it would still be useful to stub out storybook when its disabled in order to ensure its removed from the bundle.
  • theres not a easy way to try it in the example app still
  • lite mode should still be respected so that users can opt out of the full dependency list when using the lite-ui
  • repack config should done using a plugin not with a wrapper imho

Please add something along these lines would make the Expo example easy to exercise locally:

const useNewStorybookWrapper = process.env.EXPO_PUBLIC_STORYBOOK_NEW_WRAPPER === 'true';
const { withStorybook } = useNewStorybookWrapper
  ? require('@storybook/react-native/withStorybook')
  : require('@storybook/react-native/metro/withStorybook');
{
  "storybook:new-wrapper": "EXPO_PUBLIC_STORYBOOK_ENABLED=true EXPO_PUBLIC_STORYBOOK_NEW_WRAPPER=true expo start",
  "storybook:new-wrapper:disabled": "EXPO_PUBLIC_STORYBOOK_NEW_WRAPPER=true expo start"
}

For the implementation, the disabled Metro path could be closer to the existing metro/withStorybook behavior: if enabled was explicitly set false, wrap the Metro resolver so storybook/@storybook requests become empty modules and .rnstorybook/index.(ts|tsx|js|jsx) resolves to the stub. If there is no explicit enable signal at all, keep the current strict no-op behavior for the new wrapper.

For example, withStorybook could pass the existing enabled state into the Metro enhancer and let the enhancer apply the disabled resolver behavior when enabled === false:

const hasExplicitEnabled = process.env.STORYBOOK_ENABLED != null || options.enabled != null;
const enabled = envVariableToBoolean(process.env.STORYBOOK_ENABLED, options.enabled ?? false);

if (!enabled && !hasExplicitEnabled) {
  return config;
}

if (isMetroConfig(config)) {
  return enhanceMetroConfig(config, { enabled, configPath });
}

Then the enhancer can branch on enabled === false while preserving its current swap behavior:

export function enhanceMetroConfig(config: MetroConfig, options: EnhanceMetroOptions = {}) {
  const { swap, enabled = true, configPath } = options;
  const shouldStubStorybook = enabled === false;
  const normalizedConfigPath = configPath ? path.resolve(configPath) : undefined;
  const stubPath = path.resolve(
    __dirname,
    __dirname.includes(path.sep + 'src') ? './stub.tsx' : './stub.js'
  );

  return {
    ...config,
    resolver: {
      ...config.resolver,
      resolveRequest: (context, moduleName, platform) => {
        const resolveFunction = config.resolver?.resolveRequest ?? context.resolveRequest;

        if (shouldStubStorybook && (moduleName.startsWith('storybook') || moduleName.startsWith('@storybook'))) {
          return { type: 'empty' };
        }

        if (platform !== 'web' && (moduleName === 'tty' || moduleName === 'os')) {
          return { type: 'empty' };
        }

        const resolved = resolveFunction(context, moduleName, platform);

        if (shouldStubStorybook && resolved.filePath && normalizedConfigPath) {
          const resolvedFilePath = path.resolve(resolved.filePath);
          const isConfigIndex = ['index.ts', 'index.tsx', 'index.js', 'index.jsx'].some(
            (file) => resolvedFilePath === path.join(normalizedConfigPath, file)
          );

          if (isConfigIndex) {
            return { filePath: stubPath, type: 'sourceFile' };
          }

          if (resolvedFilePath.startsWith(normalizedConfigPath + path.sep)) {
            return { type: 'empty' };
          }
        }

        return resolved;
      },
    },
  };
}

Comment thread packages/react-native/src/enhanceRepackConfig.ts
@dannyhw
Copy link
Copy Markdown
Member

dannyhw commented Apr 24, 2026

after thinking it through I'm not sure a unified wrapper is the right direction since repack is quite different, repack builds on webpack/rspack and uses plugins for extended behaviour, we only wrap metro config because of its lacking support for plugins or other ways to extend metro behaviour.

it would likely be better to just extract reusable code and provide a repack plugin like we currently do but updated for the expected new flow (or exclude it entirely from this initial version)

- Replaced multiple checks for different main config file types (main.ts, main.js, main.cjs) with a single call to getInterpretedFile, simplifying the logic and improving maintainability.
- Updated error handling to provide clearer feedback when the main config file is not found.
- Deleted the ws-smoke-server.mjs script as it was no longer needed.
- Removed the corresponding entry from package.json to streamline the configuration.
- Updated the View constructor to default the options parameter to an empty object if not provided, ensuring better handling of undefined values.
- Modified the onDeviceUI assignment to use optional chaining for improved safety when accessing properties on the options object.
- Introduced a new optional `liteMode` parameter to both enhanceMetroConfig and enhanceRepackConfig, allowing the removal of the default Storybook UI from the bundle.
- Updated the withStorybook function to pass the liteMode option, ensuring consistent behavior across configurations.
- Enhanced the logic to conditionally handle the presence of the liteMode option in both configurations.
…ts in storybook.requires.ts

- Added missing newlines at the end of package.json files in various directories to adhere to formatting standards.
- Cleaned up import statements in storybook.requires.ts for consistency and readability.
@ndelangen
Copy link
Copy Markdown
Member

@dannyhw considering how the new setup needs a differently formatted index.tsx file (a proper entrypoint) I figured it would be better to create a separate example.

@ndelangen ndelangen requested a review from dannyhw April 29, 2026 10:01
@dannyhw
Copy link
Copy Markdown
Member

dannyhw commented Apr 29, 2026

sounds like a good choice, thanks for that. I will take a look soon.

Comment thread packages/react-native/scripts/generate.js
Comment thread packages/react-native/scripts/generate.js
@dannyhw
Copy link
Copy Markdown
Member

dannyhw commented May 2, 2026

Its really nice to have the entrypoint just magically swap, can't wait to see it with the new init changes too

…877)

* feat: update documentation for entry-point swapping and deviceAddons

- Added a note in MANUAL_SETUP.md to clarify that the guide is for v8 and provided a link to v10 setup instructions.
- Enhanced MIGRATION.md with detailed steps for migrating to the new `deviceAddons` property and entry-point swapping introduced in v10.4.
- Updated README.md to reflect changes in bundler configuration and removed outdated instructions regarding app entry point modifications.
- Revised various documentation files to emphasize the use of `deviceAddons` for on-device addons and the benefits of the bundler-agnostic `withStorybook` wrapper.

All documentation updates aim to improve clarity and guide users through the new setup processes effectively.

* refactor: streamline documentation and code for deviceAddons

- Consolidated the representation of `deviceAddons` in various configuration files, ensuring consistency across `MIGRATION.md`, `README.md`, and setup guides.
- Removed unnecessary line breaks for improved readability in code examples.
- Added clarifying notes in documentation regarding the use of `deviceAddons` for on-device addons, enhancing user understanding of the new setup.

These changes aim to provide clearer guidance and a more cohesive experience for users transitioning to the updated configuration.

* docs: remove STORYBOOK_WS_HOST=auto usage from env var examples

Agent-Logs-Url: https://github.com/storybookjs/react-native/sessions/d3d2217a-7248-48a9-a110-5fe72bae5bf2

Co-authored-by: ndelangen <3070389+ndelangen@users.noreply.github.com>

* docs: update Expo Router setup for Storybook integration

- Revised the guide to clarify the setup of Storybook as a route within an Expo Router app, emphasizing the benefits of entry-point swapping.
- Updated Metro configuration instructions to use the Metro-specific `withStorybook` wrapper, ensuring proper integration without entry-point swapping.
- Enhanced navigation setup details for accessing Storybook within the app, including recommendations for disabling headers for a better user experience.
- Added tips and warnings to guide users on the preferred setup methods and potential pitfalls.

These changes aim to improve clarity and usability for developers integrating Storybook with Expo Router.

* docs: revise Re.Pack setup guide for Storybook integration

- Updated the Re.Pack setup documentation to clarify the differences when using Rspack/Webpack instead of Metro, emphasizing the bundler-agnostic `withStorybook` wrapper.
- Streamlined installation instructions and entry-point swapping details, ensuring users understand the necessary configurations for Rspack.
- Added warnings regarding the `enablePackageExports` requirement for proper package resolution and clarified the in-app integration process using the `StorybookPlugin`.

These changes aim to enhance clarity and usability for developers integrating Storybook with Re.Pack projects.

* docs: update entry-point swapping instructions for Storybook integration

- Revised the documentation to clarify that `.rnstorybook/index.tsx` must register a root component when Storybook is enabled.
- Added detailed code examples for setting up the entry point correctly, ensuring users understand the necessary changes.
- Updated subsequent steps to reflect the new structure and improved clarity on managing on-device addons and script updates.

These changes aim to enhance the user experience and provide clear guidance for developers integrating Storybook with their applications.

* docs: refine Metro configuration documentation for Storybook integration

- Updated the documentation to clarify the use of the bundler-agnostic `withStorybook` wrapper as the recommended approach for new projects.
- Enhanced the explanation of configuration options, including environment variables and their precedence over wrapper options.
- Streamlined the sections on basic usage and options for both the bundler-agnostic and Metro-specific wrappers, improving clarity and usability for developers.

These changes aim to provide clearer guidance for integrating Storybook with Metro projects.

* docs: enhance Storybook UI configuration documentation

- Removed redundant export statements for `StorybookUIRoot` across multiple sections to streamline the code examples.
- Updated the WebSocket options section to clarify the auto-injection of settings when using the `withStorybook` wrapper.
- Added a new subsection for testing setup with WebSocket control, providing clearer instructions for users on configuring their environments.

These changes aim to improve clarity and usability for developers integrating Storybook with their applications.

* docs: clarify CLI configuration for Storybook integration

- Updated the CLI configuration documentation to emphasize that the `sb-rn-get-stories` command is only necessary for custom build pipelines without the `withStorybook` wrapper.
- Added a note highlighting that the `storybook.requires.ts` file is automatically generated when using the recommended setup, reducing the need for manual CLI commands.
- Streamlined sections on when the CLI is needed, improving clarity for users on integrating Storybook with their applications.

These changes aim to enhance user understanding and streamline the setup process for developers.

* docs: update documentation to reflect changes from addons to deviceAddons

- Replaced references to `addons` with `deviceAddons` across multiple documentation files, including setup guides and README files for on-device addons.
- Clarified instructions for integrating on-device addons in the Storybook configuration, ensuring consistency and accuracy in the setup process.
- Enhanced user understanding of the new configuration structure, promoting best practices for integrating Storybook with React Native applications.

These changes aim to improve clarity and usability for developers transitioning to the updated addon configuration.

* docs: update WebSocket configuration examples to TypeScript

- Changed code snippets in the WebSocket configuration documentation from JavaScript to TypeScript for consistency and clarity.
- Updated various sections to reflect the correct syntax and improve readability, ensuring users have accurate examples for integrating WebSocket with Storybook.
- Enhanced the overall documentation to better support developers using TypeScript in their projects.

These changes aim to improve the developer experience and provide clearer guidance for WebSocket integration in Storybook.

* docs: update backgrounds configuration instructions

- Clarified the process for regenerating the `storybook.requires.ts` file after modifying `main.ts`, emphasizing the automatic regeneration when using the `withStorybook` wrapper.
- Added a detailed note for users not utilizing the `withStorybook` wrapper, providing manual regeneration instructions.
- Improved overall clarity and usability of the documentation for configuring backgrounds in Storybook.

These changes aim to enhance the developer experience and ensure accurate guidance for background configuration.

* docs: update environment variable documentation for Storybook

- Changed code snippet formatting from `bash` to `sh` for consistency across environment variable examples.
- Ensured clarity in the usage of environment variables related to Storybook configuration, enhancing readability and usability for developers.
- Aimed to provide accurate and uniform documentation for setting up Storybook with various environment variables.

These changes improve the overall developer experience by standardizing code examples in the documentation.

* docs: standardize code snippet formatting to TypeScript

- Updated all code snippets in the documentation from `typescript` to `ts` for consistency across various files, including migration, development workflows, testing, and configuration sections.
- Enhanced readability and uniformity in the documentation, ensuring a better developer experience when referencing code examples.

These changes aim to improve clarity and maintain a consistent style throughout the documentation.

* docs: standardize code snippet formatting to shell

- Updated all code snippets in the documentation from `bash` to `sh` for consistency across various files, including setup guides, configuration, and usage instructions.
- Enhanced readability and uniformity in the documentation, ensuring a better developer experience when referencing code examples.

These changes aim to improve clarity and maintain a consistent style throughout the documentation.

* copy edits

* Update section title and clarify WebSocket testing setup

Clarified the section title and improved the explanation for the WebSocket-controlled testing setup.

* docs: update migration guide for Storybook version 10.4

- Revised the migration guide to reflect changes from version 10.3 to 10.4, including updates to the metro configuration and the introduction of entry-point swapping.
- Added instructions for migrating to the new `deviceAddons` property and clarified the process for updating Storybook dependencies.
- Enhanced clarity and usability of the documentation to support developers transitioning to the latest version of Storybook.

* docs: remove deprecated addons section from configuration documentation

- Eliminated the outdated `addons` section in the Storybook configuration documentation, focusing on the current `deviceAddons` usage.
- Streamlined the content to enhance clarity and ensure users are directed towards the correct configuration practices for on-device addons.
- Aimed to improve the overall documentation quality and developer experience by removing unnecessary information.

* docs: remove export statement for StorybookUIRoot in migration guide

- Eliminated the export statement for `StorybookUIRoot` in the migration guide to align with the updated configuration practices.
- This change simplifies the example and focuses on the registration of the component, enhancing clarity for developers migrating to entry-point swapping.

* docs: update withStorybook configuration in migration guide

- Enhanced the `withStorybook` export to include a configuration object, allowing for custom `configPath` and WebSocket settings.
- Improved clarity on the new configuration capabilities, emphasizing the automatic detection of Metro or Re.Pack usage.
- Aimed to streamline the migration process for developers transitioning to the latest Storybook practices.

* docs: remove empty line in migration guide for Storybook version updates

- Cleaned up the migration guide by removing an unnecessary empty line, improving the overall formatting and readability of the document.
- This minor edit contributes to a more polished presentation of the migration instructions for developers transitioning between Storybook versions.

* Apply suggestion from @ndelangen

* docs: add missing code block in repack documentation

- Included a missing code block in the repack documentation to enhance clarity and provide a complete example for users.
- This addition aims to improve the overall usability of the documentation for developers getting started with Re.Pack.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: winkerVSbecks <varunvachhar@gmail.com>
@ndelangen ndelangen merged commit 08f59a6 into next May 5, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Split addons from "ondevice" addons in main.ts

5 participants