<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Storybook</title>
    <description>The latest articles on Forem by Storybook (@storybookjs).</description>
    <link>https://forem.com/storybookjs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F977908%2F37af8e27-a26e-4095-8258-0672f03717c9.png</url>
      <title>Forem: Storybook</title>
      <link>https://forem.com/storybookjs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/storybookjs"/>
    <language>en</language>
    <item>
      <title>Storybook 8</title>
      <dc:creator>Storybook</dc:creator>
      <pubDate>Tue, 12 Mar 2024 14:47:43 +0000</pubDate>
      <link>https://forem.com/storybookjs/storybook-8-f09</link>
      <guid>https://forem.com/storybookjs/storybook-8-f09</guid>
      <description>&lt;p&gt;&lt;a href="https://storybook.js.org/" rel="noopener noreferrer"&gt;Storybook&lt;/a&gt; is the industry standard UI tool for building, testing, and documenting components and pages. It’s used by &lt;a href="https://storybook.js.org/showcase/projects?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;thousands of teams globally&lt;/a&gt;, integrates with all major JavaScript frameworks, and combines with most leading design and developer tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Today, I’m thrilled to announce the release of Storybook 8!&lt;/strong&gt; This latest version of Storybook brings together 8,865 commits across 773 PRs from 218 contributors. These changes include major improvements to Storybook’s testing and documentation feature sets while strengthening framework compatibility and user experience across React, Vue, Angular, web-components, Svelte, and more. Read on to discover the release’s highlights, including:&lt;/p&gt;

&lt;p&gt;📸 Built-in visual testing&lt;br&gt;
⚛️ React Server Component support&lt;br&gt;
🎛️ Upgraded Vue and React control autogeneration&lt;br&gt;
⚡️ Rearchitected Vite support, Vitest testing, and Vite 5 support&lt;br&gt;
🧪 2–4x faster test builds&lt;br&gt;
✨ Refreshed desktop UI&lt;br&gt;
📲 Rebuilt mobile UX&lt;br&gt;
🙅‍♀️ Removed React dependency for non-React projects&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://www.youtube.com/watch?feature=shared&amp;amp;v=eUcVttkFAsM" rel="noopener noreferrer"&gt;
      youtube.com
    &lt;/a&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Built-in visual testing
&lt;/h3&gt;

&lt;p&gt;Storybook 8’s headline feature is the new Visual Tests addon, which lets you catch UI bugs faster and more easily than ever before. The addon brings &lt;a href="https://storybook.js.org/blog/storybook-8-beta/?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Chromatic&lt;/a&gt;, the visual testing cloud service developed by Storybook maintainers, into Storybook for the very first time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1200%2F0%2AIE7EfVsAf0ajLN0t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1200%2F0%2AIE7EfVsAf0ajLN0t.png" alt="Screenshot demonstrating Storybook's Visual Tests addon interface"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the click of a button, you can test all your stories simultaneously, compare each one to previous versions, and pinpoint any visual changes. Then, filter your Storybook sidebar to only see stories containing visual differences and verify those changes one by one.&lt;/p&gt;

&lt;p&gt;This process mirrors Chromatic’s CI workflow, but now it’s possible to do it all directly inside Storybook as you’re working, without needing to submit a PR or even commit your changes!&lt;/p&gt;

&lt;p&gt;Visual testing is a superpower, and the Visual Tests addon makes it more accessible than ever before.&lt;/p&gt;

&lt;h3&gt;
  
  
  React Server Component (RSC) support
&lt;/h3&gt;

&lt;p&gt;React Server Components are a paradigm shift for React, where components are exclusively rendered on the server. We’ve been closely following the React core team’s explorations of RSC, as well as our friends at &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt; leading the charge in RSC app development.&lt;/p&gt;

&lt;p&gt;Since &lt;a href="https://storybook.js.org/blog/storybook-7-0/" rel="noopener noreferrer"&gt;Storybook 7&lt;/a&gt;’s release, we’ve received many questions about when Storybook’s RSC support would arrive. In fact, &lt;a href="https://github.com/storybookjs/storybook/issues/21540?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;it’s one of our most popular GitHub issues&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Storybook 8 heeds your call and introduces our first-ever experimental support for React Server Components. We’re classifying our RSC solution as experimental because it’s compatible only with Next.js — for now. We’ll continue building this functionality through future releases.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1200%2F0%2AZO5Nz2en-rp3leSm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1200%2F0%2AZO5Nz2en-rp3leSm.png" alt="Illustration of Storybook's experimental support for React Server Components, showcasing the integration with Next.js for server-side component rendering"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To learn more about Storybook 8’s experimental RSC support, see &lt;a href="https://storybook.js.org/blog/build-a-nextjs-app-with-rsc-msw-storybook/?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;how to build an RSC app with Next.js, Mock Service Worker, and Storybook 8&lt;/a&gt;. We plan to share more as we refine the best practices.&lt;/p&gt;

&lt;h3&gt;
  
  
  Improved React and Vue control autogeneration
&lt;/h3&gt;

&lt;p&gt;One of Storybook’s signature features is &lt;a href="https://storybook.js.org/docs/essentials/controls" rel="noopener noreferrer"&gt;auto-generated UI controls&lt;/a&gt; that let you modify component inputs interactively to explore new component states.&lt;/p&gt;

&lt;p&gt;For React and Vue projects, Storybook 8 introduces major improvements to controls autogeneration, by upgrading the libraries we use to analyze your components (also known as “docgen”).&lt;/p&gt;

&lt;p&gt;For React users, Storybook 8 switches to a significantly faster docgen library: &lt;code&gt;react-docgen&lt;/code&gt;. Unlike our current TypeScript-based solution, &lt;code&gt;react-docgen&lt;/code&gt; produces a shallower analysis that is way faster and good enough for virtually all components. In our tests, using &lt;code&gt;react-docgen&lt;/code&gt; clocked up to 50% faster React Storybook startup times. The full TypeScript solution is still available as a fallback for anyone who needs it. Learn more in &lt;a href="https://storybook.js.org/docs/api/main-config-typescript?ref=storybookblog.ghost.io#reactdocgen" rel="noopener noreferrer"&gt;our React docgen documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For Vue users, Storybook 8 brings support for an official Vue docgen package: &lt;code&gt;vue-component-meta&lt;/code&gt;. This package is powered by &lt;a href="https://github.com/volarjs" rel="noopener noreferrer"&gt;Volar&lt;/a&gt;, which you may recognize as the official Vue VSCode plugin. Upgrading to &lt;code&gt;vue-component-meta&lt;/code&gt; improves Storybook’s handling of types and our ability to autogenerate controls. Learn more about Storybook 8’s Vue changes in &lt;a href="https://storybook.js.org/blog/first-class-vue-support-storybook-8/?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;our Vue docgen announcement&lt;/a&gt; or &lt;a href="https://storybook.js.org/docs/8.0/get-started/vue3-vite?renderer=vue&amp;amp;ref=storybookblog.ghost.io#using-vue-component-meta" rel="noopener noreferrer"&gt;our Vue docgen documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rearchitected Vite support, a Vitest-powered testing framework, and Vite 5 compatibility
&lt;/h3&gt;

&lt;p&gt;One of Storybook 7’s biggest wins was the introduction of &lt;a href="https://storybook.js.org/blog/first-class-vite-support-in-storybook/" rel="noopener noreferrer"&gt;Storybook’s zero-config Vite support&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Since then, Vite usage has continued to skyrocket. Today, Vite accounts for nearly half of all new Storybook projects. Accordingly, we’ve continued to tighten and refine our Vite integration.&lt;/p&gt;

&lt;p&gt;Firstly, Storybook 8 adds support for &lt;a href="https://vitejs.dev/blog/announcing-vite5" rel="noopener noreferrer"&gt;Vite 5&lt;/a&gt;, Vite’s latest and greatest. As we introduced Vite 5 support, we realized that Storybook was configuring too much on your behalf, which made it difficult for us to support different Vite versions. So, Storybook 8 gives you more control for configuring Vite plugins like &lt;code&gt;plugin-react&lt;/code&gt;, &lt;code&gt;plugin-vue&lt;/code&gt;, while moving those dependencies outside Storybook. Nearly all Vite projects come with these plugins pre-configured – so unless you’re doing something non-standard, it will require no changes on your part!&lt;/p&gt;

&lt;p&gt;Storybook 8 also integrates Vite’s testing package, Vitest, as part of our new framework: &lt;code&gt;@storybook/test&lt;/code&gt;. This new testing framework replaces two previous packages (&lt;code&gt;@storybook/jest&lt;/code&gt; and &lt;code&gt;@storybook/testing-library&lt;/code&gt;), enables the use of Vitest’s &lt;code&gt;spy&lt;/code&gt; and &lt;code&gt;expect&lt;/code&gt;, and has a smaller installation footprint. Learn more about &lt;a href="https://storybook.js.org/blog/storybook-test/" rel="noopener noreferrer"&gt;Storybook 8’s testing improvements&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2–4x faster test builds
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://storybook.js.org/blog/optimize-storybook-7-6/?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Storybook 8 introduces a new “test mode”&lt;/a&gt; that makes static builds of Storybook 2–4 times faster.&lt;/p&gt;

&lt;p&gt;We observed that when you build Storybook for use with testing tool like Storybook’s Test Runner or Chromatic, you might not require Storybook features like documentation or auto-generated controls.&lt;/p&gt;

&lt;p&gt;As such, Storybook 8 enables a streamlined test workflow by providing a new &lt;code&gt;--test&lt;/code&gt; CLI flag that disables a variety of Storybook’s standard features. Using this flag gives you dramatically faster build times and smaller build outputs. We’ll continue to explore new optimization possibilities in every future release!&lt;/p&gt;

&lt;h3&gt;
  
  
  Updated mobile and desktop UI
&lt;/h3&gt;

