The @cappa/plugin-storybook package bridges Storybook with Cappa’s screenshot pipeline. It fetches
stories from a running Storybook instance, opens each story in Playwright, and captures images using
the same comparison workflow as other targets. This guide walks through installing the plugin,
connecting it to Storybook, and fine-tuning how screenshots are generated.
Add the Storybook plugin alongside the Cappa core packages inside your project:
Terminal window
pnpmadd-D@cappa/plugin-storybook
Next, register the plugin inside cappa.config.ts so that the CLI knows how to discover stories. The
storybookUrl should point at the running Storybook server.
The plugin ships with a Storybook addon that exposes story-level configuration to Cappa. Enable it by
adding @cappa/plugin-storybook to the Storybook addons list:
The addon registers a global decorator that collects parameters for each story. If you need to adjust
Storybook’s runtime when Cappa is in control, you can use the exported isCappa helper in
.storybook/preview.ts:
Start Storybook in one terminal and keep it running so the plugin can connect to the storybookUrl.
From another terminal, run the Cappa capture command from the directory that contains your config:
Terminal window
# Terminal 1
pnpmstorybook
# Terminal 2
pnpmcappacapture
Cappa will fetch the list of stories, load each one in Playwright, and write screenshots, diffs, and
reports to the configured output directory. Pair it with cappa review and cappa approve to follow
the normal approval workflow.
You can use start-server-and-test to start Storybook and Cappa in one command.
import"@storybook/react-vite"; // replace with your framework
declaremodule"@storybook/react-vite" { // replace with your framework
interface Parameters {
cappa?:CappaStorybookOptions;
}
}
Each variant inherits the base configuration, so you only need to specify the properties that differ
from the root story. Variant filenames follow the <story>--<variant> convention, and you can supply
filename inside a variant to control the output name when necessary.
Cappa already pauses CSS animations and waits for the DOM to become idle, but certain components may
require extra setup. Use the isCappa helper shown above to load stability-specific styles or disable
third-party animation libraries when Cappa is present.