Phoenix Storybook: a storybook-like UI interface for Phoenix components

If you’re using a different css file, ofcourse you need to compile it as well with assets.deploy:
"assets.deploy": ["tailwind default --minify", "tailwind storybook --minify", "esbuild default --minify", "phx.digest"],

1 Like

Released 0.7.2 with support for local_icons plus color_mode & icon related bugfixes

1 Like

Rendering the source code for a full component module could be too lengthy and slow (think core_components.ex with a lot of function components in a single module)

You can now decide, per story, to render only your function’s source code.

Shipped, but not released yet.

Released 0.8.0 with a lot of stuff regarding components, attributes, and slots documentation :rocket:

Function documentation is properly rendering markdown:


Attribute and slots documentation is rendering markdown and can be expanded when written on multiple lines.


It also features a new HTML preview tab for function components


:warning: it now requires phoenix_live_view 1.0.0


Full changelog 👇
5 Likes

0.8.1 is out, this is the first release ever for which I didn’t produce a single line of code.
Thank you @xxdavid @cschmatzler @sodapopcan for your contributions! :pray:

Changelog:

11 Likes

:waving_hand: It’s been a few months!

Version 0.9.0 (and 0.9.1) have just been released. Most of the work focused on migrating to Tailwind 4.x, which turned out to be quite a daunting task! :scream:

Here the changelog:

v0.9.1 (2025-07-04)

  • bugfix: asset finger-printing is now an opt-in config var (see README)

v0.9.0 (2025-07-04)

6 Likes

I am working on a component that optionally has a row_click attribute.
How can I pass the value of the row_click attribute (which is JS event) in my functional component for my story to be shown?

I got it working now,

 attributes: %{
          ...
          row_click:
            {:eval,
             ~S"""
             fn id -> 
             %JS{} 
             |> JS.toggle_class( "rotate-180", to: "#icon-user-with-accordion-#{id}") 
             |> JS.toggle_class("hidden", to: "#content-user-with-accordion-#{id}")
             end
             """}
        },
1 Like

:police_car_light: 0.9.2 has been released!

Changelog:

And a big question: when is it a good time to release a 1.0.0? :sweat_smile:

4 Likes

1.0.0 is out! :fire: :rocket:

Why a 1.0.0 now?
… because why not? :sweat_smile:

We’ve been using it in production for years, so it feels stable enough!

The changelog:

4 Likes

I just shipped support for permalinks to a component’s source on GitHub and GitLab.
The link includes precise highlighting of the component’s function. :bullseye:

:artist_palette: Bonus: dedicated icons for GitHub and GitLab.

Now on main, soon in 1.1.0

3 Likes