&lt;p&gt;Storybook 8’s UI brings a bunch of refinements and polish, and if you have an eye for design we think you’ll love these changes.&lt;/p&gt;

&lt;p&gt;We overhauled Storybook’s mobile UI completely. Now, both the navigation sidebar and addon panel spring up from the bottom of the page, making them easy to trigger with your thumb on a phone. Unlike the previous version, these panels co-exist elegantly with the main “Canvas” area of Storybook.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1200%2F0%2AYAY2d17uHCRcYXp9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1200%2F0%2AYAY2d17uHCRcYXp9.png" alt="Storybook 8’s mobile UI"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We also rearchitected the desktop UI to fix a long-standing responsiveness bug, where stories remounted when the browser resized between desktop and mobile states. In Storybook 8, that transition is buttery smooth and absolutely delicious, sprinkled with a topping of updated typography and a new icon set.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1200%2F0%2AmQEsa2EiJp1RkrBC.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1200%2F0%2AmQEsa2EiJp1RkrBC.png" alt="Storybook 8’s desktop UX"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  No more React requirement in non-React projects
&lt;/h3&gt;

&lt;p&gt;In Storybook 7, we made the hard decision to make React a peer dependency for all framework projects. While this change made Storybook compatible with &lt;code&gt;pnpm&lt;/code&gt; and other modern package managers, it was a bitter pill to swallow for non-React users.&lt;/p&gt;

&lt;p&gt;Thankfully, we’ve learned a lot since then about dependency wrangling and package prebundling (thanks &lt;code&gt;tsup&lt;/code&gt;!) so that Storybook 8 now removes the React peer dependency for non-React Storybooks. Storybook’s UI is still written in React, but you can kiss those &lt;code&gt;react&lt;/code&gt; and &lt;code&gt;react-dom&lt;/code&gt; dependencies in your &lt;code&gt;package.json&lt;/code&gt; goodbye!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1200%2F0%2ABjyGOkMkvHyZg_19.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1200%2F0%2ABjyGOkMkvHyZg_19.png" alt="No more React peer dependency in non-React projects!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Framework-specific improvements
&lt;/h3&gt;

&lt;p&gt;Thanks to the last year’s worth of maintenance from an expanded core team, Storybook is faster, more compatible, and more stable than ever. Here are the highlights!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;React:&lt;/strong&gt; React gets experimental React Server Component support and &lt;code&gt;react-docgen&lt;/code&gt; as a faster default for auto-generating interactive controls, both described above.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vue:&lt;/strong&gt; Vue gets Volar-powered auto-generated controls that support the latest Vue features and TypeScript types. It also gets dynamic source snippets in docs and numerous bugfixes from our new maintainers, Chakir and Lars.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular:&lt;/strong&gt; Angular gets Angular 16/17 support, nested module metadata, standalone directives, easier-to-write stories, and dozens of bugfixes. We’re also working with the Angular core team to support new high-performance build options in a future version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Web Components:&lt;/strong&gt; Storybook’s Web Component stories are written in Lit and we’ve updated to support Lit3. Additionally we’ve fixed issues related to auto-generated controls and dynamically-generated source snippets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Svelte:&lt;/strong&gt; Storybook’s Svelte support has gotten a ton of love from the Storybook core team, the Svelte core team, and the community at large. Key improvements include Svelte 5 (prerelease) support, SvelteKit page and navigation mocking, and key fixes/improvements to Storybook’s “native” Svelte story format.&lt;/p&gt;

&lt;h3&gt;
  
  
  Get started
&lt;/h3&gt;

&lt;p&gt;To make a fresh install of Storybook 8, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx storybook@latest init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To upgrade an existing Storybook to Storybook 8, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx storybook@latest upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For help with upgrading, consult our Storybook 8 migration guides to learn &lt;a href="https://storybook.js.org/docs/8.0/migration-guide" rel="noopener noreferrer"&gt;how to upgrade from Storybook 7 to Storybook 8&lt;/a&gt;, or &lt;a href="https://storybook.js.org/docs/8.0/migration-guide/from-older-version" rel="noopener noreferrer"&gt;how to upgrade from Storybook 6 to Storybook 8&lt;/a&gt;. Alternatively, &lt;a href="https://github.com/storybookjs/storybook/blob/4780ae31030197488d66b4fba483867f416bdb0a/MIGRATION.md" rel="noopener noreferrer"&gt;refer to our extended Storybook migration guide on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Celebrate Storybook 8’s release
&lt;/h3&gt;

&lt;p&gt;Between Storybook 7 and Storybook 8, Storybook won &lt;a href="https://github.blog/2023-11-09-celebrating-the-github-awards-2023-recipients/#global-grandiose-award" rel="noopener noreferrer"&gt;the GitHub 2023 Global Grandiose award for our worldwide community&lt;/a&gt;! In that same spirit, we’re running two meetups on March 28 where you can celebrate the Storybook 8 launch with your local frontend scene. ****&lt;a href="https://figma-storybook-frog.splashthat.com/" rel="noopener noreferrer"&gt;Join us in Paris&lt;/a&gt; or &lt;a href="https://www.eventbrite.com/e/852105669997/?aff=oddtdtcreator" rel="noopener noreferrer"&gt;join us in New York&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Additionally, thank you to all our community launch partners across the frontend ecosystem for helping us bring Storybook 8 to the world! Thanks to &lt;a href="https://www.chromatic.com/" rel="noopener noreferrer"&gt;Chromatic&lt;/a&gt;, &lt;a href="https://www.figma.com/" rel="noopener noreferrer"&gt;Figma&lt;/a&gt;, &lt;a href="https://viteconf.org/23/" rel="noopener noreferrer"&gt;ViteConf&lt;/a&gt;, &lt;a href="https://omlet.dev/" rel="noopener noreferrer"&gt;Omlet&lt;/a&gt;, &lt;a href="https://divriots.com/" rel="noopener noreferrer"&gt;DivRiots&lt;/a&gt;, &lt;a href="https://story.to.design/" rel="noopener noreferrer"&gt;story.to.design&lt;/a&gt;, &lt;a href="https://stackblitz.com/" rel="noopener noreferrer"&gt;StackBlitz&lt;/a&gt;, &lt;a href="https://www.uxpin.com/" rel="noopener noreferrer"&gt;UXpin&lt;/a&gt;, &lt;a href="https://nx.dev/" rel="noopener noreferrer"&gt;Nx&lt;/a&gt;, &lt;a href="https://mswjs.io/" rel="noopener noreferrer"&gt;Mock Service Worker&lt;/a&gt;, &lt;a href="https://www.animaapp.com/" rel="noopener noreferrer"&gt;Anima&lt;/a&gt;, &lt;a href="https://zeplin.io/" rel="noopener noreferrer"&gt;Zeplin&lt;/a&gt;, &lt;a href="https://zeroheight.com/" rel="noopener noreferrer"&gt;zeroheight&lt;/a&gt;, &lt;a href="https://www.kickstartds.com/" rel="noopener noreferrer"&gt;kickstartDS&lt;/a&gt;, and &lt;a href="https://www.telerik.com/kendo-ui" rel="noopener noreferrer"&gt;Kendo UI&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxfh98e1pw1wubf4g4xtu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxfh98e1pw1wubf4g4xtu.jpg" alt="Storybook 8’s community launch partners"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Credits
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Core team
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://twitter.com/michaelarestad?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Michael Arestad&lt;/a&gt;, &lt;a href="https://twitter.com/yannbf?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Yann Braga&lt;/a&gt;, &lt;a href="https://twitter.com/xapaxa?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;João Cardoso&lt;/a&gt;, &lt;a href="https://twitter.com/chantastic?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Michael Chan&lt;/a&gt;, &lt;a href="https://twitter.com/tmeasday?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Tom Coleman&lt;/a&gt;, &lt;a href="https://storybook.js.org/blog/future-of-storybook-2024/cdedreuille" rel="noopener noreferrer"&gt;Charles de Dreuille&lt;/a&gt;, &lt;a href="https://twitter.com/NorbertdeLangen?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Norbert de Langen&lt;/a&gt;, &lt;a href="https://twitter.com/Integrayshaun?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Shaun Evening&lt;/a&gt;, &lt;a href="https://twitter.com/kylegach?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Kyle Gach&lt;/a&gt;, &lt;a href="https://twitter.com/GHengeveld?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Gert Hengeveld&lt;/a&gt;, &lt;a href="https://twitter.com/domyen?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Dom Nguyen&lt;/a&gt;, &lt;a href="https://twitter.com/vatcoop?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Valentin Palkovic&lt;/a&gt;, &lt;a href="https://twitter.com/KasperPeulen?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Kasper Peulen&lt;/a&gt;, &lt;a href="https://twitter.com/ChakirQatab?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Chakir Qatab&lt;/a&gt;, &lt;a href="https://twitter.com/DrReinhold?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Jeppe Reinhold&lt;/a&gt;, &lt;a href="https://github.com/larsrickert" rel="noopener noreferrer"&gt;Lars Rickert&lt;/a&gt;, &lt;a href="https://twitter.com/kairoeder?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Kai Röder&lt;/a&gt;, &lt;a href="https://twitter.com/mshilman?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Michael Shilman (me!)&lt;/a&gt;, &lt;a href="https://twitter.com/joevaugh4n?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Joe Vaughan&lt;/a&gt;, &lt;a href="https://twitter.com/winkerVSbecks?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Varun Vachhar&lt;/a&gt;, &lt;a href="https://twitter.com/IanVanSchooten?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Ian Van Schooten&lt;/a&gt;, &lt;a href="https://twitter.com/Danny_H_W?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Daniel Williams&lt;/a&gt;, &lt;a href="https://twitter.com/JoshWooding_?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Josh Wooding&lt;/a&gt;, and &lt;a href="https://twitter.com/vanessayuenn?ref=storybookblog.ghost.io" rel="noopener noreferrer"&gt;Vanessa Yuen&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Contributors
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@0916dhkim&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@1234tgk&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@43081j&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@aditya1&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@adityakrmodak&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@agriffis&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@ai&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@alitas&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@almoghaimo&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@amerlander&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@andarist&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@anneau&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@artur93gev&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@arunoda&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@arup1221&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@atreay&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@auctumnus&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@bashmish&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@bdriguesdev&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@benmccann&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@bkfarnsworth&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@bodograumann&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@bryanjtc&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@cdedreuille&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@cgatian&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@chakas3&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@chocoscoding&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@coliff&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@cprecioso&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@danez&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@danielmarcano&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@dannyhw&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@dartess&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@darth-koder007&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@daves28&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@decherneyge&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@devanandb&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@devazc&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@diamondex&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@domyen&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@dotwoodmedia&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@dprcoles&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@drik98&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@dschungelabenteuer&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@dubbs&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@edutoit&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@efrenaragon96&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@epreston&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@felixrizzolli&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@fezvrasta&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@filiptammergard&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@flambe&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@francois2metz&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@g-cappai&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@githrdw&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@gitstart&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@gossi&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@greut&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@gufah&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@halitiince&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@hcvdhaar&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@henkerik&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@hobbes7878&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@hoishin&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@honzahruby&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@iabu94&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@ianvs&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@idesigncode&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@iqbalcodes6602&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@irangarcia&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@ivoilic&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@j3rem1e&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@jackw&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@jared-christensen&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@joaonunomota&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@joekarow&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@joevaugh4n&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@joeycozza&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@johnhunter&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@jonniebigodes&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@jonthenerd&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@joriswitteman&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@joshbolduc&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@jpzwarte&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@jreinhold&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@json-betsec&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@julien-deramond&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@junghoe&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@kaelig&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@karolstawowski&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@kasperpeulen&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@kawokas&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@kbazilio&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@kkirby&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@klescouar&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@kolife01&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@kota-kamikawa&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@kripod&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@kshmidt-digma&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@ksugawara61&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@kubijo&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@kuriacka&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@kylegach&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@kylemeenehan&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@kyletsang&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@larsrickert&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@legnaleurc&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@leniwen&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@literalpie&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@lucavazz&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@luk-z&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@machycek&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@maheshchandra10&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@manbearwiz&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@mandarini&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@mariasimo&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@mariocadenas&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@marklb&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@martinnabhan&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@masaya48&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@mastrzyz&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@mattlewis92&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@mauriciorobayo&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@mdornseif&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@medihack&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@mh-ahs&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@michens&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@mickmcgrath13&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@miily8310s&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@mlazari&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@mrzillagold&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@mvarendorff&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@naporin0624&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@nasvillanueva&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@natehouk&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@ndelangen&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@nikospapcom&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@nilsjacobsen&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@nkabrown&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@nlepage&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@notwoods&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@noviceguru&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@nsheaps&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@nvitius&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@omahs&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@orangecms&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@oruman&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@osnoser1&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@paoloricciuti&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@pascalfiv&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@piratetaco&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@pruthvip15&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@pure-js&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@rashidshamloo&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@re-taro&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@redbugz&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@reyronald&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@roel-t&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@rohanpoojary1107&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@roottool&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@rwaight&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@samvv&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@seriouz&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@shaunevening&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@sheriffmoose&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@shilman&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@showrin&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@sidnioulz&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@sitogi&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@sjwilczynski&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@smeagol74&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@sookmax&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@specialdoom&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@speelbarrow&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@spookyjelly&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@stegano&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@stilt0n&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@stof&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@stropitek&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@subhajit20&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@syabro&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@t99&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@taehyeon-envoi&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@taozhou-glean&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@tap-kim&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@thapasusheel&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@thisisanto&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@thtliife&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@tmeasday&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@tolkadot&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@tomo5524&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@tsvanharen&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@turtle601&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@tusharwebd&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@ubugnu&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@unional&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@usrrname&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@valentinpalkovic&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@vanessayuenn&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@vmizg&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@webblocksapp&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@wesgro&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@wilson2k&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@wise-introvert&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@wjdtjdgns&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@wouterk12&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@wuzhuobin&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@xueyawei&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@xyy94813&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@yannbf&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@ygkn&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@yilun-sun&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@yoshi2no&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@yossisaadi&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@youngboy&lt;/a&gt;, &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@zachtball&lt;/a&gt;, and &lt;a href="https://www.notion.so/Storybook-8-d8281e0e01c4419a92a66962a828101b?pvs=21" rel="noopener noreferrer"&gt;@zmarkan&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>devops</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Storybook’s Visual Tests addon enters beta</title>
      <dc:creator>Storybook</dc:creator>
      <pubDate>Thu, 15 Feb 2024 15:48:59 +0000</pubDate>
      <link>https://forem.com/storybookjs/storybooks-visual-tests-addon-enters-beta-3o5l</link>
      <guid>https://forem.com/storybookjs/storybooks-visual-tests-addon-enters-beta-3o5l</guid>
      <description>&lt;p&gt;&lt;a href="https://storybook.js.org/blog/storybook-8-beta/?ref=storybookblog.ghost.io"&gt;Storybook 8&lt;/a&gt; introduces a totally new workflow for safeguarding your UI from unexpected visual changes, via &lt;strong&gt;the Visual Tests addon&lt;/strong&gt;. Learn how it works and try the beta today.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is visual testing?
