Storybook

Build bulletproof UI components faster


Storybook Community Backers on Open Collective Sponsors on Open Collective Official Twitter Handle

# eslint-plugin-storybook Best practice rules for Storybook ## Installation You'll first need to install [ESLint](https://eslint.org/): ```sh npm install eslint --save-dev # or yarn add eslint --dev ``` Next, install `eslint-plugin-storybook`: ```sh npm install eslint-plugin-storybook --save-dev # or yarn add eslint-plugin-storybook --dev ``` ## Usage Use `.eslintrc.*` file to configure rules. See also: https://eslint.org/docs/user-guide/configuring Add `plugin:storybook/recommended` to the extends section of your `.eslintrc` configuration file. Note that we can omit the `eslint-plugin-` prefix: ```js { // extend plugin:storybook/, such as: "extends": ["plugin:storybook/recommended"] } ``` This plugin will only be applied to files following the `*.stories.*` (we recommend this) or `*.story.*` pattern. This is an automatic configuration, so you don't have to do anything. ### Overriding/disabling rules Optionally, you can override, add or disable rules settings. You likely don't want these settings to be applied in every file, so make sure that you add a `overrides` section in your `.eslintrc.*` file that applies the overrides only to your stories files. ```js { "overrides": [ { // or whatever matches stories specified in .storybook/main.js "files": ['*.stories.@(ts|tsx|js|jsx|mjs|cjs)'], "rules": { // example of overriding a rule 'storybook/hierarchy-separator': 'error', // example of disabling a rule 'storybook/default-exports': 'off', } } ] } ``` ### MDX Support This plugin does not support MDX files. ## Supported Rules and configurations **Key**: 🔧 = fixable **Configurations**: csf, csf-strict, addon-interactions, recommended | Name | Description | 🔧 | Included in configurations | | ------------------------------------------------------------------------------------------ | ----------------------------------------------------------- | --- | -------------------------------------------------------- | | [`storybook/await-interactions`](./docs/rules/await-interactions.md) | Interactions should be awaited | 🔧 | | | [`storybook/context-in-play-function`](./docs/rules/context-in-play-function.md) | Pass a context when invoking play function of another story | | | | [`storybook/csf-component`](./docs/rules/csf-component.md) | The component property should be set | | | | [`storybook/default-exports`](./docs/rules/default-exports.md) | Story files should have a default export | 🔧 | | | [`storybook/hierarchy-separator`](./docs/rules/hierarchy-separator.md) | Deprecated hierarchy separator in title property | 🔧 | | | [`storybook/no-redundant-story-name`](./docs/rules/no-redundant-story-name.md) | A story should not have a redundant name property | 🔧 | | | [`storybook/no-stories-of`](./docs/rules/no-stories-of.md) | storiesOf is deprecated and should not be used | | | | [`storybook/no-title-property-in-meta`](./docs/rules/no-title-property-in-meta.md) | Do not define a title in meta | 🔧 | | | [`storybook/prefer-pascal-case`](./docs/rules/prefer-pascal-case.md) | Stories should use PascalCase | 🔧 | | | [`storybook/story-exports`](./docs/rules/story-exports.md) | A story file must contain at least one story export | | | | [`storybook/use-storybook-expect`](./docs/rules/use-storybook-expect.md) | Use expect from `@storybook/jest` | 🔧 | | | [`storybook/use-storybook-testing-library`](./docs/rules/use-storybook-testing-library.md) | Do not use testing-library directly on stories | 🔧 | | ## Contributors Looking into improving this plugin? That would be awesome! Please refer to [the contributing guidelines](./CONTRIBUTING.md) for steps to contributing.