Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.11.0] - 2026-08-27
Section titled “[1.11.0] - 2026-08-27”- Component descriptions and prop documentation are extracted from JSDoc in a component’s
.astrofrontmatter, so autodocs pages populate withoutargTypesboilerplate in story files (#163, #110). Covers per-prop descriptions, types and defaults, select controls for literal union props, and types imported from other files including through tsconfigpathsaliases. Inherited DOM attributes are filtered out while destructured props are kept. Opt out with thedocgenframework option. @storybook/addon-vitestsupport: Storybook’s official test runner now runs Astro component stories as Vitest browser tests on Astro 5, 6 and 7 (#159). Stories render through the same server-side pipeline the canvas uses, and play functions run against the resulting DOM.
- Vite’s dependency scanner can now read
.astrofiles (#159), fixingFailed to run dependency scan. Skipping dependency pre-bundlingerrors that surfaced asVitest failed to find the current suiteorTypeError: Illegal invocationunder@storybook/addon-vitest. - The framework now reads the Vite version from the project’s own copy rather than the hoisted one, fixing incorrect Vite-version gates in monorepos (#159).
- The Storybook renderer entry-preview exclusion is now correctly scoped to the esbuild optimizer (Vite ≤7) instead of Vite 8 (#159).
- The internal Astro SSR Vite server is now closed when the parent server closes, fixing
close timed out after 10000msunder@storybook/addon-vitest(#159). - Islands declared inside
.astrocomponents nested inside a story’s top-level.astrofile are now collected for the static build, fixing missing hydration for such components in a published static Storybook (#168). - Vite plugins auto-loaded from the project’s
astro.configare now applied to every render pipeline (static prerender, hydrated-island build, dev SSR), fixing broken markup for components that depend on a project Vite plugin (#170).
[1.10.0] - 2026-08-02
Section titled “[1.10.0] - 2026-08-02”- Decorator support (#40): Storybook’s decorator API now works for Astro component stories — global (
.storybook/preview.js), component-level, and story-level decorators all compose into the story’s server-rendered tree in a single request, reusing the configured-component slot machinery. Three decorator shapes are supported: a component descriptor ({ component, props?, slots? }, with the story auto-placed in the default slot), an HTML string built aroundStory()(e.g.(Story) => `<div>${Story()}</div>`), and a bare Astro component (decorators: [Wrapper]) as sugar for the descriptor form. Works in dev mode, server mode, static prerender (decorators run at build time againstinitialGlobals), and the portable-stories testing API (composeStories/composeStory/renderStory). Framework component stories (React, Vue, etc.) keep Storybook’s own decorator composition; Vue decorators need the render-function form ((story) => () => h(...)), not the documented{ components, template }shape — see the Decorators guide for details.
setProjectAnnotationsis no longer silently ignored bycomposeStories/composeStoryin the testing API (#40). Any globaldecorators,parameters, etc. registered viasetProjectAnnotations([preview])are now applied as expected.- Bare Astro components used as decorators (
decorators: [Wrapper]) now work through real Storybook story preparation instead of throwing an “Astro components cannot be used in the browser” stub error (#40). - Imported SVG files are now correctly passed as Astro
SvgComponentargs (#154). Previously, an SVG imported asimport StarIcon from './star.svg'was treated as a plain object rather than detected as an Astro SVG component.
[1.9.0] - 2026-07-18
Section titled “[1.9.0] - 2026-07-18”- An array slot’s string entries are now sanitized together as one HTML document instead of each entry in isolation, so a wrapper tag’s opening and closing halves can live in separate array entries around a component (#149). Previously, sanitization auto-closed an entry like
'<div>'on its own and discarded a lone'</div>'in a later entry, so the component ended up rendered as a sibling after a self-closed wrapper instead of nested inside it.
Changed
Section titled “Changed”- Storybook updated to 10.5.2 (#151).
[1.8.0] - 2026-07-02
Section titled “[1.8.0] - 2026-07-02”- Configured-component slots: a
slotsentry can now be a{ component, props, slots }object, placing a child component in a parent’s slot with its own props and slot content — and slot entries can be arrays that mix plain HTML strings with (configured) components (#146). This extends the bare component-as-slot support from #128, which rendered the child with default props and no slots. A configured component’spropsare passed through untouched (not HTML-sanitized); itsslotsare sanitized like any other string slot. Component tags written inside a string are still not compiled — pass the imported component reference.
[1.7.1] - 2026-06-27
Section titled “[1.7.1] - 2026-06-27”storybook buildno longer fails withReferenceError: document is not definedduring the static prerender for CSF4 projects that register addons whose UI kit touches the DOM (e.g.@storybook/addon-a11y,@storybook/addon-themes) (#145). CSF4 stories import@storybook/preview, which re-exports the project’s.storybook/preview.tsand pulls those addons — and through themstorybook/internal/components, which readsdocumentat module load under Node. The prerender now stubs@storybook/previewwith a minimal CSF4 factory (it only needs each story’s component and args), sidestepping the project preview and its entire addon graph. This generalizes the earlier per-package docs stubs (#121, #130), which only covered@storybook/addon-docs/@storybook/blocks.
[1.7.0] - 2026-06-26
Section titled “[1.7.0] - 2026-06-26”- Astro components can now be passed as props (
args: { Icon }, rendered by the parent via<Comp />) and as slot content (args.slots.default, the Reactchildrenpattern) — closes #128. Component slot content keeps its own rendered markup; plain-string slots are still sanitized. - Astro 7 support — verified against Astro 7’s Rust compiler (now the default) and Vite 8 (Rolldown). No configuration changes are required to move an Astro 6 setup to Astro 7.
- New
integration/astro7andintegration/astro7-serverexample apps, plus anastro7smoke-test template. CI build, browser-test, smoke-test, and publish workflows now cover Astro 5, 6, and 7.
Changed
Section titled “Changed”- Peer dependency ranges widened to accept Astro 7 (
astro, and the@astrojs/*framework integrations at their Astro 7 majors) and@vitejs/plugin-react@6. get-tsconfigdependency aligned to the exact version Astro pins (5.0.0-beta.4), so Astro 6.4+/7 and the framework resolve a single deduped copy that exposes bothgetTsconfigandreadTsconfig.
- Images served from the project’s
public/directory now render in the static build —/@fs/<root>/public/...URLs are now rewritten to their served root path (e.g./images/logo.png). optimizeDeps.esbuildOptionsis now only set on Vite ≤7, removing the deprecation warning emitted under Vite 8.- Storybook dev server no longer hangs with a blank preview under Astro 7 / Vite 8.
@vitejs/plugin-reactis now an optional peer dependency, fixingERESOLVEon projects without React that use Vite 7.Datestory args are no longer corrupted before rendering — the arg serializer now only recurses into plain objects.Dateargs also survive the static build (renderMode: 'static') prerender path.
[1.6.0] - 2026-06-19
Section titled “[1.6.0] - 2026-06-19”- Default docs story height set in renderer for consistent documentation views
- Font CSS is now injected into the render response so fonts declared in
astro.configload correctly in the browser @storybook/blocksstubbed in SSR prerender to fixdocument is not definederrors*.astrotype shim now auto-applied via triple-slash reference indist/index.d.ts- TypeScript errors across the framework package resolved
- Default docs story height now applied to CSF-factory story previews
- Replaced deprecated
tsconfckdependency withget-tsconfig - Astro component scripts now re-run on story navigation
[1.5.0] - 2026-06-13
Section titled “[1.5.0] - 2026-06-13”Changed
Section titled “Changed”- Default
renderModeis now'static'instead of'server'
AstroComponentFactorytype is now callable to match Astro language server shape- Child component scoped styles are now correctly loaded when rendering parent stories
- Hybrid CSS injection approach resolves ‘No Astro CSS’ error in certain configurations
[1.4.0] - 2026-06-09
Section titled “[1.4.0] - 2026-06-09”- Astro 6 Font Provider API — font providers declared in
astro.configare now resolved and injected during Storybook SSR
- User
astro.configintegrations are now auto-loaded into Vite, so framework-specific plugins (e.g.@astrojs/react) no longer need manual configuration - Tsconfig path aliases (e.g.
@/components/...) now resolve correctly for embedded island hydration - Renderer annotations are now composed into
definePreviewfor CSF4 compatibility
[1.3.0] - 2026-06-06
Section titled “[1.3.0] - 2026-06-06”- Factory story-rule mocks —
defineStoryRulesnow supports factory functions for dynamic mock values
- Date props (e.g.
pubDate) now survive JSON serialization across the render pipeline — previously causeddate.toISOString is not a functionerrors in components like FormattedDate - Restored missing
./nodeexport dropped during dist migration - Removed preset re-export from index entry to prevent bundler conflicts and excluded framework from Vite
optimizeDeps - Hydrated framework component styles now emitted correctly in static prerender builds
defineStoryRulesandStoryRuletypes moved to the./nodeentry so they resolve in Node-only contexts- Scoped
hasDefaultExportcheck to.jsx/.tsxfiles only in the hydratable component scan - Renderer now clears the canvas when switching between framework renderers, preventing stacked DOM from different frameworks
- Suppressed unanalyzable dynamic import warning emitted by Vite during SSR
- Restored built server hydration and interactive behavior for server-mode stories
- Astro container now loaded via Vite SSR for correct slot class identity
- Excluded
fseventsandpreview-apifromoptimizeDepsto prevent bundling errors
Changed
Section titled “Changed”- Unified Astro render pipeline and shared production render runtime across dev, static, and server modes
- Simplified Vite plugin naming conventions
- Integration examples now consume compiled package dist instead of source
[1.2.0] - 2026-05-09
Section titled “[1.2.0] - 2026-05-09”- Controls panel is now automatically disabled for Astro stories in production (static Storybook) builds
- Resolved broken images and escaped slot HTML in static prerender
- Alpine.js component detection no longer incorrectly includes plain
.ts/.jsfiles in the hydratable source scan - Svelte and Vue component chunks now emitted directly instead of through virtual modules, improving static build compatibility
- Prevented
vite-plugin-sveltefrom processing component virtual module stubs - Passthrough image service now correctly injected during Astro 6 build prerender
- React plugin
includefilter in vitest configs now uses a RegExp for compatibility with more project setups setProjectAnnotations,composeStory, andcomposeStoriesare now generic over renderer type for improved TypeScript support- Widened
@vitejs/plugin-vuepeer dep range to^5.2.3 || ^6.0.0and@vitejs/plugin-vue-jsxto^4.1.2 || ^5.0.0— fixes install conflict when using@astrojs/vue@6
[1.1.1] - 2026-05-07
Section titled “[1.1.1] - 2026-05-07”- Stubbed
astro:toolbar:internalvirtual module in Storybook context to prevent build errors with Astro’s internal toolbar module - Renderer now resolved via
import.meta.resolvefor compatibility with pnpm installations
[1.1.0]
Section titled “[1.1.0]”- Nested Astro component rendering support — components can now include other Astro components as children
- Image support via astro:assets Image component — integrated passthrough image service into the renderer
- definePreview and defineMain helpers for improved type safety and DX in preview.js and main.js files
- Pre-release smoke test infrastructure — validates compiled packages work in real Astro 5 and 6 projects before publishing
- Astro integration virtual module stubs (@astrojs/react:opts, astro:preact:opts, etc.)
- TypeScript declarations now properly generated with tsconfig.json in both packages
- Resolved implicit any and Integration[] | undefined type errors in middleware plugin
- Virtual module ambient declarations now globally visible across the framework
- Middleware path correctly resolved from compiled dist chunks
- Global setup correctly compiled and resolved from dist/
- Server entry resolved correctly from package root for tarball installations
- Framework package now includes @storybook/builder-vite in smoke test dependencies
- Removed invalid —no-telemetry flag from storybook build
- Fixed portable timeout wrapper in smoke test orchestration
Changed
Section titled “Changed”- Release Manager skill updated with release branch cutting workflow
- Documentation updated for nested component support and assets handling
[1.0.3] - 2026-03-24
Section titled “[1.0.3] - 2026-03-24”- Fixed Astro 5.17.2+ compatibility by requiring Vite 6.4.1+ — the framework package previously allowed Vite 5.x which caused “Cannot read properties of undefined (reading ‘name’)” error due to missing Vite 6+
this.environmentfeature
[1.0.2] - 2026-03-24
Section titled “[1.0.2] - 2026-03-24”- Vite 5.4.0+ support — framework package now compatible with Astro 5 projects using Vite 5.x
- Astro 5 projects with Vite 5.4.21+ can now install
@storybook-astro/frameworkwithout peer dependency conflicts
[1.0.1] - 2026-03-24
Section titled “[1.0.1] - 2026-03-24”storybook devnow works correctly with fresh npm installs — previously produced aFailed to load astro-prerendered-stories.json. Received 404 Not Founderror or a blank “Astro Component / requires server-side rendering” placeholder- Added
@storybook-astro/rendererto ViteoptimizeDeps.excludein the framework preset, preventing esbuild pre-bundling from strippingimport.meta.hotout of the renderer chunk - Changed
getViteHot()in the renderer to accessimport.meta.hotdirectly rather than via an intermediate variable — Vite’simportAnalysisplugin detects hot usage by static analysis on the literalimport.meta.hotstring; the previous indirect pattern compiled by tsup was invisible to this analysis renderAstroToCanvasnow catches a prerendered stories fetch failure gracefully and falls through to HMR rendering with a clear console warning, instead of crashing with a confusing network error (defensive fallback)
[1.0.0] - 2026-03-24
Section titled “[1.0.0] - 2026-03-24”- Stable 1.0.0 release with production-ready Storybook Astro framework
- Full support for Astro 5 (5.5.3+) and Astro 6
- Multi-framework support: React, Vue, Svelte, Solid, Preact, Alpine.js
- Server-side rendering with middleware pipeline
- Portable stories (composeStories) for vitest integration
- Comprehensive testing utilities and framework integration helpers
Changed
Section titled “Changed”- Framework now production-ready after extensive beta testing and monorepo restructuring
- Improved documentation and Getting Started guide
- Enhanced website with component demos across all frameworks
[0.1.0-beta.13] - 2026-02-18
Section titled “[0.1.0-beta.13] - 2026-02-18”Changed
Section titled “Changed”- Documentation and website updated to reflect support for both Astro 5 (5.5.3+) and Astro 6 Beta
- Framework package description, README, Getting Started guide, and root README now list Astro 5 + 6
[0.1.0-beta.12] - 2026-02-17
Section titled “[0.1.0-beta.12] - 2026-02-17”Changed
Section titled “Changed”- Migrated repository from
lukemcd/storybook-astrotostorybook-astro/storybook-astro - Restructured as a monorepo with Yarn workspaces (
packages/@storybook-astro/*,apps/*) - Marketing website separated into
apps/website/ - Storybook demo/test project moved to
apps/sandbox-astro6/ - Added Astro 5 sandbox (
apps/sandbox-astro5/) for cross-version compatibility testing - Root
package.jsonstripped to monorepo config with shared devDeps only
- Getting Started guide (
docs/GETTING_STARTED.md) with detailed story file and Astro slots documentation - Package README for npm display
findPackageDirhelper incjsInteropPluginfor monorepo-awarenode_modulesresolution
cjsInteropPluginnow walks up fromprocess.cwd()to find hoisted packages in monorepo structure- ESLint config updated for monorepo paths and Svelte parser compatibility
- CI workflow updated with workspace-based builds and
timeoutfor hung Storybook processes - Website build fixes: resolved missing assets, styles, and README path for monorepo layout
[0.1.0-beta.7] - 2026-02-16
Section titled “[0.1.0-beta.7] - 2026-02-16”- Ensure
integrations ?? []guard survives tsup compilation (default parameter was stripped)
[0.1.0-beta.6] - 2026-02-16
Section titled “[0.1.0-beta.6] - 2026-02-16”- Handle undefined
integrationsoption — Storybook now starts without requiring integrations in framework options - Add
@storybook/builder-viteto install instructions
[0.1.0-beta.5] - 2026-02-16
Section titled “[0.1.0-beta.5] - 2026-02-16”- Use
npm publishcompatible version for@storybook-astro/rendererdependency (wasworkspace:*which only Yarn resolves)
[0.1.0-beta.4] - 2026-02-16
Section titled “[0.1.0-beta.4] - 2026-02-16”- Remove wildcard
*hard dependencies (react, vue, svelte, etc.) from framework package that caused install failures — these are peer dependencies only
[0.1.0-beta.3] - 2026-02-16
Section titled “[0.1.0-beta.3] - 2026-02-16”- Astro 6 peer dependency fix was missing from beta.2 publish due to branch sync issue
[0.1.0-beta.2] - 2026-02-16
Section titled “[0.1.0-beta.2] - 2026-02-16”- Astro 6 peer dependency compatibility —
astropeer dep now accepts^5.5.3 || ^6.0.0-beta.0 - All
@astrojs/*integration peer deps updated for Astro 6 beta versions
yarn lintandyarn lint:fixscripts- Versioning and branching strategy documentation (
docs/VERSIONING.md) - Storybook docs panel typography overrides for light background readability
- Mobile hamburger navigation for the website
Changed
Section titled “Changed”- Accordion components updated to dark theme styling across all 7 frameworks
- Website “Components Demo” renamed to “Sample Components”
- Navigation reordered: About, Contribute, Sample Components, Storybook Demo
- About page text contrast improved (
#c9d1d9for paragraphs/lists, styled inline code and code blocks)
[0.1.0-beta.1] - 2025-06-15
Section titled “[0.1.0-beta.1] - 2025-06-15”- Astro 6 component rendering in Storybook via the Container API
- Multi-framework support: React, Vue, Svelte, Solid, Preact, Alpine.js
- Server-side rendering with middleware pipeline
- Portable stories (
composeStories) for vitest integration - Testing utilities (
testStoryRenders,testStoryComposition) - Framework integration helpers with glob-based routing
- Astro website with component demos and documentation
- Header and Footer components with configurable props and Storybook controls
- Contribute page and CONTRIBUTING.md with branching strategy
- Requires Astro 6 (beta) and Storybook 8.6+
- This is the first public beta release under the
@storybook-astroorganization