&lt;/h2&gt;

&lt;p&gt;The challenge of UI testing is that functional tests don’t give you the complete picture of how your UI works. For example, testing a login button might confirm the button’s logic but it won’t detect that the button is now completely covered by the nav bar. It’s functional for your test, but not for your users.&lt;/p&gt;

&lt;p&gt;You can solve this problem by using visual testing tools. When you introduce a code change, they visually diff image snapshots of your components to previous baseline versions. Then, you can either fix issues before merging to the main branch, or accept the changes and set new baselines for future tests. When combined with functional tests, this gives the best of both worlds: complete confidence that your app looks and works correctly.&lt;/p&gt;

&lt;p&gt;Historically, visual testing takes place in CI as part of your PR review process. It’s so effective that we even built a cloud service called Chromatic that is used across the industry to automatically turn stories into visual tests.&lt;/p&gt;

&lt;p&gt;The Visual Tests addon for Storybook brings a totally new approach, where you can now get visual diffs in Storybook at any stage of development. No need to wait on CI to confirm visual fidelity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get started
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Install
&lt;/h3&gt;

&lt;p&gt;You’ll need to be using the Storybook 8 beta to use the Visual Tests addon. If you initialize a new project in Storybook 8 using &lt;code&gt;npx storybook@next init&lt;/code&gt;, the addon will be installed automatically. If you upgrade an existing project using &lt;code&gt;npx storybook@next upgrade&lt;/code&gt;, you’ll need to manually add the addon using &lt;code&gt;npx storybook@next add @chromatic-com/storybook&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://storybook.js.org/docs/8.0/writing-tests/visual-testing"&gt;Learn more about setup in the docs&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Workflow
&lt;/h3&gt;

&lt;p&gt;Once setup is complete, when you next load Storybook, you’ll see a new addon panel for Visual Tests. You can run your first test by clicking the ▶️ button in the Storybook sidebar:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fph6ofjl25n650vufygs8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fph6ofjl25n650vufygs8.png" alt="VT addon, run tests" width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, after running tests, you can view and inspect diffs in the Storybook addon panel:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg9d560zelrshruakft8l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg9d560zelrshruakft8l.png" alt="VT addon, diffs in Storybook" width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the changes are intentional, accept them to set new baselines. If not, fix the detected changes, then restart the process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4l1owv48pp2unvptuxmf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4l1owv48pp2unvptuxmf.png" alt="VT addon, accept new baselines" width="800" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;High fidelity, high performance&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Chromatic is by far the fastest visual testing tool on the market, capable of processing thousands of stories per minute. But what’s fast in CI can feel slow in an interactive UI. So, as part of this addon’s development, we sped up the workflow by 78%. Faster tests make you more productive.&lt;/p&gt;

&lt;p&gt;This aligns with the theme of Storybook 8's improvements: performance. Among many other gains, you can now create 3x faster builds for testing workflows, and we quickened startup time in React projects by 20-40%.&lt;/p&gt;

&lt;p&gt;Finally, we created a beautiful addon UX. You can view the test status of your stories in the Storybook sidebar, which highlights stories needing your attention in yellow. You can also filter the sidebar to only show stories containing changes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flptiaonckbr28eosbrw1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flptiaonckbr28eosbrw1.png" alt="VT addon, sidebar" width="800" height="571"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Share your feedback
&lt;/h2&gt;

&lt;p&gt;The Visual Tests addon is in public beta and is being actively used by projects of all shapes and sizes. We’d love your feedback to help get it ready for a first stable release as part of Storybook 8.0 and Chromatic 3.0.&lt;/p&gt;

&lt;p&gt;Share any issues you encounter using Visual Tests addon with &lt;a href="//mailto:support@chromatic.com"&gt;the Storybook and Chromatic team&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>qa</category>
      <category>visualtesting</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Storybook 8 Beta</title>
      <dc:creator>Storybook</dc:creator>
      <pubDate>Tue, 06 Feb 2024 13:02:50 +0000</pubDate>
      <link>https://forem.com/storybookjs/storybook-8-beta-294f</link>
      <guid>https://forem.com/storybookjs/storybook-8-beta-294f</guid>
      <description>&lt;p&gt;&lt;strong&gt;Today, we’re proud to launch Storybook 8 in beta!&lt;/strong&gt; This latest iteration of Storybook continues our march towards an instant-on, seamless environment for all frontend developers. Check out the release highlights and try it out by upgrading today!&lt;/p&gt;

