# Extension points — storybookjs/storybook

> Canonical page: https://codevetter.com/unpack/storybook/extension-points

# Extension points — storybookjs/storybook

Scanned commit dc9b30e8fd8a71383ec01b9510f38bee51457e8a (2026-10-02). Generated by codevetter codevetter 1.15.0 on 2026-10-02.

Source inspection; upstream code and tests were not executed.

Storybook exposes extension seams at configuration presets, builders, renderers, manager addons, story indexers, and schema-driven services. Agent transports share registered toolsets instead of independently implementing operations. Registration and initialization conditions are part of those contracts. New integrations should preserve runtime ownership and use the existing hooks appropriate to their boundary.
- Framework presets connect a builder and renderer through core and can alter bundler configuration through viteFinal; React-Vite uses this hook for conditional docgen plugins. — [code/frameworks/react-vite/src/preset.ts#L5-L17](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/frameworks/react-vite/src/preset.ts#L5-L17) [code/frameworks/react-vite/src/preset.ts#L35-L57](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/frameworks/react-vite/src/preset.ts#L35-L57)
- Builders provide start/build/bail and optional changeDetectionAdapter implementations; builder-vite supplies live and headless change-detection adapters depending on server/options availability. — [code/builders/builder-vite/src/index.ts#L39-L62](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/builders/builder-vite/src/index.ts#L39-L62) [code/builders/builder-vite/src/index.ts#L65-L91](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/builders/builder-vite/src/index.ts#L65-L91)
- Renderer renderToCanvas receives RenderContext and a canvas element and returns cleanup; the React implementation supplies framework-specific mounting, error boundaries, and remount behavior. — [code/renderers/react/src/renderToCanvas.tsx#L69-L109](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/renderers/react/src/renderToCanvas.tsx#L69-L109) [code/renderers/react/src/renderToCanvas.tsx#L115-L135](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/renderers/react/src/renderToCanvas.tsx#L115-L135)
- Server extensions can use options.extendServer, project middleware, and experimental_devServer preset hooks; those hooks run before preview builder startup. — [code/core/src/core-server/dev-server.ts#L64-L65](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/core-server/dev-server.ts#L64-L65) [code/core/src/core-server/dev-server.ts#L88-L104](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/core-server/dev-server.ts#L88-L104) [code/core/src/core-server/dev-server.ts#L129-L137](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/core-server/dev-server.ts#L129-L137)
- Custom story indexers provide a test matcher and createIndex(file, { makeTitle }); extractStories fails explicitly when no indexer matches. — [code/core/src/core-server/utils/StoryIndexGenerator.ts#L400-L422](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/core-server/utils/StoryIndexGenerator.ts#L400-L422)
- Manager addons register loader callbacks and add typed elements through AddonStore; Controls demonstrates a feature-gated PANEL registration with a rendered ControlsPanel. — [code/core/src/manager-api/lib/addons.ts#L100-L110](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/manager-api/lib/addons.ts#L100-L110) [code/core/src/manager-api/lib/addons.ts#L126-L137](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/manager-api/lib/addons.ts#L126-L137) [code/core/src/controls/manager.tsx#L120-L138](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/controls/manager.tsx#L120-L138)
- defineService supports initial state, queries, and commands with schema validation; server registration is a relay hub, and load-enabled queries can provide staticInputs/staticPath for snapshot generation. — [code/core/src/shared/open-service/README.md#L3-L12](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/shared/open-service/README.md#L3-L12) [code/core/src/shared/open-service/README.md#L92-L102](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/shared/open-service/README.md#L92-L102) [code/core/src/shared/open-service/server.ts#L40-L53](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/shared/open-service/server.ts#L40-L53) [code/core/src/shared/open-service/server.ts#L70-L100](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/shared/open-service/server.ts#L70-L100)
- Toolsets define schemas and one handler returning data/Markdown outcomes; registerToolset uses a realm-global map and rejects duplicate IDs or derived transport-name collisions, while addon-vitest registers its toolset and responder together. — [code/core/src/shared/open-service/README.md#L104-L132](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/shared/open-service/README.md#L104-L132) [code/core/src/shared/open-service/toolset-registry.ts#L30-L74](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/shared/open-service/toolset-registry.ts#L30-L74) [code/core/src/shared/open-service/toolset-registry.ts#L88-L98](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/shared/open-service/toolset-registry.ts#L88-L98) [code/addons/vitest/src/preset.ts#L68-L82](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/addons/vitest/src/preset.ts#L68-L82)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
