diff --git a/changelog.md b/changelog.md
index 94e06ad859c8..5ee8cfef04a1 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,67 @@
+
+# 10.4.0 (2023-07-10)
+[Full Changelog](https://github.com/GoogleChrome/lighthouse/compare/v10.3.0...v10.4.0)
+
+We expect this release to ship in the DevTools of [Chrome 117](https://chromiumdash.appspot.com/schedule), and to PageSpeed Insights within 2 weeks.
+
+## New Contributors
+
+Thanks to our new contributors 👽🐷🐰🐯🐻!
+
+- Sanjaiyan Parthipan @sanjaiyan-dev
+
+## New Audits
+
+* add hidden, 0-weight a11y audits ([#15216](https://github.com/GoogleChrome/lighthouse/pull/15216))
+* aria-dialog-name, aria-text, link-in-text-block, select-name ([#15159](https://github.com/GoogleChrome/lighthouse/pull/15159))
+
+## Core
+
+* remove unnecessary references to legacy gatherer ([#15236](https://github.com/GoogleChrome/lighthouse/pull/15236))
+* update residual usages of legacy runner ([#15227](https://github.com/GoogleChrome/lighthouse/pull/15227))
+* compute TBT impact for main thread tasks ([#15175](https://github.com/GoogleChrome/lighthouse/pull/15175))
+* support ts targets before es2022 ([#15189](https://github.com/GoogleChrome/lighthouse/pull/15189))
+* byte-efficiency: compute FCP & LCP savings ([#15104](https://github.com/GoogleChrome/lighthouse/pull/15104))
+* config: add more validation from legacy ([#15211](https://github.com/GoogleChrome/lighthouse/pull/15211))
+* link-text: add tamil keywords to blocklist ([#15152](https://github.com/GoogleChrome/lighthouse/pull/15152))
+* long-tasks: add more task information to debugData ([#15198](https://github.com/GoogleChrome/lighthouse/pull/15198))
+* network-recorder: set target type of unfinished request ([#15232](https://github.com/GoogleChrome/lighthouse/pull/15232))
+* non-composited-animations: add CLS savings as always 0 ([#15099](https://github.com/GoogleChrome/lighthouse/pull/15099))
+* prioritize-lcp-image: add LCP savings ([#15229](https://github.com/GoogleChrome/lighthouse/pull/15229))
+* proto: add errorStack to AuditResult ([#15187](https://github.com/GoogleChrome/lighthouse/pull/15187))
+* redirects: add FCP and LCP savings ([#15228](https://github.com/GoogleChrome/lighthouse/pull/15228))
+* source-maps: support BOM markers and CORB prefix ([#15224](https://github.com/GoogleChrome/lighthouse/pull/15224))
+* stacks: add wix ([#15171](https://github.com/GoogleChrome/lighthouse/pull/15171))
+* unsized-images: add CLS savings as always 0 ([#15196](https://github.com/GoogleChrome/lighthouse/pull/15196))
+* viewport: add INP savings ([#15071](https://github.com/GoogleChrome/lighthouse/pull/15071))
+* work-during-interaction: add INP savings ([#15176](https://github.com/GoogleChrome/lighthouse/pull/15176))
+
+## Report
+
+* use fixed position for hidden radios ([#15181](https://github.com/GoogleChrome/lighthouse/pull/15181))
+
+## Deps
+
+* upgrade puppeteer to 20.8 ([#15226](https://github.com/GoogleChrome/lighthouse/pull/15226))
+* upgrade third-party-web to 0.23.3 ([#15213](https://github.com/GoogleChrome/lighthouse/pull/15213))
+
+## I18n
+
+* import ([#15243](https://github.com/GoogleChrome/lighthouse/pull/15243))
+
+## Tests
+
+* save smokehouse failures, improve bundle runner logging ([#15235](https://github.com/GoogleChrome/lighthouse/pull/15235))
+* remove usages of legacy driver ([#15230](https://github.com/GoogleChrome/lighthouse/pull/15230))
+* a11y: use regex for target size explanation ([#15231](https://github.com/GoogleChrome/lighthouse/pull/15231))
+* ci: skip puppeteer Chrome download ([#15177](https://github.com/GoogleChrome/lighthouse/pull/15177))
+* config: add unit tests from legacy config ([#15209](https://github.com/GoogleChrome/lighthouse/pull/15209))
+* devtools: fix e2e compile error ([#15210](https://github.com/GoogleChrome/lighthouse/pull/15210))
+* devtools: remove parallel modifier from e2e tests ([#15172](https://github.com/GoogleChrome/lighthouse/pull/15172))
+* issues-mixed-content: use new site for testing ([#15241](https://github.com/GoogleChrome/lighthouse/pull/15241))
+* runner: drop usages of legacy runner ([#15047](https://github.com/GoogleChrome/lighthouse/pull/15047))
+* smoke: expect server-response-time to be greater than 0 ([#15188](https://github.com/GoogleChrome/lighthouse/pull/15188))
+
# 10.3.0 (2023-06-13)
[Full Changelog](https://github.com/GoogleChrome/lighthouse/compare/v10.2.0...v10.3.0)
diff --git a/core/test/fixtures/fraggle-rock/reports/sample-flow-result.json b/core/test/fixtures/fraggle-rock/reports/sample-flow-result.json
index a416c6cdfb6c..d172c7f97b90 100644
--- a/core/test/fixtures/fraggle-rock/reports/sample-flow-result.json
+++ b/core/test/fixtures/fraggle-rock/reports/sample-flow-result.json
@@ -2,7 +2,7 @@
"steps": [
{
"lhr": {
- "lighthouseVersion": "10.3.0",
+ "lighthouseVersion": "10.4.0",
"requestedUrl": "https://www.mikescerealshack.co/",
"mainDocumentUrl": "https://www.mikescerealshack.co/",
"finalDisplayedUrl": "https://www.mikescerealshack.co/",
@@ -8281,7 +8281,7 @@
},
{
"lhr": {
- "lighthouseVersion": "10.3.0",
+ "lighthouseVersion": "10.4.0",
"finalDisplayedUrl": "https://www.mikescerealshack.co/search?q=call+of+duty",
"fetchTime": "2023-01-13T23:27:51.982Z",
"gatherMode": "timespan",
@@ -12293,7 +12293,7 @@
},
{
"lhr": {
- "lighthouseVersion": "10.3.0",
+ "lighthouseVersion": "10.4.0",
"finalDisplayedUrl": "https://www.mikescerealshack.co/search?q=call+of+duty",
"fetchTime": "2023-01-13T23:28:01.888Z",
"gatherMode": "snapshot",
@@ -17356,7 +17356,7 @@
},
{
"lhr": {
- "lighthouseVersion": "10.3.0",
+ "lighthouseVersion": "10.4.0",
"requestedUrl": "https://www.mikescerealshack.co/corrections",
"mainDocumentUrl": "https://www.mikescerealshack.co/corrections",
"finalDisplayedUrl": "https://www.mikescerealshack.co/corrections",
diff --git a/core/test/results/sample_v2.json b/core/test/results/sample_v2.json
index 491e284c1178..d95ba4dd3b1c 100644
--- a/core/test/results/sample_v2.json
+++ b/core/test/results/sample_v2.json
@@ -1,5 +1,5 @@
{
- "lighthouseVersion": "10.3.0",
+ "lighthouseVersion": "10.4.0",
"requestedUrl": "http://localhost:10200/dobetterweb/dbw_tester.html",
"mainDocumentUrl": "http://localhost:10200/dobetterweb/dbw_tester.html",
"finalDisplayedUrl": "http://localhost:10200/dobetterweb/dbw_tester.html",
diff --git a/docs/plugins.md b/docs/plugins.md
index 7d8d8b3d8841..40c56836307a 100644
--- a/docs/plugins.md
+++ b/docs/plugins.md
@@ -60,10 +60,10 @@ A Lighthouse plugin is just a node module with a name that starts with `lighthou
"name": "lighthouse-plugin-cats",
"main": "plugin.js",
"peerDependencies": {
- "lighthouse": "^10.3.0"
+ "lighthouse": "^10.4.0"
},
"devDependencies": {
- "lighthouse": "^10.3.0"
+ "lighthouse": "^10.4.0"
}
}
```
diff --git a/docs/recipes/lighthouse-plugin-example/package.json b/docs/recipes/lighthouse-plugin-example/package.json
index 284003f1f9a1..1340b24a1367 100644
--- a/docs/recipes/lighthouse-plugin-example/package.json
+++ b/docs/recipes/lighthouse-plugin-example/package.json
@@ -4,7 +4,7 @@
"type": "module",
"main": "./plugin.js",
"peerDependencies": {
- "lighthouse": "^10.3.0"
+ "lighthouse": "^10.4.0"
},
"devDependencies": {
"lighthouse": "^8.6.0"
diff --git a/package.json b/package.json
index 9c2c1a8ff0bf..bdffb6408382 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "lighthouse",
"type": "module",
- "version": "10.3.0",
+ "version": "10.4.0",
"description": "Automated auditing, performance metrics, and best practices for the web.",
"main": "./core/index.js",
"bin": {
diff --git a/third-party/devtools-tests/e2e/lighthouse/navigation_test.ts b/third-party/devtools-tests/e2e/lighthouse/navigation_test.ts
index 230189bfc711..999cf4869c8c 100644
--- a/third-party/devtools-tests/e2e/lighthouse/navigation_test.ts
+++ b/third-party/devtools-tests/e2e/lighthouse/navigation_test.ts
@@ -113,7 +113,7 @@ describe('Navigation', async function() {
assert.strictEqual(numNavigations, 6);
}
- assert.strictEqual(lhr.lighthouseVersion, '10.3.0');
+ assert.strictEqual(lhr.lighthouseVersion, '10.4.0');
assert.match(lhr.finalUrl, /^https:\/\/localhost:[0-9]+\/test\/e2e\/resources\/lighthouse\/hello.html/);
assert.strictEqual(lhr.configSettings.throttlingMethod, 'simulate');