&lt;p&gt;🚀 Major performance improvements&lt;br&gt;
📱 New mobile UI&lt;br&gt;
📸 Automated visual tests&lt;br&gt;
🔬 Improved test utilities&lt;br&gt;
⚛️ Storybook for React Server Components&lt;br&gt;
👋 Adios, React dependency&lt;br&gt;
🧩 Ecosystem updates&lt;br&gt;
💯 Hundreds of fixes&lt;/p&gt;
&lt;h2&gt;
  
  
  Major performance improvements
&lt;/h2&gt;

&lt;p&gt;Storybook 8’s priority is improving Storybook’s compatibility and performance.&lt;/p&gt;

&lt;p&gt;First, we switched the default compiler for new projects from &lt;a href="https://babeljs.io/"&gt;Babel&lt;/a&gt; to &lt;a href="https://swc.rs/"&gt;SWC&lt;/a&gt; (Speedy Web Compiler). SWC is dramatically faster than Babel and requires zero configuration. We’ll continue to support Babel in any project currently using it.&lt;/p&gt;

&lt;p&gt;For React projects, we now auto-generate controls using &lt;code&gt;react-docgen&lt;/code&gt;. This reduces startup time by up to 20%, even for small projects!&lt;/p&gt;

&lt;p&gt;We also added a new &lt;code&gt;--test&lt;/code&gt; flag for faster test builds, so that you can bypass processes that are unnecessary for testing (like docs compilation). This triples the speed of static builds. &lt;a href="https://storybook.js.org/blog/optimize-storybook-7-6/?ref=storybookblog.ghost.io"&gt;Learn more&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Improved mobile support
&lt;/h2&gt;

&lt;p&gt;Storybook 8 revamps Storybook’s mobile UI.&lt;/p&gt;

&lt;p&gt;On mobile devices, Storybook’s sidebar and addon panel now appear at the bottom of the screen. This prevents the canvas from shrinking and makes it easier to navigate with your thumb.&lt;/p&gt;

&lt;p&gt;We also fixed a long-standing, super-annoying responsiveness bug, where UI state was lost when transitioning between desktop and mobile view.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VUAKejss--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://storybookblog.ghost.io/content/images/2024/02/UI-Mobile--3-.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VUAKejss--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://storybookblog.ghost.io/content/images/2024/02/UI-Mobile--3-.jpg" alt="https://storybookblog.ghost.io/content/images/2024/02/UI-Mobile--3-.jpg" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lastly, we just released a new version of &lt;a href="https://github.com/storybookjs/react-native"&gt;React Native Storybook&lt;/a&gt;: &lt;a href="https://storybook.js.org/blog/react-native-storybook-7/"&gt;RN Storybook 7&lt;/a&gt;. It brings major performance and compatibility improvements, including automatic story loading, improved error handling, stronger types, and much more.&lt;/p&gt;
&lt;h2&gt;
  
  
  Automatic visual tests
&lt;/h2&gt;

&lt;p&gt;Storybook gives you the superpower of using stories as test cases. You can compare stories before and after code changes and flag differences for review without needing to push a commit.&lt;/p&gt;

&lt;p&gt;To improve that process, we launched &lt;a href="https://chromatic.com/"&gt;Chromatic&lt;/a&gt; in 2017, a cloud service that lets you automate visual tests by comparing snapshots of your stories before and after every change.&lt;/p&gt;

&lt;p&gt;Storybook 8 closes the gap between Chromatic and Storybook with an official visual testing addon for Storybook (&lt;code&gt;@chromatic-com/storybook&lt;/code&gt;). This enables you to run visual tests of your stories on the fly without needing to commit your changes. Then, you can inspect the results in Storybook, inside your dev environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EMcN5Kkp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.chromatic.com/docs/_astro/visual-tests-enable.w4hlUgoF_jPTVp.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EMcN5Kkp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.chromatic.com/docs/_astro/visual-tests-enable.w4hlUgoF_jPTVp.webp" alt="https://www.chromatic.com/docs/_astro/visual-tests-enable.w4hlUgoF_jPTVp.webp" width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As part of today’s launch, &lt;code&gt;@chromatic-com/storybook&lt;/code&gt; is now available in public beta. Try it today by &lt;a href="https://www.chromatic.com/docs/visual-tests-addon/"&gt;heading to Chromatic’s docs&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Improved test utilities
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H5V6TdBw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://storybookblog.ghost.io/content/images/2024/02/Storybook---Integrations-1--2-.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H5V6TdBw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://storybookblog.ghost.io/content/images/2024/02/Storybook---Integrations-1--2-.jpg" alt="https://storybookblog.ghost.io/content/images/2024/02/Storybook---Integrations-1--2-.jpg" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Storybook 8 streamlines two existing test packages (&lt;code&gt;@storybook/jest&lt;/code&gt; and &lt;code&gt;@storybook/testing-library&lt;/code&gt;) into a single, more powerful testing library: &lt;code&gt;@storybook/test&lt;/code&gt;. It’s based on Vitest spies and expect, which have a much smaller installation footprint in your project. &lt;a href="https://storybook.js.org/blog/storybook-test/"&gt;Learn more&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  React Server Components
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jBlJ3D2B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://storybookblog.ghost.io/content/images/2024/02/Storybook---Integrations-2--3-.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jBlJ3D2B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://storybookblog.ghost.io/content/images/2024/02/Storybook---Integrations-2--3-.jpg" alt="https://storybookblog.ghost.io/content/images/2024/02/Storybook---Integrations-2--3-.jpg" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Many devs have asked us, ‘When will Storybook support RSCs?’ Storybook 8 provides the answers. Our latest iteration officially introduces experimental RSC support, initially limited to &lt;a href="https://nextjs.org/"&gt;Next.js&lt;/a&gt; projects.&lt;/p&gt;

&lt;p&gt;Why experimental? We’re still figuring out the best practices for building RSC components and pages. We also need to prove that our approach works well with other RSC frameworks like &lt;a href="https://waku.gg/blog/introducing-waku"&gt;Waku&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Learn more about &lt;a href="https://storybook.js.org/blog/storybook-react-server-components/"&gt;RSC support in Storybook 8&lt;/a&gt; and &lt;a href="https://storybook.js.org/blog/build-a-nextjs-app-with-rsc-msw-storybook/"&gt;how to use Storybook 8 to build an RSC app in isolation&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Adios, React dependency!
&lt;/h2&gt;

&lt;p&gt;In Storybook 7, we added a React peer dependency to make Storybook work with modern package managers like &lt;code&gt;pnpm&lt;/code&gt; and Yarn PnP. We prioritized package manager compatibility, but frankly, this sucked for Vue, Angular, Web-components, and Svelte users. It clashed with one of our primary goals of making users of all frameworks feel at home in Storybook.&lt;/p&gt;

&lt;p&gt;Storybook 8 removes the React dependency through smarter bundling. It provides the basis for a series of quality of life improvements for non-React users, which you can look forward to in Storybook 8 and beyond.&lt;/p&gt;
&lt;h2&gt;
  
  
  Hello, ecosystem!
&lt;/h2&gt;

&lt;p&gt;Every major release is an opportunity for Storybook to keep up with the ecosystem.&lt;/p&gt;

&lt;p&gt;Storybook 8 includes the following dependency changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bumps Node requirement to 18+&lt;/li&gt;
&lt;li&gt;Adds Vite 5 and Lit 3 support&lt;/li&gt;
&lt;li&gt;Upgrades MDX, prettier, eslint, and remark&lt;/li&gt;
&lt;li&gt;Drops support for Vue 2, Svelte 3, Angular 14, and Next &amp;lt;13.5&lt;/li&gt;
&lt;li&gt;Drops official Yarn 1 support (it still works, just unsupported)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In addition, we dropped support for Storyshots and provided an &lt;a href="https://storybook.js.org/docs/8.0/writing-tests/storyshots-migration-guide"&gt;upgrade guide&lt;/a&gt; to transition to other options. We also dropped support for the legacy &lt;code&gt;storiesOf&lt;/code&gt; story API.&lt;/p&gt;
&lt;h2&gt;
  
  
  Try Storybook 8 today
&lt;/h2&gt;

&lt;p&gt;Upgrade to Storybook 8 beta today with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;npx&lt;/span&gt; &lt;span class="nx"&gt;storybook&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;next&lt;/span&gt; &lt;span class="nx"&gt;upgrade&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We’re still working on automating certain aspects of the upgrade. But in the meantime, we’ve provided a &lt;a href="https://storybook.js.org/docs/8.0/migration-guide"&gt;migration guide&lt;/a&gt; to help fill in the gaps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get involved
&lt;/h2&gt;

&lt;p&gt;Ahead of the full launch, we’d love your help with battle-testing and QAing Storybook 8, to help us ship the best release possible.&lt;/p&gt;

&lt;p&gt;If you’re interested in taking part in our open source project, &lt;a href="https://github.com/orgs/storybookjs/projects/19/views/7?filterQuery=is:open+label:%22help+wanted%22"&gt;we’d love your help with tackling some of the following issues on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We’ll also be sharing more about how you can take part in community QA in the weeks ahead, so please keep an eye on our social media feeds on Twitter and LinkedIn.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>storybook</category>
      <category>frontend</category>
    </item>
    <item>
      <title>How to make Storybook 2-4x faster</title>
      <dc:creator>Storybook</dc:creator>
      <pubDate>Thu, 21 Dec 2023 14:51:25 +0000</pubDate>
      <link>https://forem.com/storybookjs/how-to-make-storybook-2-x-faster-1dem</link>
      <guid>https://forem.com/storybookjs/how-to-make-storybook-2-x-faster-1dem</guid>
      <description>&lt;p&gt;Storybook 7.6 contains massive performance improvements. Most will become the default in our next major release (Storybook 8.0), but you can adopt them today by opting in manually. Here’s how to get started!&lt;/p&gt;

&lt;p&gt;⛳️ --test flag for 2-4x faster test builds&lt;br&gt;
🩺 2.2x faster React docgen&lt;br&gt;
🧳 Streamline essential addons&lt;br&gt;
🌐 SWC for 50% faster Webpack projects&lt;br&gt;
🔬 @storybook/test for more streamlined and performant testing&lt;/p&gt;
&lt;h2&gt;
  
  
  2-4x faster builds with the --test flag
