DEV Community

Cover image for Manual setup for a minimal Storybook
Danny
Danny

Posted on

3

Manual setup for a minimal Storybook

If you're having issues with the cli or you just want to know what you're installing then this is for you. I've put together what I consider the minimal setup. From there you can browse addons and docs to see how to enhance your setup.

Heres a video of me following the same steps:

I'll use bun here but replace with any package manager.

Also this example uses react with vite. If you're using a different framework you can swap @storybook/react and @storybook/react-vite for the alternative.

Packages

Heres the minimal packages you'll need to get started with a react storybook.



bun add @storybook/react @storybook/react-vite @storybook/addon-essentials storybook


Enter fullscreen mode Exit fullscreen mode

Scripts

Add to your scripts in package.json



"storybook": "storybook dev -p 6006",
"build-storybook": "storybook build"


Enter fullscreen mode Exit fullscreen mode

Configuration files

Add a .storybook folder with a main.ts and preview.ts.

main.ts

Find the docs here



// .storybook/main.ts
import type { StorybookConfig } from "@storybook/react-vite";

const config: StorybookConfig = {
  stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"],
  addons: ["@storybook/addon-essentials"],
  framework: {
    name: "@storybook/react-vite",
    options: {},
  },
  docs: {
    autodocs: "tag",
  },
};
export default config;


Enter fullscreen mode Exit fullscreen mode

preview.ts

Start here to learn about the preview



// .storybook/preview.ts
import type { Preview } from "@storybook/react";

const preview: Preview = {
  parameters: {
    controls: {
      matchers: {
        color: /(background|color)$/i,
        date: /Date$/i,
      },
    },
  },
};

export default preview;


Enter fullscreen mode Exit fullscreen mode

Example story

Lets add a component file



// src/Button.tsx
export const Button = ({ text }: { text: string }) => {
  return <button>{text}</button>;
};



Enter fullscreen mode Exit fullscreen mode

Then we create a stories file and import it there.

Look here to learn about writing stories



// src/Button.stories.tsx
import { Button } from "./Button";

export default {
  component: Button,
};

export const Primary = {
  args: {
    text: "Primary Button",
  },
};



Enter fullscreen mode Exit fullscreen mode

Run it!

Now run this to see your storybook in action.



bun run storybook


Enter fullscreen mode Exit fullscreen mode

The final product should look like this:

screenshot of the final storybook

All done!

Thats the basics, now I recommend you explore the docs to learn more about how to customize storybook for your needs. Especially look into interactions they are really nice.

Find me here:
twitter: @Danny_H_W
github: dannyhw

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more