Releases: GoogleChrome/lighthouse
Release list
v10.0.0
Full Changelog
Release article
We expect this release to ship in the DevTools of Chrome 112, and to PageSpeed Insights within 2 weeks.
New Contributors
Thanks to our new contributors 👽🐷🐰🐯🐻!
- Alex N. Jose @alexnj
- Alexandra White @heyawhite
- Amanda @apettenati
- Andrew Gutekanst @Andoryuuta
- Christopher Holder @ChristopherPHolder
- Dongkyun Yu (Steve) @hackurity01
- Floris @FMJansen
- Gabe @MrBrain295
- ghost_32 @k99sharma
- Littleton Riggins @TripleEquals
- lowkeyAngry @lowkeyAngry
- Michael McMahon @TechnologyClassroom
- Shogo Hida @shogohida
- Stoyan @stoyan
- Yang Guo @hashseed
Notable Changes
Performance Score Changes
In the 8.0 release, we described TTI's waning role, and today we have the followup. Time to Interactive (TTI) no longer contributes to the performance score and is not displayed in the report. However, it is still accessible in the Lighthouse result JSON.
Without TTI, the weighting of Cumulative Layout Shift (CLS) has increased from 15% to 25%. See the docs for a complete breakdown of how the Performance score is calculated in 10.0, or play with the scoring calculator.
Types for the Node package
Lighthouse now includes type declarations! Our example TypeScript recipe demonstrates how to achieve proper type safety with Lighthouse.
Third-party Entity classification
Since Lighthouse 5.3, the community-driven third-party-web dataset has been used to summarize how every third-party found on a page contributes to the total JavaScript blocking time, via the third-party-summary audit. With Lighthouse 10.0, we are adding a new property to the JSON result (entities) to make further use of this dataset. Every origin encountered on a page is now classified as first-party or third-party within entities. In 10.0, this classification is used to power the existing third-party filter checkbox.
In a future version of Lighthouse, this will be used to group the table items of every audit based on the entity it originated from, and aggregate the impact of items from that specific entity.
🆕 New Audits
Back/forward cache
The Back/forward cache (bfcache for short) is a browser optimization that serves pages from fully serialized snapshots when navigating back or forwards in session history. There are over 100 different reasons why a page may not be eligible for this optimization, so to assist developers Lighthouse now attempts to trigger a bfcache response and will list anything that prevented the browser from using the bfcache. #14465
For more on bfcache, see the web.dev article.
Note: This audit initially will not be available for PageSpeed Insights.
Preventing pasting to inputs
The audit password-inputs-can-be-pasted-into is now paste-preventing-inputs. This audit's logic works just as before, but rather than just considering [type=password] inputs, it now fails if any non-readonly input element prevents the user from pasting. #14313
Lighthouse documentation is now on developer.chrome.com
Our documentation is no longer hosted on web.dev. For the most up to date audit docs, please go to developer.chrome.com/docs/lighthouse/
💥 Breaking changes
Under the hood, Lighthouse now uses the new user-flow supporting infrastructure by default, even for traditional navigation runs. You can opt out of this by: in the CLI, use --legacy-navigation; in DevTools: check “Legacy Navigation” in the settings menu. If you have a use case that necessitates this escape hatch, please file an issue. We plan to remove this legacy path in 11.0.
For Lighthouse result JSON (LHR) users
Page URLs on the Lighthouse Result
Until now, there were two URL fields to describe a Lighthouse run:
requestedUrl: the url given by the users, which Lighthouse instructs Chrome to navigate tofinalUrl: the url after any server-initiated HTTP and JS-initiated redirects
This taxonomy cannot account for more complex scenarios, such as JS-initiated redirects, usage of the History API or soft-navigations. They were also ill-defined for timespan and snapshot modes. To account for that, Lighthouse 10.0 now has these URL fields:
- (changed)
requestedUrl: The URL that Lighthouse initially navigated to before redirects. This is the same as it was before for navigation mode, but now it will beundefinedin timespan/snapshot. - (new)
mainDocumentUrl: The URL of the last document requested during a navigation. It does not account for soft navigations or history API events made after the page loads. It is only available in navigation mode, and will be undefined in timespan and snapshot modes. - (new)
finalDisplayedUrl: The URL displayed in the browser combobox at the end of a Lighthouse run. It accounts for soft navigations and history API events. Available in navigation, timespan, and snapshot modes. - (deprecated)
finalUrl: Same value asmainDocumentUrl.
Audit changes
password-inputs-can-be-pasted-into->paste-preventing-inputspreload-lcp-image->prioritize-lcp-imagethird-party-summaryno longer uses alinkvalue foritem.entity, instead uses a rawtextvaluefull-page-screenshotis no longer an audit, instead it is stored atlhr.fullPageScreenshot. To suppress collection of the full-page screenshot in the CLI, you must migrate from--skip-audits full-page-screenshotto--disable-full-page-screenshot.
For Node users
- Node 14 is no longer supported, the minimum is now Node 16
- In case you import paths within the lighthouse node package:
lighthouse-core/andlighthouse-cli/folders are now simplycore/andcli/ - Converted from CommonJS to ES modules. You can still use lighthouse in CommonJS by using an dynamic import:
await import('lighthouse'). For access to just thelighthousefunction in CommonJS, you can also userequire('lighthouse/core/index.cjs') - The CSV output for Lighthouse is much more useful now. Consult the PR for an example of the new format
LHErroris nowLighthouseError. If you are attempting to catch an error thrown by Lighthouse, be sure to account for this!
Node API changes
The lighthouse function now has better integration with Puppeteer. Use lighthouse(url, flags, config, page) to run Lighthouse, passing an existing Puppeteer.Page handle as page.
The user flow api has moved to the top level node entrypoint and can be imported with import {startFlow} from 'lighthouse'.
New flow.startNavigation() and flow.endNavigation() functions let you define a user triggered navigation without any callback function. See the user flow docs for an example.
To change settings for a single user flow step, define the settings overrides on the toplevel flags options flow.snapshot({skipAduits: ['uses-http2']}) instead of on the settingsOverride property.
To give a flow step a custom name, use flow.snapshot({name: 'Custom name'}). Previously this was done via stepName.
For Lighthouse customization (custom config, gatherers, audits)
- To work in Lighthouse 10.0, custom gatherers will need to implement the new Gatherer interface (an example). Otherwise, they will only work in legacy navigation mode and older versions of Lighthouse
- Lighthouse cannot use
passesto load the page multiple times in navigation mode anymore. If you need to load the page multiple times, we recommend using a user flow. See our config docs for instructions on how to convert to the new config format - The
ScriptElementsartifact is nowScripts, with a slightly different shape Audit.makeOpportunityDetailsandAudit.makeTableDetailsnow accept an options object as the third parameter. This ends up being a breaking change for justAudit.makeOpportunityDetails.
Detailed changelog
Removed Audits
- [BREAKING] apple-touch-icon: remove audit (#14243)
- [BREAKING] vulnerable-libraries: remove audit (#14194)
- [BREAKING] full-page-screenshot: remove audit, move to top-level (#14657)
Core
- [BREAKING] scoring: rebalance perf metric weightings for v10 (#14667)
- [BREAKING] third-party-summary: change item.entity from link...
v9.6.8
We expect this release to ship in the DevTools of Chrome 109, and to PageSpeed Insights within 2 weeks.
Core
v9.6.7
This is an npm-only release. We have no plans to release this specific version to DevTools or PSI, but the changes will be rolled up into the next release in those clients.
Core
v9.6.6
We expect this release to ship in the DevTools of Chrome 107, and to PageSpeed Insights within 2 weeks.
New Contributors
Thanks to our new contributor 👽🐷🐰🐯🐻!
- Steven @styfle
Core
- unsized-images: ignore non-network SVGs (#13737)
Deps
- upgrade csp-evaluator (#14281)
v9.6.5
This is an npm-only release and affects only the raw JSON report. We have no plans to release this specific version to DevTools or PSI, but the changes will be rolled up into the next release in those clients.
Core
v9.6.4
We expect this release to ship in the DevTools of Chrome 106, and to PageSpeed Insights within 2 weeks.
Deps
- lighthouse-stack-packs: upgrade to 1.8.2 (#14218)
Clients
- lr: expose listenForStatus (#14024)
Misc
- misc: keep scripts package.json in npm (#14239)
v9.6.3
This is an npm-only release and affects only the raw JSON report. We have no plans to release this specific version to DevTools or PSI, but the changes will be rolled up into the next release in those clients.
Core
v9.6.2
We expect this release to ship in the DevTools of Chrome 104, and to PageSpeed Insights within 2 weeks.
Core
- driver: fix legacy runner hanging oopifs in some cases (#14074)
Report
- avoid really slow regexes for data urls (#13791)
Clients
- psi: expose the swapLocale types (#14062)
Tests
Misc
- build: fix lightrider report generator bundle (#14031)
v9.6.1
We expect this release to ship in the DevTools of Chrome 103, and to PageSpeed Insights within 2 weeks.
Core
- fps: run at the end of timespan/snapshot (#13989)
- responsiveness: add element screenshot to INP diagnostic (#13984)
- responsiveness: add better INP fallback for old Chrome versions (#13985)
Report
- devtools: use absolute positioning for overlay (#13988)
Tests
- use origin-agent-cluster to actually test oopifs (#13777)
v9.6.0
We expect this release to ship in the DevTools of Chrome 103, and to PageSpeed Insights within 2 weeks.
New Audits
- The new performance metric Interaction to Next Paint (INP) assesses responsiveness by measuring the latency of interactions throughout the page lifecycle. INP can be measured using Lighthouse timespan mode accessible through user flows or the new DevTools panel. (#13917)
Core
- extract BootupTime task summary methods (#13971)
- css-usage: fetch stylesheet contents immediately after discovery (#13887)
- installability-errors: add url scheme error (#13846)
- installable-manifest: always run
InstallabilityErrorsin legacy mode (#13622) - responsiveness: use new EventTiming trace event format (#13979)
- responsiveness: use raw trace event (#13970)
- trace: use tracing-started event for frame tree info (#13913)
- trace: add PrePaint event, renamed from UpdateLayerTree (#13950)
- trace-processor: ignore
navigationStartwith falsy document url (#13848) - resolve redirected script records (#13751)
- deprecations: drop compat for ConsoleMessages (#13893)
- deprecations: hard-code english strings (#13961)
Report
- hide disclaimer text in timespan (#13931)
- psi: stub out locale swapping (#13885)
- report: render notApplicable metrics with double dash (#13981)
Deps
- upgrade third-party-web (#13873)
- update to third-party-web 0.15.0 (#13804)
- axe-core: upgrade to 4.4.1 (#13814)
- js-library-detector: upgrade to 6.5.0 (#13969)
- lighthouse-stack-packs: upgrade to 1.8.1 (#13862)
- snyk: update snyk snapshot (#13823, #13880)
- lodash: use individual lodash modules to reduce bundle size (#13914)
- puppeteer: upgrade to 13.7.0 (#13657)