chromatic-viewports
Chromatic Viewports
Configure responsive visual testing across multiple screen sizes using Chromatic's Modes API.
This skill covers:
- Setting up viewport modes in
.storybook/modes.ts - Applying modes at project, component, and story levels
- Controlling snapshot height with
cropToViewport - Migrating from the legacy
chromatic.viewportsAPI
Quick start
- Scan the project for existing viewport config: look for
chromatic.viewports(legacy) or amodes.ts/modesimport (new API). - Fetch the relevant docs from
reference/docs-map.md. - Determine whether this is a fresh setup, an extension, or a migration.
- Generate configuration files and output the checklist from
reference/output-contract.md.
Required workflow
1) Detect existing configuration
Check story files, .storybook/preview.ts, and existing modes.ts:
chromatic.viewportsfound → legacy API in use, offer migration to Modes API.storybook/modes.tsorchromatic.modesfound → already on Modes API, help extend or fix- Neither found → fresh setup, proceed with Modes API
2) Fetch current docs
Use the URLs in reference/docs-map.md and fetch with WebFetch. Use fetched content as the authoritative source — do not rely on remembered examples.
3) Configure viewports
Fresh setup or extension (Modes API):
Create or update .storybook/modes.ts:
export const allModes = {
mobile: { viewport: 375 },
tablet: { viewport: 768 },
desktop: { viewport: 1280 },
} as const;
Apply in a story file:
import { allModes } from '../.storybook/modes';
export default {
title: 'Component',
parameters: {
chromatic: { modes: { mobile: allModes.mobile, desktop: allModes.desktop } },
},
};
Apply globally in .storybook/preview.ts:
import { allModes } from './modes';
const preview = {
parameters: {
chromatic: { modes: allModes },
},
};
export default preview;
Control height — by default snapshots use the component's intrinsic height. To crop to the specified viewport height:
export const allModes = {
mobile: { viewport: { width: 375, height: 812 } },
} as const;
// In story:
parameters: { chromatic: { modes: { mobile: allModes.mobile }, cropToViewport: true } }
Migration from legacy:
Replace chromatic.viewports arrays with named modes. See reference/docs-map.md for the migration guide URL.
// Before (legacy)
parameters: { chromatic: { viewports: [320, 1200] } }
// After (Modes API)
parameters: { chromatic: { modes: { mobile: { viewport: 320 }, desktop: { viewport: 1200 } } } }
4) Output checklist
Always render the checklist from reference/output-contract.md, then show the complete content of every file to create or modify.
Key constraints
- Viewport values must be integers or
px-suffixed strings (800or"800px") — no other CSS units - Valid range: 200–2560px per side; max 25,000,000 pixels per snapshot
- Default size when unspecified: 1200 × 900px
- Legacy
chromatic.viewportsand the Modes API cannot coexist in the same story — using both throws an error - Modes stack across project → component → story levels; they do not override each other
- Renaming a mode creates a new baseline; the old baseline is retired
Boundaries
- Do not commit or push files — generate and show configuration only
- Do not add both APIs to the same file — pick one
- Do not suggest themes, locales, or other globals unless the user asks
References
reference/docs-map.mdreference/output-contract.md
More from chromaui/chromatic-skills
turbosnap-debug
Diagnose TurboSnap behavior using logs, config, git context, support-shareable hosted metadata references, and targeted trace commands. Use when you need to classify why TurboSnap is enabled, disabled, unavailable, or tracing the wrong stories, then recommend the smallest valid next step.
8chromatic-themes
Configure Chromatic to capture visual test snapshots across multiple themes (light/dark mode, design tokens, branded variants) using the Modes API and @storybook/addon-themes. Use when the user wants to test components with different themes in Chromatic, set up light/dark mode visual testing, configure @storybook/addon-themes with Chromatic, or apply theme modes at the project, component, or story level.
6chromatic-setup-ci
Configure CI/CD pipelines to run Chromatic visual tests automatically. Use when the user wants to set up Chromatic in CI, add Chromatic to GitHub Actions / GitLab / Bitbucket Pipelines / CircleCI / Jenkins / Azure Pipelines, automate visual testing, or run Chromatic on every push.
6chromatic-troubleshoot-config
Diagnose Storybook configuration issues that block Chromatic or local Storybook, including missing stories, framework or builder mismatches, addon conflicts, preview errors, static asset path issues, and package version drift. Use when Storybook fails to build, Chromatic cannot verify Storybook, stories are missing, or a team needs the smallest config change to restore a working Storybook surface.
6chromatic-turbosnap-debug
Diagnose TurboSnap behavior using logs, config, git context, support-shareable hosted metadata references, and targeted trace commands. Use when you need to classify why TurboSnap is enabled, disabled, unavailable, or tracing the wrong stories, then recommend the smallest valid next step.
6chromatic-workflow-debug
Diagnose Chromatic workflow issues involving git history, baselines, pull request event shape, merge queues, merge-base failures, replacement builds, and patch builds. Use when builds compare against the wrong baseline, an ancestor build is not found, pull request comparisons look wrong, or CI git context does not match Chromatic's expectations.
5