&lt;/h2&gt;

&lt;p&gt;If you’re building Storybook just for testing purposes, you can improve build speeds considerably by skipping processes like docgen analysis and docs compilation.&lt;/p&gt;

&lt;p&gt;To help you do this, we’ve introduced a new &lt;code&gt;--test&lt;/code&gt; flag for Storybook build. It lets you create a stripped-down build that completes 2-4x faster than normal. This can be used with the Storybook Test Runner or Chromatic and will be the default for Chromatic Visual Test Addon.&lt;/p&gt;

&lt;p&gt;Try your first test build by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx storybook build &lt;span class="nt"&gt;--test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  FAQ: Can I combine the --test and --coverage flags?
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;--test&lt;/code&gt; flag is designed to be as fast as possible, so it removes addons that are known to slow down build times and are unnecessary for functional tests.&lt;/p&gt;

&lt;p&gt;One such addon is &lt;code&gt;@storybook/addon-coverage&lt;/code&gt;, which is used in conjunction with the Storybook Test Runner to collect coverage information for your stories.&lt;/p&gt;

&lt;p&gt;If you’re using addon-coverage and running Storybook Test Runner against your built Storybook, the --test flag will strip out the coverage information. To configure the --test build to keep coverage information (at the expense of a slightly slower build), update &lt;code&gt;.storbyook/main.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// main.ts|js&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;disabledAddons&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@storybook/addon-docs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@storybook/addon-essentials/docs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2.2x faster React docgen
&lt;/h2&gt;

&lt;p&gt;Generating documentation via TypeScript is extraordinary. It shows how to use your component without you needing to write any docs manually:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv30tyq2a4xfp0dac2m5a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv30tyq2a4xfp0dac2m5a.png" alt="A button component in Storybook with docs generated from the TypeScript properties" width="800" height="763"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Storybook 7 analyzes React components using a tool called &lt;code&gt;react-docgen-typescript&lt;/code&gt;. It accurately parses out all your props based on outputs from the TypeScript compiler.&lt;/p&gt;

&lt;p&gt;However, there’s a catch: TypeScript is slow. Many modern tools like esbuild and Speedy Web Compiler (SWC) are fast precisely because they removed their TS dependency. In our tests, disabling TS-based docgen alone improved Storybook build speeds by 25% to 50%!&lt;/p&gt;

&lt;p&gt;In Storybook 8, we will default to react-docgen instead. It’s based on simple AST processing and doesn’t use any TS, so it’s significantly faster. There are certain patterns that it doesn’t handle as well, but the speed is worth it in most cases.&lt;/p&gt;

&lt;p&gt;Try this now in your Storybook 7.6 React project by using the following config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// .storybook/main.ts&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;StorybookConfig&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@storybook/your-framework&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;StorybookConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;framework&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@storybook/your-framework&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;stories&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../src/**/*.mdx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../src/**/*.stories.@(js|jsx|mjs|ts|tsx)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;typescript&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;reactDocgen&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-docgen&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// or false if you don't need docgen at all&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Streamline addon-essentials
&lt;/h2&gt;

&lt;p&gt;Storybook’s &lt;code&gt;addon-docs&lt;/code&gt; package lets you autogenerate docs or write them manually using MDX. These doc pages can include many components that all need bundling, which increases the bundle size and Storybook’s build times.&lt;/p&gt;

&lt;p&gt;If you’re not using &lt;code&gt;addon-docs&lt;/code&gt;, you can remove it from &lt;code&gt;addon-essentials&lt;/code&gt; by using the configuration below. In our tests, this change alone improved Storybook’s build time by 25%.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;StorybookConfig&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@storybook/your-framework&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;StorybookConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;stories&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="c1"&gt;// make sure you don't have MDX entries&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;addons&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="c1"&gt;// Before&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@storybook/addon-essentials&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="c1"&gt;// After&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@storybook/addon-essentials&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;docs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Using Webpack? Enable SWC
&lt;/h2&gt;

&lt;p&gt;In Storybook 7.6, you can cut the start times of Webpack projects by 50% or more by switching from Babel to SWC.&lt;/p&gt;

&lt;p&gt;Storybook 7.6 sets SWC as default for all new Storybook Webpack projects (aside from Angular). It also fixes SWC support for Preact and React fast-refresh.&lt;/p&gt;

&lt;p&gt;If using a Webpack-based framework, update your builder configuration in &lt;code&gt;.storybook/main.ts&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// .storybook/main.ts&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;StorybookConfig&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@storybook/your-framework&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;StorybookConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;framework&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@storybook/your-framework&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// react-webpack5|next|vue-webpack5|etc&lt;/span&gt;
    &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;useSWC&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: the --test flag won’t enable SWC by default. That’s because extra changes might be needed if you’re using Babel plugins (such as the Emotion plugin).&lt;/p&gt;

&lt;h2&gt;
  
  
  Two test packages for the price of one
&lt;/h2&gt;

&lt;p&gt;Storybook 7.6 replaces the &lt;code&gt;@storybook/jest&lt;/code&gt; and &lt;code&gt;@storybook/testing-library&lt;/code&gt; packages with &lt;code&gt;@storybook/test&lt;/code&gt;. It’s streamlined, smaller than before, and now based on Vitest rather than Jest. It pre-bundles all dependencies, which increases performance by giving the bundler less to do. In our example Mealdrop project, @storybook-test quickened build times by 10%.&lt;/p&gt;

&lt;p&gt;To get started, install the addon with your package manager:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install the addon with your package manager&lt;/span&gt;

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; @storybook/test@next
pnpm add &lt;span class="nt"&gt;-D&lt;/span&gt; @storybook/test@next
yarn add &lt;span class="nt"&gt;-D&lt;/span&gt; @storybook/test@next
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, update your stories:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gd"&gt;- import { expect } from '@storybook/jest';
- import { within, userEvent } from '@storybook/testing-library';
&lt;/span&gt;&lt;span class="gi"&gt;+ import { within, userEvent, expect } from '@storybook/test';
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  In other news...
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The road to Storybook 8.0 has begun
&lt;/h3&gt;

&lt;p&gt;The first version of our next major release, Storybook 8.0, is now available for you to try in alpha. Upgrade by running &lt;code&gt;npx storybook@next upgrade --prerelease&lt;/code&gt;. In the months ahead, we’ll be sharing all the goodness coming in 8.0. &lt;a href="https://github.com/storybookjs/storybook/discussions/25276?ref=storybookblog.ghost.io"&gt;Check out the release plan&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Storybook for React Server Components
&lt;/h3&gt;

&lt;p&gt;In the first of our Storybook 8.0 posts, we answered one of our community’s most frequent requests: &lt;a href="https://storybook.js.org/blog/storybook-react-server-components/"&gt;Storybook support for React Server Components&lt;/a&gt;. This experimental solution enables you to test RSCs inside Storybook, by rendering your server components in the client, and using mocks to simulate Node.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chromatic Visual Test Addon reaches private beta
&lt;/h3&gt;

&lt;p&gt;Over 1,000 devs are already signed up for early access to Chromatic Visual Test Addon, which brings 1-click visual tests to your Storybook. &lt;a href="https://storybook.js.org/blog/chromatic-visual-test-addon-private-beta/"&gt;Learn more about the private beta and get it now&lt;/a&gt;!&lt;/p&gt;

&lt;h3&gt;
  
  
  Happy holidays! 🎊
&lt;/h3&gt;

&lt;p&gt;Finally, we’d like to wish everyone a very happy holidays. 2023 has been a huge year for Storybook, and 2024 is set to be even stronger. We’ll be sharing a post next week about what’s coming up for Storybook in 2024, so be sure to watch this space.&lt;/p&gt;

&lt;p&gt;Thank you for being a part of Storybook’s community this year. We couldn’t do this without you!&lt;/p&gt;

</description>
      <category>storybook</category>
      <category>webdev</category>
      <category>frontend</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Storybook for React Server Components</title>
      <dc:creator>Storybook</dc:creator>
      <pubDate>Wed, 13 Dec 2023 14:05:27 +0000</pubDate>
      <link>https://forem.com/storybookjs/storybook-for-react-server-components-13n6</link>
      <guid>https://forem.com/storybookjs/storybook-for-react-server-components-13n6</guid>
      <description>&lt;p&gt;&lt;a href="https://nextjs.org/docs/app/building-your-application/rendering/server-components"&gt;React Server Components&lt;/a&gt; (RSC) are a new programming model for React-based web UIs. In contrast to traditional React “client” components, they only render on the server. This leads to a variety of performance and security benefits, but it is also a huge departure from the React tools and libraries we use today.&lt;/p&gt;

&lt;p&gt;One of the most impacted areas is component-driven development and testing. Tools like Storybook, Testing Library, and Playwright/Cypress Component Testing all assume that the user’s components are being rendered in the browser (or JSDom). But with server components, that’s no longer the case.&lt;/p&gt;

&lt;p&gt;This creates the question: &lt;em&gt;what does it mean to do isolated component development and testing for the server?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Today, I’m excited to release RSC support in Storybook’s Next.js framework as an experimental answer to this question. It is a purely client-side implementation, making it compatible with the entire ecosystem of Storybook addons and integrations.&lt;/p&gt;

&lt;p&gt;Read on to learn how it works, how to use it, and how you can try it today!&lt;/p&gt;

&lt;h2&gt;
  
  
  Servers are from Mars, clients are from Venus
&lt;/h2&gt;

