Vyriy Storybook Config
@vyriy/storybook-config is a shared Storybook configuration package for Vyriy projects.
The goal is to keep Storybook setup small, predictable, and reusable across React packages, examples, and application workspaces.
Instead of copying the same Storybook configuration into every project, a package can extend the shared Vyriy config and define only its local stories.
Installation
Install the shared packages and Storybook dependencies:
yarn add @vyriy/path @vyriy/typescript-config @vyriy/storybook-config storybook @storybook/react react react-dom @types/react @types/react-dom
This example uses:
@vyriy/storybook-configfor the shared Storybook setup;@vyriy/typescript-configfor the shared TypeScript baseline;@vyriy/pathfor clean path creation;storybookand@storybook/reactfor Storybook itself;reactandreact-domfor the React runtime;@types/reactand@types/react-domfor TypeScript support.
TypeScript config
Create tsconfig.json:
{
"extends": "@vyriy/typescript-config/index.json",
"include": ["*.ts", "*.tsx", ".storybook/*.ts"]
}
The include section contains regular TypeScript files, React TSX files, and Storybook config files.
Storybook main config
Create the .storybook directory:
mkdir .storybook
Create .storybook/main.ts:
import config, { type StorybookConfig } from '@vyriy/storybook-config';
import { path } from '@vyriy/path';
const storybookConfig: StorybookConfig = {
...config,
stories: [
path('**/*.stories.@(ts|tsx)'),
],
};
export default storybookConfig;
This file imports the shared Storybook config and extends it with the local stories pattern.
The project-specific part stays very small:
stories: [
path('**/*.stories.@(ts|tsx)'),
],
Everything else comes from the shared Vyriy configuration.
Storybook preview config
Create .storybook/preview.ts:
export { default } from '@vyriy/storybook-config/preview';
This keeps preview configuration shared as well.
A package can use the common preview setup without duplicating decorators, parameters, or other shared Storybook defaults.
Example React component
Create app.tsx:
export const App = () => <div>App</div>;
This is a minimal React component used only to verify that Storybook can discover and build a story.
Example story
Create index.stories.tsx:
import type { Meta, StoryObj } from '@storybook/react';
import { App } from './app';
const meta = {
title: 'Example/App',
component: App,
} satisfies Meta<typeof App>;
export default meta;
type Story = StoryObj<typeof meta>;
export const Default: Story = {};
This story uses the modern typed Storybook format:
Metadescribes the component metadata;StoryObjdescribes the story type;satisfies Meta<typeof App>keeps the metadata type-safe.
Build Storybook
Run the Storybook build:
npx storybook build
Output:
┌ Building storybook v10.3.6
│
◇ Cleaning outputDir: storybook-static
│
◇ Loading presets
│
◇ Building manager..
│
● Building preview..
│
● Addon-docs: using MDX3
│
● Using implicit CSS loaders
│
● Using default Webpack5 setup
│
◇ Output directory: storybook-static
│
└ Storybook build completed successfully
The successful build confirms that the shared Storybook config works with React, TypeScript, and local stories.
The generated static Storybook files are placed into:
storybook-static
This directory can be deployed to static hosting, for example S3 and CloudFront, GitHub Pages, GitLab Pages, or any regular static file server.
Why shared Storybook config?
Storybook configuration usually grows over time.
A project may need common addons, docs settings, webpack settings, preview parameters, decorators, CSS handling, or build defaults. If every package copies that setup manually, the configuration becomes harder to maintain.
With @vyriy/storybook-config, each package can stay focused on its own stories:
.storybook/main.ts -> local story discovery
.storybook/preview.ts -> shared preview setup
*.stories.tsx -> component examples
The shared package keeps the common Storybook behavior in one place.
This matches the Vyriy approach: calm configuration, small local files, and reusable defaults.
Documentation
See the Storybook config API documentation.