Skip to content

Releases: GoogleChrome/lighthouse

v10.4.0

11 Jul 00:30
c90b73a
Compare
Choose a tag to compare

Full Changelog

We expect this release to ship in the DevTools of Chrome 117, and to PageSpeed Insights within 2 weeks.

New Contributors

Thanks to our new contributors 👽🐷🐰🐯🐻!

New Audits

  • add hidden, 0-weight a11y audits (#15216)
  • aria-dialog-name, aria-text, link-in-text-block, select-name (#15159)

Core

  • remove unnecessary references to legacy gatherer (#15236)
  • update residual usages of legacy runner (#15227)
  • compute TBT impact for main thread tasks (#15175)
  • support ts targets before es2022 (#15189)
  • byte-efficiency: compute FCP & LCP savings (#15104)
  • config: add more validation from legacy (#15211)
  • link-text: add tamil keywords to blocklist (#15152)
  • long-tasks: add more task information to debugData (#15198)
  • network-recorder: set target type of unfinished request (#15232)
  • non-composited-animations: add CLS savings as always 0 (#15099)
  • prioritize-lcp-image: add LCP savings (#15229)
  • proto: add errorStack to AuditResult (#15187)
  • redirects: add FCP and LCP savings (#15228)
  • source-maps: support BOM markers and CORB prefix (#15224)
  • stacks: add wix (#15171)
  • unsized-images: add CLS savings as always 0 (#15196)
  • viewport: add INP savings (#15071)
  • work-during-interaction: add INP savings (#15176)

Report

  • use fixed position for hidden radios (#15181)

Deps

  • upgrade puppeteer to 20.8 (#15226)
  • upgrade third-party-web to 0.23.3 (#15213)

I18n

Tests

  • save smokehouse failures, improve bundle runner logging (#15235)
  • remove usages of legacy driver (#15230)
  • a11y: use regex for target size explanation (#15231)
  • ci: skip puppeteer Chrome download (#15177)
  • config: add unit tests from legacy config (#15209)
  • devtools: fix e2e compile error (#15210)
  • devtools: remove parallel modifier from e2e tests (#15172)
  • issues-mixed-content: use new site for testing (#15241)
  • runner: drop usages of legacy runner (#15047)
  • smoke: expect server-response-time to be greater than 0 (#15188)

v10.3.0

14 Jun 00:52
b981a38
Compare
Choose a tag to compare

Full Changelog

We expect this release to ship in the DevTools of Chrome 116, and to PageSpeed Insights within 2 weeks.

New Contributors

Thanks to our new contributors 👽🐷🐰🐯🐻!

New Audits

  • table-fake-caption, html-xml-lang-mismatch, input-button-name (#15098)
  • td-has-header (#15051)

Core

  • expose error stack on errored audits (#14491)
  • move metric savings to audit product (#15074)
  • add metric savings to audit result (#14997)
  • byte-efficiency: use log-normal distribution scoring (#14977)
  • crawlable-anchors: allow elements acting as anchors (#15079)
  • cumulative-layout-shift: remove totalCumulativeLayoutShift (#15122)
  • entity-classification: classify chrome extensions into separate entities (#15017)
  • global-listeners: iterate all execution contexts (#15054)
  • inspector-issues: add federatedAuthUserInfoRequestIssue (#15149)
  • inspector-issues: add stylesheetLoadingIssue (#15144)
  • largest-contentful-paint-element: display LCP value (#15061)
  • layout-shift-elements: add CLS savings (#15070)
  • network-analyzer: estimate from lrStatistics (#15158)
  • network-analyzer: include 0 start times in rtt estimate (#15100)
  • network-analyzer: fix num of roundtrips for h3 estimates (#15102)
  • network-analyzer: use arithmetic mean for median (#15096)
  • network-analyzer: infer single rtt estimate for h3 (#15095)
  • network-request: simplify recomputeTimesWithResourceTiming (#15107)
  • network-requests: add entity classification (#15105)
  • server-response-time: fix for lightrider (#15156)
  • server-response-time: use receiveHeadersStart instead of end (#15155)
  • time-to-first-byte: use receiveHeadersStart (#15126)
  • trace-elements: use CLS metric event filtering (#15067)
  • uses-rel-preconnect: handle 0 connect start timings (#15157)

Report

  • append utm query params to stack pack links (#15094)
  • update error icons (#15092)
  • update keyframes for confetti animation (#15059)

Deps

  • upgrade third-party-web to 0.23.0 (#15166)
  • upgrade puppeteer to 20.7.1 (#15164)
  • upgrade axe-core to 4.7.2 (#15165)
  • update to latest chrome-devtools-frontend (#15137)
  • upgrade puppeteer and puppeteer-core (#15143)
  • upgrade third-party-web to 0.22.0 (#15097)
  • upgrade axe-core to 4.7.1 (#15078)
  • upgrade lighthouse-logger to 1.4.1 (#15082)
  • es-main: update to 1.2.0 (#15121)

I18n

Docs

  • readme: add unit test tips (#15108)
  • readme: add laravel-lighthouse to project list (#15011)

Tests

  • remove most usages of afterPass (#15057)
  • rebaseline inspector issue detail types (#15050)
  • ci: bump node to fix windows latency failure (#15162)
  • smoke: add expectations for network-rtt, network-server-latency (#15113)
  • smoke: remove external resource from dbw (#15111)
  • smoke: add expectation for lcp-element (#15112)

Misc

  • support node 10 in lighthouse-logger (#15089)
  • add cjs path for logger (#15084)
  • bump lighthouse-logger to v1.4.0 (#15081)
  • compare-runs: allow for multiple args to lighthouse (#15066)
  • lantern-collect: drop sampling (#15072)
  • lantern-collect: add median lhr to golden zip (#15077)
  • lantern-collect: rebaseline to include new ttfb metric (#15069)
  • proto: add package name (#15116)

v10.2.0

04 May 22:44
8fe1a64
Compare
Choose a tag to compare

Full Changelog

We expect this release to ship in the DevTools of Chrome 115, and to PageSpeed Insights within 2 weeks.

New Contributors

Thanks to our new contributors 👽🐷🐰🐯🐻!

Notable Changes

  • largest-contentful-paint-element: add phases table (#14891)

Core

  • add flow methods to cjs entry (#15045)
  • use target type instead of session for oopif (#15006)
  • create timing entries for getArtifact (#15024)
  • classify extension urls as non-network (#15022)
  • add time-to-first-byte and lcp-breakdown (#14941)
  • fix viewport when running over adb (#14937)
  • driver: warn about remaining inflight requests urls (#14963)
  • entity-classification: classify unknown urls as "unattributable" (#15009)
  • predictive-perf: add URL as requiredArtifact (#15028)
  • runner: handle erroneous screenshot (#14981)
  • stack-packs: sort packs in order we defined them (#15039)

Report

  • avoid really slow regexes for long urls (#14745)
  • remove content-visibility from lh-category (#14994)

Deps

  • update to typescript 5.0.4 (#15023)
  • upgrade puppeteer and puppeteer-core (#15000)
  • axe-core: upgrade to 4.7.0 (#15033)
  • chrome-launcher: update to 0.15.2 (#14983)
  • lighthouse-stack-packs: upgrade to 1.10.0 (#15038)
  • puppeteer: upgrade to 20.1.0 (#15037)

I18n

Docs

  • update throttling methods (#14993)
  • update pptr options example (#14978)

Tests

  • devtools: sync e2e (#14995)
  • move regenerated fixtures to new folders (#15031)
  • add user flows to generate some fixtures (#15005)

Misc

  • logger: add warn level (#14964)

v10.1.0

23 Mar 19:05
a7891f3
Compare
Choose a tag to compare

Full Changelog

We expect this release to ship in the DevTools of Chrome 114, and to PageSpeed Insights within 2 weeks.

New Contributors

Thanks to our new contributors 👽🐷🐰🐯🐻!

Notable Changes

  • report: group third-party entities (#14655)

Core

  • cap byte-efficiency-audit scores to a max of 1 (#14921)
  • correctly truncate unicode strings (#14911)
  • allow any audit details type to be used in an opportunity (#14903)
  • audit: update link for source maps to chrome developer docs (#14855)
  • cls: ignore had_recent_input by timing window (#14402)
  • doctype: handle optional trace correctly (#14918)
  • legacy-javascript: add focus-visible polyfill (#14827)
  • tap-targets: update audit description (#14869)
  • trace-processor: support single process trace (#14901)
  • uses-responsive-images-snapshot: ignore CSS images (#14890)

CLI

Report

  • update table hover shades (#14873)
  • consistently use our monospace font stack (#14842)

Deps

  • upgrade http-link-header and node polyfills (#14889)
  • upgrade soft navigation plugin (#14883)
  • testdouble: update, move off forked quibble (#14863)

Clients

  • bundled: include soft navigation plugin (#14874)
  • lr: remove FCP 3G from config (#14910)
  • viewer: link to diff tool's new URL (#14865)
  • viewer: rework landing with link to lhci diff tool (#14851)

Docs

Tests

  • fix seo-tap-targets in high DPI (#14866)
  • devtools: reenable issues-mixed-content (#14862)

Misc

  • replace deprecated command with environment file (#14751)
  • fix typos of overridden (#14877)

v10.0.2

01 Mar 01:24
aa98cb1
Compare
Choose a tag to compare

Full Changelog

We expect this release to ship in the DevTools of Chrome 113.

Core

  • tracing: handle FrameCommittedInBrowser with processPseudoId (#14800)
  • redirects: use requestId instead of URL to find requests (#14838)
  • don't use failed network requests as potential initiators (#14819)
  • config: change error message if no artifacts are defined (#14818)
  • bf-cache: count failures based on affected frames (#14823)
  • legacy-javascript: update polyfill size graph (#14828)
  • prioritize-lcp-image: use request initiators for load path (#14807)
  • prioritize-lcp-image: better identify lcp request (#14804)
  • types: fix error when using moduleResolution: "node" (#14815)

Clients

  • lr: accept multiple channel naming conventions (#14799)

Docs

  • user-flows: add desktop config examples (#14806)

Tests

  • reenable metrics-tricky-tti on ToT (#14790)
  • devtools: use new primaryPageTarget function (#14839)
  • add roundtrip-proto lhr render test, check for undefined (#14817)
  • devtools: sync e2e tests (#14801)

Misc

  • proto: add screenEmulation to configSettings (#14809, #14826)

v10.0.1

14 Feb 23:53
610b897
Compare
Choose a tag to compare

Full Changelog

We expect this release to ship in the DevTools of Chrome 112, and to PageSpeed Insights within 2 weeks.

Core

  • reduce DevTools flakiness (#14782)
  • doctype: only consider main frame (#14795)
  • paste-preventing-inputs: rephrase description (#14794)

Deps

  • move quibble to dev deps (#14780)

Docs

  • split changelog at 10.0 (#14778)
  • changelog: minor v10 edits (#14777)

Misc

v10.0.0

09 Feb 21:31
2eb8f34
Compare
Choose a tag to compare

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 👽🐷🐰🐯🐻!

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 to
  • finalUrl: 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 be undefined in 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 as mainDocumentUrl.

Audit changes

  • password-inputs-can-be-pasted-into -> paste-preventing-inputs
  • preload-lcp-image -> prioritize-lcp-image
  • third-party-summary no longer uses a link value for item.entity, instead uses a raw text value
  • full-page-screenshot is no longer an audit, instead it is stored at lhr.fullPageScreenshot. To suppress collection of the full-page screenshot in the CLI, you must migrate from --skip-audits full-page-screenshot to --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/ and lighthouse-cli/ folders are now simply core/ and cli/
  • 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 the lighthouse function in CommonJS, you can also use require('lighthouse/core/index.cjs')
  • The CSV output for Lighthouse is much more useful now. Consult the PR for an example of the new format
  • LHError is now LighthouseError. 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 passes to 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 ScriptElements artifact is now Scripts, with a slightly different shape
  • Audit.makeOpportunityDetails and Audit.makeTableDetails now accept an options object as the third parameter. This ends up being a breaking change for just Audit.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...
Read more

v9.6.8

31 Oct 23:24
16a0a77
Compare
Choose a tag to compare

Full Changelog

We expect this release to ship in the DevTools of Chrome 109, and to PageSpeed Insights within 2 weeks.

Core

  • deprecations: use translated strings from devtools repo (#13961)
  • network-request: backport rendererStartTime (#14481)

v9.6.7

02 Sep 17:56
c504039
Compare
Choose a tag to compare

Full Changelog

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

  • core(trace-elements): include LCP type in artifact (#14344)
  • core: add priority to network-requests debug audit (#14340)

v9.6.6

16 Aug 20:24
Compare
Choose a tag to compare

Full Changelog

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 👽🐷🐰🐯🐻!

Core

  • unsized-images: ignore non-network SVGs (#13737)

Deps

  • upgrade csp-evaluator (#14281)