&lt;p&gt;RSCs have two major differences from traditional client components, both of which are present in the following example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ApiCard.tsx&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ComponentProps&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Card&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./Card&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;findById&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./db&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;DbCard&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;contact&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;findById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;success&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;contact&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Card&lt;/span&gt; &lt;span class="p"&gt;{...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first difference is that our component is &lt;code&gt;async&lt;/code&gt;, which is not supported on the client.&lt;/p&gt;

&lt;p&gt;The second difference is that our component can access Node code directly, in this case the findById function that wraps an authenticated database connection.&lt;/p&gt;

&lt;p&gt;RSC does a lot under the hood to implement these two differences. This code only ever runs on the server, and it generates a static JSON-like structure which is streamed down to the client.&lt;/p&gt;

&lt;p&gt;Storybook is a pure client application. It produces a static build of pure HTML/CSS/JS with no Node in sight! So, supporting RSC would require figuring out either how to get RSCs to render on the client OR rearchitecting Storybook for servers.&lt;/p&gt;

&lt;p&gt;We started by focusing on the client approach. We want to minimize impact to our users, who have written millions of stories and hundreds of addons, all based on the current architecture.&lt;/p&gt;

&lt;p&gt;So, how the heck does it work?&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting async with it
&lt;/h2&gt;

&lt;p&gt;The first challenge to getting RSCs to render on the client is configuring how to support async components. It turns out that this is already supported (&lt;a href="https://github.com/acdlite/rfcs/blob/first-class-promises/text/0000-first-class-support-for-promises.md#why-cant-client-components-be-async-functions"&gt;unofficially&lt;/a&gt;) in Next.js’s canary React version. Special thanks to &lt;a href="https://github.com/JamesManningR"&gt;JamesManningR&lt;/a&gt; and &lt;a href="https://github.com/julRuss"&gt;julRuss&lt;/a&gt;, who contributed this simple solution!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Suspense&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ClientContact&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Suspense&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;DbCard&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nx"&gt;Suspense&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Starting in Storybook 8, &lt;code&gt;@storybook/nextjs&lt;/code&gt; can wrap your stories in &lt;code&gt;Suspense&lt;/code&gt; using the &lt;code&gt;experimentalNextRSC&lt;/code&gt; feature flag in &lt;code&gt;.storybook/main.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// .storybook/main.js&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;features&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;experimentalNextRSC&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also do this manually in 7.x versions of &lt;code&gt;@storybook/nextjs&lt;/code&gt; by wrapping your RSC stories in a &lt;a href="https://storybook.js.org/docs/writing-stories/decorators/"&gt;decorator&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This solution doesn’t yet work in other Storybook React frameworks (e.g. &lt;code&gt;react-vite&lt;/code&gt;, &lt;code&gt;react-webpack5&lt;/code&gt;) because they do not use Next.js’s canary version of React. Hopefully, this limitation is removed by the next version of React.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mocked and loaded
&lt;/h2&gt;

&lt;p&gt;Solving the &lt;code&gt;async&lt;/code&gt; problem only gets us halfway there. Our &lt;code&gt;DbCard&lt;/code&gt; component also references node code which fetches the data to populate the component. This is a problem in the browser, which cannot execute Node code!&lt;/p&gt;

&lt;p&gt;To work around this problem, we recommend establishing a clean data access layer. &lt;a href="https://nextjs.org/blog/security-nextjs-server-components-actions"&gt;This is also recommended as a best practice by the architect of RSC&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Once you have the data access later, you can mock it out so that it can run in the browser and so that you can precisely control the data that it returns to exercise different UI states (loading, error, success, etc.).&lt;/p&gt;

&lt;p&gt;You can mock the data access later using &lt;strong&gt;module mocks&lt;/strong&gt; or &lt;strong&gt;network mocks&lt;/strong&gt;, both of which are supported in Storybook.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Modules&lt;/strong&gt;: There is a community addon, &lt;a href="https://storybook.js.org/addons/storybook-addon-module-mock"&gt;storybook-addon-module-mock&lt;/a&gt;, that provides &lt;code&gt;jest.mock&lt;/code&gt;-style mocking (for Webpack projects only). You can also use &lt;a href="https://webpack.js.org/configuration/resolve/#resolvealias"&gt;webpack&lt;/a&gt;/&lt;a href="https://vitejs.dev/config/shared-options#resolve-alias"&gt;vite&lt;/a&gt; aliases for a simpler but more limited solution. We plan to provide ergonomic module mocking in a future version of Storybook.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Network APIs&lt;/strong&gt;: To mock network requests, we recommend &lt;a href="https://storybook.js.org/addons/msw-storybook-addon"&gt;Mock Service Worker (msw)&lt;/a&gt;. Storybook also supports numerous other &lt;a href="https://storybook.js.org/integrations/tag/mocking"&gt;network&lt;/a&gt; and &lt;a href="https://storybook.js.org/integrations/tag/graphql"&gt;GraphQL&lt;/a&gt; mocking addons.&lt;/p&gt;

&lt;p&gt;Bringing this back to our example, here’s what a story might look like using storybook-addon-module-mock:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="c1"&gt;// DbCard.stories.js&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;StoryObj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Meta&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@storybook/react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createMock&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;storybook-addon-module-mock&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;DbCard&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./DbCard&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./db&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;DbCard&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Success&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nx"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;moduleMock&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;mock&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createMock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;findById&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;mock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mockReturnValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Beyonce&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;img&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://blackhistorywall.files.wordpress.com/2010/02/picture-device-independent-bitmap-119.jpg&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;tel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;+123 456 789&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;b@beyonce.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
        &lt;span class="p"&gt;}))&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;mock&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Full demo: API + module mocking
&lt;/h2&gt;

&lt;p&gt;For the entire example above including both the module mocked database version and the MSW2-mocked API version, please check &lt;a href="https://6578430567214463f1df4629-htkembgskw.chromatic.com/?path=/docs/overview--docs"&gt;our full RSC demo Storybook&lt;/a&gt; or &lt;a href="https://github.com/shilman/storybook-rsc-demo"&gt;its GitHub repo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg86c1ui7lgzwcr3yeifg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg86c1ui7lgzwcr3yeifg.png" alt="Contact card component in Storybook" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s the catch?
&lt;/h2&gt;

&lt;p&gt;In this post, we’ve successfully written a story for our first RSC in Storybook and shown how this is all implemented under the hood.&lt;/p&gt;

&lt;p&gt;This was all pretty straightforward, but the approach has limitations:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fidelity&lt;/strong&gt;: The pure client implementation differs dramatically from the server-side, streaming RSC implementation that is running in your application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Convenience&lt;/strong&gt;: The mocking solutions here can definitely be improved. Not only is our current module mocking solution verbose, but it doesn’t play nicely with Storybook args/controls.&lt;/p&gt;

&lt;p&gt;We plan to work on both of these limitations in subsequent iterations, which is why we’ve labeled this solution as experimental.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use it today with the Storybook 8.0 alpha
&lt;/h2&gt;

&lt;p&gt;To use Storybook for RSC, upgrade your Storybook to 8.0-alpha today:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx storybook@next upgrade --prerelease
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, enable the experimental feature in your&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;storybook&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;// .storybook/main.js&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;features&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;experimentalNextRSC&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more information, see the &lt;a href="https://github.com/storybookjs/storybook/blob/next/code/frameworks/nextjs/README.md#experimental-react-server-components-rsc"&gt;&lt;code&gt;@storybook/nextjs&lt;/code&gt; README&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is the first of our posts detailing the contents of Storybook 8.0, our next major version, and we’ll have lots more to come in the months ahead. Keep up with all the news on the next release by &lt;a href="https://twitter.com/storybookjs"&gt;following us on social media&lt;/a&gt; or signing up for the Storybook newsletter!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>nextjs</category>
      <category>storybook</category>
      <category>vercel</category>
    </item>
    <item>
      <title>Introducing Storybook 7.5</title>
      <dc:creator>Storybook</dc:creator>
      <pubDate>Thu, 19 Oct 2023 14:24:39 +0000</pubDate>
      <link>https://forem.com/storybookjs/introducing-storybook-75-3lhp</link>
      <guid>https://forem.com/storybookjs/introducing-storybook-75-3lhp</guid>
      <description>&lt;p&gt;Storybook is the gold standard UI workshop environment. It’s used across the industry by teams at Monday.com, The Guardian, Intuit, and many more for developing, documenting, and testing UIs.&lt;/p&gt;

&lt;p&gt;Today, &lt;strong&gt;we're thrilled to introduce Storybook's latest version: Storybook 7.5&lt;/strong&gt;! It brings a range of new features that enhance the Storybook experience.&lt;/p&gt;

&lt;p&gt;Let's dive in!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⚡️ Vite 5 and Lit 3.0 support&lt;/li&gt;
&lt;li&gt;💨 2.2x faster start times for React TypeScript projects&lt;/li&gt;
&lt;li&gt;👻 storiesOf and storyStoreV6 officially deprecated&lt;/li&gt;
&lt;li&gt;✨ Many Angular improvements: argsToTemplate, new CLI debugging options, support for standalone directives, etc.&lt;/li&gt;
&lt;li&gt;🀄 Support rename font import for Next.js&lt;/li&gt;
&lt;li&gt;🔨 Fix Webpack5 build errors not being propagated&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Vite 5 support
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhxp8kiosd97dv2fph1go.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhxp8kiosd97dv2fph1go.png" alt="Storybook and Vite, connected like jigsaw puzzle pieces" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the major highlights of Storybook 7.0 was the official introduction of zero-config support for Vite. Vite has quickly grown into one of the ecosystem's favorite builders due to its highly competitive speeds.&lt;/p&gt;

&lt;p&gt;In Storybook 7.5, we're laying the groundwork for integration with Vite's next version: Vite 5.0! Storybook 7.5 includes Vite 5 as a peer dependency and dynamically imports all Vite functions to force the use of ES modules (as Vite 5 deprecates CJS methods).&lt;/p&gt;

&lt;h2&gt;
  
  
  2.2x faster startup times for React TypeScript projects
&lt;/h2&gt;

