diff --git a/CHANGELOG.prerelease.md b/CHANGELOG.prerelease.md
index 697526d7685d..0f95d73be3a1 100644
--- a/CHANGELOG.prerelease.md
+++ b/CHANGELOG.prerelease.md
@@ -1,3 +1,12 @@
+## 8.0.0-alpha.3
+
+- Addon-docs: Fix storybook MDX check - [#24696](https://github.com/storybookjs/storybook/pull/24696), thanks [@shilman](https://github.com/shilman)!
+- Addons: Remove unused postinstall package - [#25150](https://github.com/storybookjs/storybook/pull/25150), thanks [@shilman](https://github.com/shilman)!
+- Angular: Update Angular cli templates - [#25152](https://github.com/storybookjs/storybook/pull/25152), thanks [@Marklb](https://github.com/Marklb)!
+- Blocks: Fix Subtitle block for unattached docs pages - [#25157](https://github.com/storybookjs/storybook/pull/25157), thanks [@kripod](https://github.com/kripod)!
+- Ember: Fix @storybook/ember - [#23435](https://github.com/storybookjs/storybook/pull/23435), thanks [@francois2metz](https://github.com/francois2metz)!
+- Maintenance: Set engines field to Node.js >= 18 for packages - [#25105](https://github.com/storybookjs/storybook/pull/25105), thanks [@valentinpalkovic](https://github.com/valentinpalkovic)!
+
## 8.0.0-alpha.2
- Core: Maintenance changes for NextJS embedding - [#25086](https://github.com/storybookjs/storybook/pull/25086), thanks [@shilman](https://github.com/shilman)!
diff --git a/MIGRATION.md b/MIGRATION.md
index ae382420f682..78f0a0c5779f 100644
--- a/MIGRATION.md
+++ b/MIGRATION.md
@@ -3,6 +3,7 @@
- [From version 7.x to 8.0.0](#from-version-7x-to-800)
- [Implicit actions can not be used during rendering (for example in the play function)](#implicit-actions-can-not-be-used-during-rendering-for-example-in-the-play-function)
- [Core changes](#core-changes)
+ - [Dropping support for Node.js 16](#dropping-support-for-nodejs-16)
- [Autotitle breaking fixes](#autotitle-breaking-fixes)
- [React v18 in the manager UI (including addons)](#react-v18-in-the-manager-ui-including-addons)
- [Storyshots has been removed](#storyshots-has-been-removed)
@@ -10,6 +11,7 @@
- [New UI and props for Button and IconButton components](#new-ui-and-props-for-button-and-iconbutton-components)
- [Icons is deprecated](#icons-is-deprecated)
- [React-docgen component analysis by default](#react-docgen-component-analysis-by-default)
+ - [Removed postinstall](#removed-postinstall)
- [Framework-specific changes](#framework-specific-changes)
- [Angular: Drop support for Angular \< 15](#angular-drop-support-for-angular--15)
- [Next.js: Drop support for version \< 13.5](#nextjs-drop-support-for-version--135)
@@ -379,6 +381,10 @@ To summarize:
### Core changes
+#### Dropping support for Node.js 16
+
+In Storybook 8, we have dropped Node.js 16 support since it reached end-of-life on 2023-09-11. Storybook 8 supports Node.js 18 and above.
+
#### Autotitle breaking fixes
In Storybook 7, the file name `path/to/foo.bar.stories.js` would result in the [autotitle](https://storybook.js.org/docs/react/configure/overview#configure-story-loading) `path/to/foo`. In 8.0, this has been changed to generate `path/to/foo.bar`. We consider this a bugfix but it is also a breaking change if you depended on the old behavior. To get the old titles, you can manually specify the desired title in the default export of your story file. For example:
@@ -463,6 +469,10 @@ export default {
For more information see: https://storybook.js.org/docs/react/api/main-config-typescript#reactdocgen
+#### Removed postinstall
+
+We removed the `@storybook/postinstall` package, which provided some utilities for addons to programmatically modify user configuration files on install. This package was years out of date, so this should be a non-disruptive change. If your addon used the package, you can view the old source code [here](https://github.com/storybookjs/storybook/tree/release-7-5/code/lib/postinstall) and adapt it into your addon.
+
### Framework-specific changes
#### Angular: Drop support for Angular \< 15
diff --git a/code/addons/docs/ember/README.md b/code/addons/docs/ember/README.md
index 29af33a3b433..e1d907435883 100644
--- a/code/addons/docs/ember/README.md
+++ b/code/addons/docs/ember/README.md
@@ -51,7 +51,7 @@ Next, add the following to your `.storybook/preview.js` to load the generated js
```js
import { setJSONDoc } from '@storybook/addon-docs/ember';
-import docJson from '../storybook-docgen/index.json';
+import docJson from '../dist/storybook-docgen/index.json';
setJSONDoc(docJson);
```
diff --git a/code/addons/docs/package.json b/code/addons/docs/package.json
index ba540067019d..1372500054f6 100644
--- a/code/addons/docs/package.json
+++ b/code/addons/docs/package.json
@@ -83,7 +83,6 @@
"ember/**/*",
"html/**/*",
"svelte/**/*",
- "postinstall/**/*",
"react/**/*",
"vue/**/*",
"web-components/**/*",
@@ -108,7 +107,6 @@
"@storybook/global": "^5.0.0",
"@storybook/mdx2-csf": "^1.0.0",
"@storybook/node-logger": "workspace:*",
- "@storybook/postinstall": "workspace:*",
"@storybook/preview-api": "workspace:*",
"@storybook/react-dom-shim": "workspace:*",
"@storybook/theming": "workspace:*",
diff --git a/code/addons/docs/postinstall/presets.js b/code/addons/docs/postinstall/presets.js
deleted file mode 100644
index dd08ffa240b5..000000000000
--- a/code/addons/docs/postinstall/presets.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import fs from 'fs';
-import { presetsAddPreset, getFrameworks } from '@storybook/postinstall';
-import { logger } from '@storybook/node-logger';
-
-export default function transformer(file, api) {
- const packageJson = JSON.parse(fs.readFileSync('./package.json'));
- const frameworks = getFrameworks(packageJson);
-
- let err = null;
- let framework = null;
- let presetOptions = null;
- if (frameworks.length !== 1) {
- err = `${frameworks.length === 0 ? 'No' : 'Multiple'} frameworks found: ${frameworks}`;
- logger.error(`${err}, please configure '@storybook/addon-docs' manually.`);
- return file.source;
- }
-
- // eslint-disable-next-line prefer-destructuring
- framework = frameworks[0];
-
- const { dependencies, devDependencies } = packageJson;
- if (
- framework === 'react' &&
- ((dependencies && dependencies['react-scripts']) ||
- (devDependencies && devDependencies['react-scripts']))
- ) {
- presetOptions = {};
- }
-
- const j = api.jscodeshift;
- const root = j(file.source);
-
- presetsAddPreset(`@storybook/addon-docs/preset`, presetOptions, { root, api });
-
- return root.toSource({ quote: 'single' });
-}
diff --git a/code/addons/docs/src/plugins/mdx-plugin.ts b/code/addons/docs/src/plugins/mdx-plugin.ts
index 82f754fd3cd8..046e6c742bfd 100644
--- a/code/addons/docs/src/plugins/mdx-plugin.ts
+++ b/code/addons/docs/src/plugins/mdx-plugin.ts
@@ -5,7 +5,7 @@ import remarkExternalLinks from 'remark-external-links';
import { createFilter } from '@rollup/pluginutils';
import { dirname, join } from 'path';
-const isStorybookMdx = (id: string) => id.endsWith('stories.mdx') || id.endsWith('story.mdx');
+const isStorybookMdx = (id: string) => id.endsWith('.stories.mdx') || id.endsWith('.story.mdx');
/**
* Storybook uses two different loaders when dealing with MDX:
diff --git a/code/addons/docs/template/stories/docs2/Title.mdx b/code/addons/docs/template/stories/docs2/Title.mdx
index 08d1de73a4a7..f94dc947bb89 100644
--- a/code/addons/docs/template/stories/docs2/Title.mdx
+++ b/code/addons/docs/template/stories/docs2/Title.mdx
@@ -1,7 +1,9 @@
-import { Meta } from '@storybook/addon-docs';
+import { Meta, Subtitle } from '@storybook/addon-docs';
# Docs with title
+Subtitle
+
hello docs
diff --git a/code/e2e-tests/json-files.spec.ts b/code/e2e-tests/json-files.spec.ts
index d2026a7872b2..f205de3299ed 100644
--- a/code/e2e-tests/json-files.spec.ts
+++ b/code/e2e-tests/json-files.spec.ts
@@ -23,7 +23,7 @@ test.describe('JSON files', () => {
entries: expect.objectContaining({
'example-button--primary': expect.objectContaining({
id: 'example-button--primary',
- importPath: expect.stringContaining('Button.stories'),
+ importPath: expect.stringMatching(/button\.stories/i),
name: 'Primary',
title: 'Example/Button',
type: 'story',
diff --git a/code/frameworks/angular/package.json b/code/frameworks/angular/package.json
index 5ccb6476b4cd..721845b73330 100644
--- a/code/frameworks/angular/package.json
+++ b/code/frameworks/angular/package.json
@@ -111,7 +111,7 @@
}
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
},
"publishConfig": {
"access": "public"
diff --git a/code/frameworks/angular/template/cli/User.ts b/code/frameworks/angular/template/cli/User.ts
deleted file mode 100644
index 2f7fcecb5d74..000000000000
--- a/code/frameworks/angular/template/cli/User.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-// eslint-disable-next-line @typescript-eslint/no-empty-interface
-export interface User {}
diff --git a/code/frameworks/angular/template/cli/button.component.ts b/code/frameworks/angular/template/cli/button.component.ts
index 28dcc97e5526..badc6bad7f19 100644
--- a/code/frameworks/angular/template/cli/button.component.ts
+++ b/code/frameworks/angular/template/cli/button.component.ts
@@ -3,6 +3,7 @@ import { Component, Input, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'storybook-button',
+ standalone: true,
imports: [CommonModule],
template: `