Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
d4a5b4a
feat(viewport): add deprecation warning for `viewport.defaultViewport…
yatishgoel Jun 7, 2026
2824da8
Merge branch 'next' into fix/15923-viewport-defaultviewport-deprecation
Sidnioulz Jun 9, 2026
10f70a0
Docgen service: register runtime, payload argTypes, and bundler guard…
JReinhold Jun 9, 2026
64d84eb
Docs: route ArgTypes and Controls through docgen service when flag en…
JReinhold Jun 9, 2026
c1effd1
Merge branch 'next' into split/docgen-service-plumbing
JReinhold Jun 9, 2026
16ef4a8
Merge branch 'next' into split/docgen-ui-consumption
JReinhold Jun 9, 2026
e820d8e
simplify
JReinhold Jun 9, 2026
3db3de0
Docs: back useServiceDocgen with useSyncExternalStore
JReinhold Jun 9, 2026
8e95ab1
CI: Add missing changelog entry following CI failure
Sidnioulz Jun 10, 2026
bdfa809
Merge branch 'next' into split/docgen-ui-consumption
JReinhold Jun 10, 2026
6ca97fd
Merge branch 'next' into split/docgen-service-plumbing
JReinhold Jun 10, 2026
927cb8b
fix(docgen): remove duplicate DocgenService type alias
JReinhold Jun 10, 2026
0a3346f
feat(cli): add `storybook ai <tool>` MCP passthrough behind STORYBOOK…
kasperpeulen Jun 10, 2026
cce2a34
fix(cli): list available tools when addon-mcp reports unknown tool as…
kasperpeulen Jun 10, 2026
a8b028c
refactor(cli): address code-quality review findings for ai MCP passth…
kasperpeulen Jun 10, 2026
d052c4f
fix(react): serialize optional boolean props as boolean, not enum/other
JReinhold Jun 10, 2026
3c2dbda
feat(cli): align ai passthrough with current mcp-proxy and make --hel…
kasperpeulen Jun 10, 2026
aa205b2
Merge pull request #35122 from storybookjs/sidnioulz/fix-10-4-3-chang…
Sidnioulz Jun 10, 2026
bcfa9df
test(cli): adopt vi.mock spy mode and fix multi-line SSE test fixture
kasperpeulen Jun 10, 2026
7061daf
Merge branch 'next-release' into next
storybook-bot Jun 10, 2026
f989696
Merge branch 'next' into kasper/ai-cli-mcp-passthrough
kasperpeulen Jun 10, 2026
837b8a3
feat(cli): say 'commands' in all user-facing copy, keep MCP an implem…
kasperpeulen Jun 10, 2026
eeb0bba
Merge branch 'kasper/ai-cli-mcp-passthrough' of https://github.com/st…
kasperpeulen Jun 10, 2026
f35dc82
refactor(cli): validate instance records with valibot
kasperpeulen Jun 10, 2026
25ecf33
Rewrite config overrides in SvelteKit sandbox
Sidnioulz Jun 10, 2026
1198534
Separate Svelte from SvelteKit setup
Sidnioulz Jun 10, 2026
e2855ed
Format
Sidnioulz Jun 10, 2026
5728687
Remove pointless config in non-kit Svelte
Sidnioulz Jun 10, 2026
3984868
fix(cli): honor --port after the command name on the help path
kasperpeulen Jun 10, 2026
d28b6f3
feat(cli): accurate multi-instance and intercept notes in ai --help
kasperpeulen Jun 10, 2026
838d82b
feat(cli): show the Storybook version in the ai --help section
kasperpeulen Jun 10, 2026
67eda49
Refactor
Sidnioulz Jun 10, 2026
b95ab2d
Merge pull request #35127 from storybookjs/sidnioulz/fix-svelte-confi…
Sidnioulz Jun 10, 2026
fc950b4
Fix formatting
Sidnioulz Jun 10, 2026
100c277
Merge pull request #35129 from storybookjs/sidnioulz/format
Sidnioulz Jun 10, 2026
4402169
Merge remote-tracking branch 'origin/next' into kasper/ai-cli-mcp-pas…
kasperpeulen Jun 10, 2026
0e314d5
fix(cli): validate JSON-RPC payloads instead of trusting them
kasperpeulen Jun 10, 2026
dcbca39
fix(sandbox): resolve svelte config paths against the sandbox cwd
kasperpeulen Jun 10, 2026
d499509
refactor(cli): drop the version check — npx storybook always runs the…
kasperpeulen Jun 10, 2026
484b30b
refactor(cli): drop the installed-check probe too
kasperpeulen Jun 10, 2026
8d02690
Merge pull request #35130 from storybookjs/kasper/fix-svelte-sandbox-…
Sidnioulz Jun 10, 2026
13d2691
fix(sandbox): anchor vite config injection on the plugins key, not th…
kasperpeulen Jun 10, 2026
111b58c
Security: Fix zizmor workflow permissions
Sidnioulz Jun 10, 2026
a07a0d2
Merge pull request #35132 from storybookjs/kasper/fix-vite-config-plu…
Sidnioulz Jun 10, 2026
5a207e0
Merge remote-tracking branch 'origin/next' into kasper/ai-cli-mcp-pas…
kasperpeulen Jun 10, 2026
6f2f2f1
Security: Skip SARIF upload on pull_request events to fix 401 auth error
Copilot Jun 10, 2026
8392f36
Fix Copilot hallucinations
Sidnioulz Jun 11, 2026
4730339
Merge pull request #35125 from storybookjs/kasper/ai-cli-mcp-passthrough
kasperpeulen Jun 11, 2026
2706a74
Merge branch 'next' into sidnioulz/zizmor-perm-fix
Sidnioulz Jun 11, 2026
7dd35db
CI: Fix last unpinned action versions
Sidnioulz Jun 11, 2026
56fc4e2
Merge pull request #35133 from storybookjs/sidnioulz/zizmor-perm-fix
Sidnioulz Jun 11, 2026
5061f0e
feat(cli): telemetry for the storybook ai command passthrough
kasperpeulen Jun 11, 2026
104628e
fix(cli): report ai-command intercepts from cwds without a loadable m…
kasperpeulen Jun 11, 2026
da0e18e
Merge pull request #35137 from storybookjs/sidnioulz/fix-last-version…
Sidnioulz Jun 11, 2026
53452b2
docs(cli): state the one-shot MCP session design explicitly
kasperpeulen Jun 11, 2026
78f3d08
Merge pull request #35087 from yatishgoel/fix/15923-viewport-defaultv…
Sidnioulz Jun 11, 2026
b6ccd81
test(cli): use spy mocks for telemetry modules per repo convention
kasperpeulen Jun 11, 2026
d0486e6
fix(cli): resolve ai-command opt-out from the target Storybook, harde…
kasperpeulen Jun 11, 2026
43654d1
fix(telemetry): preserve state machine when the module loads more tha…
kasperpeulen Jun 11, 2026
135e436
Update CHANGELOG.md for v10.4.4 [skip ci]
storybook-bot Jun 11, 2026
7936b72
fix(cli): collect ai-command metadata from the target project, harden…
kasperpeulen Jun 11, 2026
9437e31
Mark module-graph engine commands as internal with _ prefix
cursoragent Jun 11, 2026
e8379ae
Merge branch 'next' into split/docgen-service-plumbing
JReinhold Jun 11, 2026
b6430f2
fix(docgen): keep build-time docgen injection in plumbing PR
JReinhold Jun 11, 2026
6e4e579
feat(docgen): disable build-time docgen injection when service is ena…
JReinhold Jun 11, 2026
3ec8aac
feat(cli): bundle the `ai` command in core so it never downloads @sto…
kasperpeulen Jun 11, 2026
c3d0be0
chore(scripts): point eval prompt-variant imports at the new core ai …
kasperpeulen Jun 11, 2026
e9f53d6
refactor(cli): resolve review findings — no cross-package source impo…
kasperpeulen Jun 11, 2026
6011786
chore: address codex review — fix stale eval README paths, drop dead …
kasperpeulen Jun 11, 2026
4294bd5
refactor(cli): single canonical getStorybookData, explicit workingDir…
kasperpeulen Jun 11, 2026
98c9bf8
test(cli): lock in workingDir-scoped language detection; tidy util re…
kasperpeulen Jun 11, 2026
ba60da1
ci: retrigger after auto-cancelled workflow race
kasperpeulen Jun 11, 2026
987c1c4
Merge pull request #35108 from storybookjs/split/docgen-service-plumbing
JReinhold Jun 12, 2026
93b8b74
Merge remote-tracking branch 'origin/next' into split/docgen-ui-consu…
JReinhold Jun 12, 2026
20c456f
chore: disable experimentalDocgenServer in internal Storybook
JReinhold Jun 12, 2026
b8fc9ef
fix(docgen-ui): resolve CI lint, snapshot, and story test failures
JReinhold Jun 12, 2026
208891a
fix(docgen-ui): address service controls review feedback
JReinhold Jun 12, 2026
ef57591
fix(controls): keep delayed object controls in rich mode
JReinhold Jun 12, 2026
6dd01f6
refactor(cli): carry tool error text as McpToolResultError cause, doc…
kasperpeulen Jun 12, 2026
3e8cde1
ci: retrigger after auto-cancelled workflow race
kasperpeulen Jun 12, 2026
e5d078d
ci: retrigger after auto-cancelled workflow race
kasperpeulen Jun 12, 2026
5a9480c
fix(controls): preserve rich object mode after delayed data
JReinhold Jun 12, 2026
19a3dfd
fix(controls): wait for prepared story and docgen before service table
JReinhold Jun 12, 2026
1de1a3d
Merge remote-tracking branch 'origin/kasper/ai-cli-telemetry' into ka…
kasperpeulen Jun 12, 2026
ec3c2b9
Merge pull request #35138 from storybookjs/kasper/ai-cli-telemetry
kasperpeulen Jun 12, 2026
65d5017
Merge branch 'next' into split/docgen-ui-consumption
JReinhold Jun 12, 2026
c7c43a0
fix(cli): anchor workingDir to the project root for --config-dir .
kasperpeulen Jun 12, 2026
6bc246f
Merge branch 'next' into kasper/ai-cli-bundled
kasperpeulen Jun 12, 2026
5f7ce83
ci: retrigger after onboarding-flow viewport flake
kasperpeulen Jun 12, 2026
131e18b
Merge pull request #35144 from storybookjs/jeppe-cursor/module-graph-…
JReinhold Jun 12, 2026
356d6d3
docs(agents): require running fmt:write after edits
JReinhold Jun 12, 2026
616e24f
fix(docgen-ui): preserve newlines in service-derived descriptions
JReinhold Jun 12, 2026
176296f
Merge branch 'next' into split/docgen-ui-consumption
JReinhold Jun 12, 2026
2a8f815
Merge pull request #35147 from storybookjs/kasper/ai-cli-bundled
kasperpeulen Jun 12, 2026
6ed38fc
refactor(telemetry): document load-bearing 'in' guard, type PAYLOAD_E…
kasperpeulen Jun 12, 2026
35ea567
Merge pull request #35140 from storybookjs/kasper/telemetry-global-st…
kasperpeulen Jun 12, 2026
3e9e4d6
refactor(docs): extract ControlsTables component from render helper
JReinhold Jun 13, 2026
9939968
Merge pull request #35109 from storybookjs/split/docgen-ui-consumption
JReinhold Jun 13, 2026
3abd22a
Write changelog for 10.5.0-alpha.7 [skip ci]
storybook-bot Jun 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/actions/setup-node-and-install/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ runs:
using: 'composite'
steps:
- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version-file: '.nvmrc'

Expand All @@ -23,7 +23,7 @@ runs:
# runner-internal token that bypasses `permissions:`, so splitting is the only
# reliable way to prevent pull_request_target runs from poisoning the shared cache.
- name: Restore cached dependencies
uses: actions/cache/restore@v4
uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
path: |
~/.yarn/berry/cache
Expand All @@ -45,7 +45,7 @@ runs:

- name: Save cached dependencies
if: github.event_name != 'pull_request_target'
uses: actions/cache/save@v4
uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
path: |
~/.yarn/berry/cache
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/generate-sandboxes.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ jobs:
ref: ${{ matrix.branch }}
persist-credentials: false

- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e #6.4.0
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version-file: '.nvmrc'

Expand Down
8 changes: 3 additions & 5 deletions .github/workflows/zizmor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ on:
pull_request:
branches: ['**']

permissions: {}
permissions:
contents: read
security-events: write # Required for upload-sarif (used by zizmor-action) to upload SARIF files.

jobs:
zizmor:
name: zizmor latest via PyPI
runs-on: ubuntu-latest
permissions:
security-events: write # Required for upload-sarif (used by zizmor-action) to upload SARIF files.
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
Expand All @@ -27,8 +27,6 @@ jobs:

- name: Run zizmor 🌈
run: uvx zizmor --format=sarif . > results.sarif
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Upload SARIF file
uses: github/codeql-action/upload-sarif@7211b7c8077ea37d8641b6271f6a365a22a5fbfa # v4.36.0
Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ Do **not** use `/tmp` paths or replace `node:fs/promises` with a full async fact

After changing files:

1. Format with `yarn fmt:write` (run from the repo root)
1. **Always** format with `yarn fmt:write`, run from the `code/` directory (`cd code && yarn fmt:write`), once you are done editing. The repo uses `oxfmt`, so hand-written formatting will frequently be wrong — do not skip this step.
2. Lint with `yarn --cwd code lint:js:cmd <file-relative-to-code-folder> --fix` or `cd code && yarn lint:js:cmd <file-relative-to-code-folder>`
3. Run relevant tests before submitting a PR

Expand Down
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
## 10.4.4

- Preview: Stop mixed CSF3+4 stories getting core annotations injected twice - [#35094](https://github.com/storybookjs/storybook/pull/35094), thanks @JReinhold!
- Telemetry: Add timeout to event-log POST to prevent build hang - [#35085](https://github.com/storybookjs/storybook/pull/35085), thanks @badams!

## 10.4.3

- Addon Docs: Fix Primary and Controls blocks not rendering in custom MDX pages - [#34496](https://github.com/storybookjs/storybook/pull/34496), thanks @NYCU-Chung!
- Core: Respect !dev tag on MDX docs in sidebar - [#35031](https://github.com/storybookjs/storybook/pull/35031), thanks @JReinhold!
- React: Add support for resolving subcomponents attached as properties of a parent component - [#34967](https://github.com/storybookjs/storybook/pull/34967), thanks @yatishgoel!
- UI: Prevent docs page scroll reset on HMR re-render - [#35021](https://github.com/storybookjs/storybook/pull/35021), thanks @LongTangGithub!

## 10.4.2

- Bug: Fix Windows command resolution for non-Node package managers - [#33534](https://github.com/storybookjs/storybook/pull/33534), thanks @copilot-swe-agent!
Expand Down
11 changes: 11 additions & 0 deletions CHANGELOG.prerelease.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
## 10.5.0-alpha.7

- CLI: Add `storybook ai <tool>` MCP passthrough behind `STORYBOOK_FEATURE_AI_CLI` - [#35125](https://github.com/storybookjs/storybook/pull/35125), thanks @kasperpeulen!
- CLI: Add telemetry for the `storybook ai <command>` passthrough - [#35138](https://github.com/storybookjs/storybook/pull/35138), thanks @kasperpeulen!
- CLI: Bundle the `ai` command in core so it never downloads `@storybook/cli` - [#35147](https://github.com/storybookjs/storybook/pull/35147), thanks @kasperpeulen!
- Docgen: Register service runtime, payload argTypes - [#35108](https://github.com/storybookjs/storybook/pull/35108), thanks @JReinhold!
- Docs: Route ArgTypes and Controls through docgen service when flag enabled - [#35109](https://github.com/storybookjs/storybook/pull/35109), thanks @JReinhold!
- Open Service: Mark module-graph engine commands as internal - [#35144](https://github.com/storybookjs/storybook/pull/35144), thanks @JReinhold!
- Telemetry: Preserve state machine when the module loads more than once - [#35140](https://github.com/storybookjs/storybook/pull/35140), thanks @kasperpeulen!
- Viewport: Warn when legacy `defaultViewport` parameter is used - [#35087](https://github.com/storybookjs/storybook/pull/35087), thanks @yatishgoel!

## 10.5.0-alpha.6

- Controls: Guard normalizeOptions against array labels and prototype chain lookups - [#34664](https://github.com/storybookjs/storybook/pull/34664), thanks @creazyfrog!
Expand Down
4 changes: 3 additions & 1 deletion code/.storybook/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,9 @@ const config = defineMain({
features: {
developmentModeForBuild: true,
experimentalTestSyntax: true,
experimentalDocgenServer: true,
// Disabled for now: the docgen service does not yet work in production builds. Keeping it off
// ensures this branch exercises the normal (non-experimental) docgen path without regressions.
experimentalDocgenServer: false,
experimentalReactComponentMeta: true,
changeDetection: true,
},
Expand Down
73 changes: 73 additions & 0 deletions code/addons/docs/src/blocks/blocks/ArgTypes.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import { Meta } from '@storybook/addon-docs/blocks';

import * as ArgTypesStories from './ArgTypes.stories.tsx';
import * as ExampleStories from '../examples/ArgTypesParameters.stories';
import * as SubcomponentsExampleStories from '../examples/ArgTypesWithSubcomponentsParameters.stories';

import { ArgTypes } from './ArgTypes';

<Meta of={ArgTypesStories} />

# ArgTypes block (MDX)

Each section below uses the `ArgTypes` block the same way as the matching story in `ArgTypes.stories.tsx`.

## OfComponent

<ArgTypes of={ExampleStories.default.component} />

## OfMeta

<ArgTypes of={ExampleStories.default} />

## OfStory

<ArgTypes of={ExampleStories.NoParameters} />

## IncludeProp

<ArgTypes of={ExampleStories.NoParameters} include={['a']} />

## IncludeParameter

<ArgTypes of={ExampleStories.Include} />

## ExcludeProp

<ArgTypes of={ExampleStories.NoParameters} exclude={['a']} />

## ExcludeParameter

<ArgTypes of={ExampleStories.Exclude} />

## SortProp

<ArgTypes of={ExampleStories.NoParameters} sort="alpha" />

## SortParameter

<ArgTypes of={ExampleStories.Sort} />

## Categories

<ArgTypes of={ExampleStories.Categories} />

## SubcomponentsOfMeta

<ArgTypes of={SubcomponentsExampleStories.default} />

## SubcomponentsOfStory

<ArgTypes of={SubcomponentsExampleStories.NoParameters} />

## SubcomponentsIncludeProp

<ArgTypes of={SubcomponentsExampleStories.NoParameters} include={['a', 'f']} />

## SubcomponentsExcludeProp

<ArgTypes of={SubcomponentsExampleStories.NoParameters} exclude={['a', 'c', 'f', 'g']} />

## SubcomponentsSortProp

<ArgTypes of={SubcomponentsExampleStories.NoParameters} sort="alpha" />
22 changes: 10 additions & 12 deletions code/addons/docs/src/blocks/blocks/ArgTypes.stories.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
import React from 'react';

/** Custom docs page: {@link ./ArgTypes.mdx} (attached via `<Meta of={...} />`). */
import type { PlayFunctionContext } from 'storybook/internal/csf';

import type { Meta, StoryObj } from '@storybook/react-vite';

import { within } from 'storybook/test';

import * as ExampleStories from '../examples/ArgTypesParameters.stories';
import * as SubcomponentsExampleStories from '../examples/ArgTypesWithSubcomponentsParameters.stories';
import { ArgTypes } from './ArgTypes';

const meta: Meta<typeof ArgTypes> = {
const meta = {
title: 'Blocks/ArgTypes',
component: ArgTypes,
parameters: {
Expand All @@ -21,7 +18,8 @@ const meta: Meta<typeof ArgTypes> = {
],
docsStyles: true,
},
};
} satisfies Meta<typeof ArgTypes>;

export default meta;

type Story = StoryObj<typeof meta>;
Expand Down Expand Up @@ -108,7 +106,7 @@ export const Categories: Story = {
};

const findSubcomponentTabs = async (
canvas: ReturnType<typeof within>,
canvas: Parameters<NonNullable<Story['play']>>[0]['canvas'],
step: PlayFunctionContext['step']
) => {
let subcomponentATab: HTMLElement | null = null;
Expand All @@ -124,26 +122,26 @@ export const SubcomponentsOfMeta: Story = {
args: {
of: SubcomponentsExampleStories.default,
},
play: async ({ canvasElement, step }) => {
const canvas = within(canvasElement);
play: async ({ canvas, step }) => {
await findSubcomponentTabs(canvas, step);
},
};

export const SubcomponentsOfStory: Story = {
...SubcomponentsOfMeta,
args: {
of: SubcomponentsExampleStories.NoParameters,
},
play: async ({ canvas, step }) => {
await findSubcomponentTabs(canvas, step);
},
};

export const SubcomponentsIncludeProp: Story = {
args: {
of: SubcomponentsExampleStories.NoParameters,
include: ['a', 'f'],
},
play: async ({ canvasElement, step }) => {
const canvas = within(canvasElement);
play: async ({ canvas, step }) => {
const { subcomponentBTab } = await findSubcomponentTabs(canvas, step);
if (subcomponentBTab) {
await (subcomponentBTab as HTMLElement & { click: () => Promise<void> }).click();
Expand Down
Loading