&lt;p&gt;Storybook 7.5 upgrades react-docgen to version 6. This change is a precursor to making react-docgen the default for auto-generating controls in Storybook 8.&lt;/p&gt;

&lt;p&gt;The upgrade dramatically improves Storybook's handling of TypeScript types and heavily decreases startup times for larger React Storybooks. For example: react-docgen 6 reduced startup times for &lt;a href="https://github.com/yannbf/mealdrop?ref=devto"&gt;the Mealdrop project&lt;/a&gt; (which we use for many of our tests) from 8.9s to 4.0s!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;storiesOf&lt;/code&gt; and &lt;code&gt;storyStoreV6&lt;/code&gt; officially deprecated
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;storiesOf&lt;/code&gt; was our original API for creating Storybook stories. In 2019 (Storybook 5.2), it was replaced by &lt;a href="https://storybook.js.org/docs/react/api/csf?ref=devto"&gt;Component Story Format (CSF)&lt;/a&gt; – a simpler, portable, and more performant successor.&lt;/p&gt;

&lt;p&gt;Since introducing CSF, new versions of Storybook have continued supporting storiesOf . This gave CSF time to mature and provided Storybook users with time to make the migration.&lt;/p&gt;

&lt;p&gt;It’s now four years later. CSF is on its third iteration and it’s used by virtually all Storybook projects. So, we’re taking this as a moment to officially deprecate our support for &lt;code&gt;storiesOf&lt;/code&gt; and &lt;code&gt;storyStoreV6&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmtcyctg9lvu5r8mmiifm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmtcyctg9lvu5r8mmiifm.png" alt="Component Story Format" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're still using &lt;code&gt;storiesOf&lt;/code&gt;, you can get started with the migration by using these two scripts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# 1. Convert storiesOf to CSF
npx storybook@latest migrate storiesof-to-csf --glob="**/*.stories.tsx" --parser=tsx

# 2. Convert CSF 2 to CSF 3
npx storybook@latest migrate csf-2-to-3 --glob="**/*.stories.tsx" --parser=tsx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/storybookjs/storybook/discussions/23177?ref=devto"&gt;Learn more about the deprecation and how to continue dynamically generating stories in CSF&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Improved Next.js support
&lt;/h2&gt;

&lt;p&gt;We've made several improvements to how Storybook works with Next.js.&lt;/p&gt;

&lt;p&gt;Firstly, Next.js users are are now able to alias import statements from &lt;code&gt;next/font/&lt;/code&gt; into Storybook.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Place this import in any relevant file – even in your stories

import { Inter as FontSans } from 'next/font/google'

