npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@juxtapose/storybook

v0.13.4

Published

Storybook addon for juxtapose — review visual diffs next to the story that produced them.

Readme

@juxtapose/storybook

Storybook addon for juxtapose — review visual diffs next to the story that produced them.

pnpm add -D @juxtapose/storybook
// .storybook/main.js
export default {
  addons: ['@juxtapose/storybook'],
};

A Juxtapose tab appears in the addon panel. From there you can capture the current story or the whole suite, compare against the baseline four ways (side by side with a diff overlay, a draggable slider, an onion crossfade, or flicker), approve changes, and copy a prompt with the recorded changes and image paths for your agent.

juxtapose also registers as a test provider: a Juxtapose row in Storybook's testing module at the bottom of the sidebar, and Storybook's Run tests button runs the visual suite alongside your other tests. The test provider needs Storybook 8.5 or later and is checked against 8.6 and 10.6. On earlier versions the row doesn't appear; the panel works either way.

The What changed section uses the existing report's structural summary, with expandable before/after details, evidence limits, and unexplained regions. When available, it also shows flake evidence and suggested configuration you can select and copy. Suggestions are not applied automatically. Renderer recovery reports an exact hash match when successful; it does not establish a root cause. These explanations require no additional captures or analysis.

Capture errors, cancellation, and failed runs are shown explicitly. A failed run may leave the previous report visible, labelled as such. Approval is unavailable for capture errors or confirmed unstable results; eligible approvals still take a fresh confirming capture. Missing baseline images show the current capture and available structural evidence, without comparison controls.

Keyboard: j/k next and previous pending capture (including variants), a approve, s side by side, w wipe slider, o onion, f flicker, d diff overlay, u dim unchanged areas, and z loupe. Shortcuts ignore text inputs, modifier keys, and repeated key events. Approval shortcuts obey the same guards as the buttons.

The wipe slider supports pointer dragging, arrow keys (1%; Shift for 10%), and Home/End. Flicker has a pause/play control, starts paused when reduced motion is requested, and pauses while the browser tab is hidden. If copying an agent prompt fails, its text remains selectable in the panel.

The addon mounts its API inside Storybook's own dev server, so there is no second process to run and no port to configure.

MSW-backed stories are supported: Storybook captures allow service workers. Configure MSW in your Storybook, serve its worker asset in both development and static builds, and await worker readiness in your preview/loader before fetching mocked data. The addon does not install or configure MSW for you. CI verifies real MSW responses in repeated captures; the example's Msw.stories.jsx shows the setup. This is separate from URL-only jux snap, which blocks service workers.

Full documentation: https://github.com/juxtapose-dev/juxtapose

MIT © Magic Factory LLC