export const fontSans = FontSans({
  subsets: ['latin'],
  variable: '--font-sans'
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We've also fixed an issue where &lt;code&gt;next/font&lt;/code&gt; wasn't working properly on Windows machines.&lt;/p&gt;

&lt;p&gt;Finally, we've set up monitoring for Next.js canary releases. This automatically checks whether Storybook runs with the latest Next.js canary, and means we can spot bugs and make fixes more quickly!&lt;/p&gt;

&lt;h2&gt;
  
  
  Angular improvements with &lt;code&gt;argsToTemplate&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Storybook 7.5 introduces the &lt;code&gt;argsToTemplate&lt;/code&gt; feature for Angular, designed to simplify the generation of Angular component templates. This function streamlines the handling of property and event bindings in Storybook stories.&lt;/p&gt;

&lt;p&gt;A significant benefit of argsToTemplate is that it addresses the challenge of how Angular treats undefined values in property bindings, which often led to misunderstandings. With this utility, there’s now enhanced support for Storybook controls, ensuring they align better with Angular’s standard behaviors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Try argsToTemplate
&lt;/h3&gt;

&lt;p&gt;In your story, integrate argsToTemplate within the template string, as seen below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { argsToTemplate } from '@storybook/angular';

export const Default: Story = {
  render: (args) =&amp;gt; ({
    props: args,
    template: `&amp;lt;app-template ${argsToTemplate(args)}&amp;gt;&amp;lt;/app-template&amp;gt;`,
  }),
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your arguments will correctly be mapped to property and event bindings!&lt;/p&gt;

&lt;h3&gt;
  
  
  Additional Angular highlights
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Added further builder options to the Angular Storybook builders: debugWebpack, webpackStatsJson and previewUrl (&lt;a href="https://github.com/storybookjs/storybook/pull/24388?ref=devto"&gt;#24388&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Standalone directives can now be used in Storybook (&lt;a href="https://github.com/storybookjs/storybook/pull/24448?ref=devto"&gt;#24448&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Added zone.js v0.14.x support (&lt;a href="https://github.com/storybookjs/storybook/pull/24367?ref=devto"&gt;#24367&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Fix Webpack 5 build errors not being propagated
&lt;/h2&gt;

&lt;p&gt;In Storybook 7, Webpack compilation errors wouldn't propagate to the terminal while Storybook was in dev mode. This &lt;em&gt;was&lt;/em&gt; the case in Storybook 6.5. It stopped working because of changes made to the webpack-dev-middleware library.&lt;/p&gt;

&lt;p&gt;Storybook 7.5 fixes that bug and that behavior has now returned. This means that you might now see more warnings that weren’t previously there. Fixing them may help make your Storybook more performant!&lt;/p&gt;

&lt;p&gt;If you’d like to customize the level of logs that Storybook provides, you can configure the &lt;a href="https://storybook.js.org/docs/react/api/main-config-log-level?ref=devto"&gt;logLevel&lt;/a&gt; option in your storybook/main.ts file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lit 3.0 support
&lt;/h2&gt;

&lt;p&gt;Finally, Storybook 7.5 also brings support for Lit 3.0!&lt;/p&gt;

&lt;p&gt;Lit is one of the leading libraries for developing web components. The new Lit 3.0 is the Lit team's first major release since early 2021.&lt;/p&gt;

&lt;p&gt;To carry on using Storybook as normal in your Lit 3 project, upgrade to Storybook 7.5 today!&lt;/p&gt;

&lt;h2&gt;
  
  
  Upgrade to Storybook 7.5
&lt;/h2&gt;

&lt;p&gt;To upgrade your Storybook to 7.5, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Upgrade your Storybook to 7.5
npx storybook@latest upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For guidance on upgrading from a version of Storybook that's earlier than Storybook 7, check out the Storybook 7 migration guide.&lt;/p&gt;

&lt;p&gt;Alternatively, for a fresh install, bootstrap Storybook into an existing app with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Install a fresh Storybook
npx storybook@latest init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Credits
&lt;/h2&gt;

&lt;p&gt;Huge thanks to everyone who contributed to Storybook 7.5! That includes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@almoghaimo, @anneau, @arup1221, @atreay, @bkfarnsworth, @bryanjtc, @cdedreuille, @chocoscoding, @decherneyge, @greut, @ianvs, @integrayshaun, @irangarcia, @j3rem1e, @johnhunter, @jonniebigodes, @jonthenerd, @jreinhold, @json-betsec, @julien-deramond, @kasperpeulen, @kbazilio, @kylegach, @legnaleurc, @martinnabhan, @masaya48, @mastrzyz, @mrzillagold, @natehouk, @ndelangen, @nsheaps, @omahs, @oruman, @osnoser1, @pure-js, @rohanpoojary1107, @roottool, @seriouz, @shilman, @sidnioulz, @stropitek, @tmeasday, @valentinpalkovic, @vanessayuenn, @wesgro, @yannbf, @yoshi2no, @yossisaadi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Get involved
&lt;/h2&gt;

&lt;p&gt;There are many ways to get involved with the Storybook community!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you are interested in contributing to Storybook, &lt;a href="https://github.com/storybooks/storybook"&gt;check out Storybook on GitHub&lt;/a&gt; – create an issue, or submit a pull request.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://discord.gg/AaVxNMD"&gt;Chat with us in Discord&lt;/a&gt;, share your skills, and help other users learn Storybook&lt;/li&gt;
&lt;li&gt;Stay up to date with Storybook news &lt;a href="https://twitter.com/storybookjs"&gt;on Twitter&lt;/a&gt;, &lt;a href="https://www.linkedin.com/company/storybookjs"&gt;on LinkedIn&lt;/a&gt;, or &lt;a href="http://eepurl.com/dBRwXH?ref=storybookblog.ghost.io"&gt;via our mailing list&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>angular</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Automatic visual tests in Storybook, plus 2.2x faster build times for React+TS</title>
      <dc:creator>Storybook</dc:creator>
      <pubDate>Wed, 06 Sep 2023 11:48:21 +0000</pubDate>
      <link>https://forem.com/storybookjs/automatic-visual-tests-in-storybook-plus-22x-faster-build-times-for-reactts-1emg</link>
      <guid>https://forem.com/storybookjs/automatic-visual-tests-in-storybook-plus-22x-faster-build-times-for-reactts-1emg</guid>
      <description>&lt;p&gt;Welcome to the latest edition of What’s New in Storybook, our monthly roundup of changes across the Storybook ecosystem.&lt;/p&gt;

&lt;p&gt;Below, learn about several of last month's biggest news items from Storybook land. Featuring:&lt;/p&gt;

&lt;p&gt;🚀 &lt;strong&gt;Visual Test addon&lt;/strong&gt;: Now in private alpha&lt;br&gt;
🏎️ &lt;strong&gt;&lt;code&gt;react-docgen v6&lt;/code&gt; support&lt;/strong&gt;: Build React+TS projects up to 2.2x faster&lt;br&gt;
🔎 &lt;strong&gt;Improved bug handling&lt;/strong&gt;: New categorization for crash reports&lt;br&gt;
📚 &lt;strong&gt;Updated tutorials&lt;/strong&gt;: How to run visual tests, Storybook in design systems, and interaction testing&lt;/p&gt;
&lt;h2&gt;
  
  
  Visual Tests addon – now in private alpha 🥳
&lt;/h2&gt;

&lt;p&gt;We kicked off August with the announcement of Storybook’s next big thing: &lt;a href="https://storybook.js.org/blog/visual-tests-addon-sneak-peek/"&gt;the Visual Tests addon&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqtjo4q9z083b0pe0k0xa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqtjo4q9z083b0pe0k0xa.png" alt="Visual Tests addon in Storybook" width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Visual Tests addon lets you use Storybook to run automatic tests of your stories. These tests can cover any combination of browsers, viewports, and themes. Plus, they all run at the same time, powered by &lt;a href="https://www.chromatic.com/storybook"&gt;Chromatic’s cloud-based infrastructure&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The addon has now entered &lt;a href="https://storybook.js.org/blog/visual-tests-addon-entering-private-alpha/"&gt;private alpha&lt;/a&gt;, and we're rolling out invites to the people on our early access list. To join early access, &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSdWah_4M3VtNevxkrN9cYXRpFos7f15hXOmd_ELwOM4ps-_0A/viewform?ref=storybookblog.ghost.io"&gt;sign up now →&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;code&gt;react-docgen v6&lt;/code&gt; support
&lt;/h2&gt;

&lt;p&gt;We're excited to share the first canary release of &lt;code&gt;react-docgen v6&lt;/code&gt; support in Storybook. This dramatically speeds up startup time for React+TS projects. On &lt;a href="https://github.com/yannbf/mealdrop"&gt;the medium-sized Mealdrop project&lt;/a&gt;, it made startup time 2.2x faster, reducing it from 8.9s to 4.0s (~55%).&lt;/p&gt;

&lt;p&gt;Our hope is to make &lt;code&gt;react-docgen v6&lt;/code&gt; the default in Storybook 8.0. The 7.0 solution, &lt;code&gt;react-docgen-typescript&lt;/code&gt;, runs the TypeScript compiler on your entire project source, which is slow. &lt;code&gt;react-docgen&lt;/code&gt; is much faster, but until recently it has been too limited for real-world projects.&lt;/p&gt;

&lt;p&gt;We’d love your help testing out the new version in your project. &lt;a href="https://github.com/storybookjs/storybook/pull/23825?ref=storybookblog.ghost.io"&gt;Learn how by following the instructions on the open PR that includes the canary →&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Improved error categorization for crash reports
&lt;/h2&gt;

&lt;p&gt;With different frameworks, renderers, addons, and other tech, every project containing Storybook is virtually unique. That can make it hard for us to spot where and how Storybook isn't working.&lt;/p&gt;

&lt;p&gt;One key source of insights that we use when triaging issues is our users’ crash reports. Crash reports are opt-in and completely anonymous, but they significantly widen our coverage of Storybook use cases.&lt;/p&gt;

&lt;p&gt;So that we can do more with the info we get from crash reports, we’re adding a new framework to categorize error codes. This will help us identify bugs and fix them more quickly.&lt;/p&gt;

&lt;p&gt;We’re always grateful for your support and every single contribution that our users make. To help us maintain Storybook, consider opting in to sending crash reports or report bugs to us via &lt;a href="https://github.com/storybookjs/storybook/issues"&gt;GitHub Issues&lt;/a&gt;. Thank you!&lt;/p&gt;
&lt;h2&gt;
  
  
  New learning materials
&lt;/h2&gt;

&lt;p&gt;To help you take your work with Storybook further and improve your skills, we published several new learning resources.&lt;/p&gt;

&lt;p&gt;Find out how you can use Storybook to maintain your design system ↓&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/tyNIspWhFyU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Learn to use Storybook to test your components' event handling and interactions ↓&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/BTIuTuoHsQc?start=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Read our updated guide to visually testing UI in 2023 (via Chromatic) ↓&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/chromatic" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yqZnu5-5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://media.dev.to/cdn-cgi/image/width%3D150%2Cheight%3D150%2Cfit%3Dcover%2Cgravity%3Dauto%2Cformat%3Dauto/https%253A%252F%252Fdev-to-uploads.s3.amazonaws.com%252Fuploads%252Fuser%252Fprofile_image%252F1140212%252F67b8b8e0-5ef0-4c2c-9d1e-604d9f754cb1.png" alt="chromatic"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/chromatic/how-to-run-visual-tests-in-2023-2lk1" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;How to run visual tests in 2023&lt;/h2&gt;
      &lt;h3&gt;Chromatic ・ Aug 25 '23&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#testing&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#frontend&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#storybook&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Community jobs
&lt;/h2&gt;

&lt;p&gt;We have 87 open roles for Storybook devs on our community jobs board! Currently, these include opportunities at organizations like JP Morgan, The Times, BT, eBay, and many more.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuis7fxrwwfa8jpqjc0r0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuis7fxrwwfa8jpqjc0r0.png" alt="Jobs" width="800" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.notion.so/chromatic-ui/Storybook-Jobs-Board-950e001e4a114a39980a5b09c3a3b3e1?pvs=4"&gt;View all and apply now →&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;That's all for this month! Thanks for joining us and catching up on all the latest from SB.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What would you like to see in future updates? Let us know! 🤝&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>ui</category>
      <category>ux</category>
    </item>
    <item>
      <title>Storybook's Visual Tests addon entering private alpha</title>
      <dc:creator>Storybook</dc:creator>
      <pubDate>Fri, 01 Sep 2023 12:37:31 +0000</pubDate>
      <link>https://forem.com/storybookjs/visual-tests-addon-entering-private-alpha-37mj</link>
      <guid>https://forem.com/storybookjs/visual-tests-addon-entering-private-alpha-37mj</guid>
      <description>&lt;p&gt;Earlier this month, &lt;a href="https://storybook.js.org/blog/visual-tests-addon-sneak-peek/"&gt;I shared the first look at Storybook’s upcoming Visual Tests addon&lt;/a&gt;. In one click, it will let you automatically test your stories for visual changes across all browsers and viewports.&lt;/p&gt;

&lt;p&gt;Today, I’m excited to share the private alpha and highlight the progress we’ve made so far. The project is now being worked on by six core developers with the goal to launch by the end of the year.&lt;/p&gt;

&lt;p&gt;Read on to preview the addon’s UI and &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSdWah_4M3VtNevxkrN9cYXRpFos7f15hXOmd_ELwOM4ps-_0A/viewform"&gt;find out more about signing up for early access&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Addon developer experience
&lt;/h2&gt;

&lt;p&gt;You’ll be able to access all the functions of the Visual Test addon through a new UI panel in Storybook. Here, you’ll be able to set up your tests, run them, and view results that highlight changes down to the pixel.&lt;/p&gt;

&lt;p&gt;Let’s break down how this works, step by step.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg9y3ryh1cy9fstq0xt6x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg9y3ryh1cy9fstq0xt6x.png" alt="The addon UI" width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Story status API to indicate changes
&lt;/h2&gt;

&lt;p&gt;We’re introducing a new experimental API to Storybook that shows the test status of each story in Storybook’s sidebar.&lt;br&gt;
Inspired by VSCode, it lets you see which stories have visual changes and need review without you having to open each story.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feejzkktmcm0zdcjtfrrv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feejzkktmcm0zdcjtfrrv.png" alt="Storybook sidebar showing tested and untested stories" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Run visual tests on-demand
&lt;/h2&gt;

&lt;p&gt;Press this button to run visual tests on-demand for all your stories. Behind the scenes, the button will kick off a static build and upload it to the cloud for testing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7toet2k0rlk336kcsx40.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7toet2k0rlk336kcsx40.png" alt="Run tests in the Visual Tests addon" width="800" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each story can be tested in different combinations of browsers, themes, viewports, a11y preferences, and other global settings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk735bfuym6i0ks1w98jy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk735bfuym6i0ks1w98jy.png" alt="A diagram showing the way in which each component leads to hundreds of variations – through the variations of stories, different browser engines, and viewport sizes" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Accept results and set new baselines
&lt;/h2&gt;

&lt;p&gt;Visual tests take screenshots of your stories and compare them to previous versions to catch any visual changes. In the addon, the latest screenshot of the story will be shown beside the live story. If there are visual differences, they’ll get highlighted in neon green so you can see them at a glance.&lt;/p&gt;

&lt;p&gt;After you’ve run tests, accept a story’s snapshot as a new baseline. When you test in the future, the story will be compared to that baseline.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4hscytvasatx4hhs63kz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4hscytvasatx4hhs63kz.png" alt="View results" width="800" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to get the private alpha
&lt;/h2&gt;

&lt;p&gt;The Visual Test addon is currently in private alpha, which means that it’s rolling out to a limited number of users.  If you’re interested:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSdWah_4M3VtNevxkrN9cYXRpFos7f15hXOmd_ELwOM4ps-_0A/viewform"&gt;👉 Sign up for early access&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’ve already signed up for early access, we’ll be emailing you over the next few weeks. Priority is given to developers with ongoing development on small-medium sized projects.&lt;/p&gt;

&lt;p&gt;We hope you’re as excited as we are about the Visual Test addon. We’ll continue shipping regular updates in anticipation for our public alpha.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/storybookjs/status/1697190521490256277"&gt;https://twitter.com/storybookjs/status/1697190521490256277&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s so great about visual testing?
&lt;/h2&gt;

&lt;p&gt;Visual tests are a pragmatic way to ensure that UI stays pixel-perfect by combatting UI regressions. Visual tests complement other types of tests, such as unit tests, interaction tests, and accessibility tests, to provide a comprehensive coverage for UI. &lt;a href="https://storybook.js.org/tutorials/visual-testing-handbook/"&gt;Learn more&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does this replace Chromatic?
&lt;/h2&gt;

&lt;p&gt;Nope. This addon is powered by &lt;a href="https://www.chromatic.com/"&gt;Chromatic&lt;/a&gt;. It gives you the ability to run tests in parallel using dedicated browser infrastructure, all from the convenience of Storybook.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>testing</category>
      <category>react</category>
      <category>storybook</category>
    </item>
  </channel>
</rss>
