<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>sitespeed.io release feed</title>
        <link>https://www.sitespeed.io</link>
        <description>New releases and changelog feed of sitespeed.io</description>
        <lastBuildDate>Fri, 23 Oct 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>sitespeed.io release feed</title>
            <url>https://www.sitespeed.io/img/logos/sitespeed.io.png</url>
            <link>https://www.sitespeed.io</link>
        </image>
        <copyright>All rights reserved 2022, Peter Hedenskog and team</copyright>
        <atom:link href="https://www.sitespeed.io/feed/rss.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[sitespeed.io 42.10.0]]></title>
            <link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#42.10.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#42.10.0</guid>
            <pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Chrome 156, Firefox 158 and Edge 156 in the Docker container, and Browsertime 28.5.0 with Chromedriver and Edgedriver 156 #4913. In Browsertime, the URL under test is now escaped in the navigation script, so a URL with a quote, a backslash or a line break works. Loading a <code>.js</code> script does not overwrite an existing <code>package.json</code> in the folder of the script anymore. See the Browsertime changelog.<br>
<br>
<strong>Fixed</strong><br>
- First Contentful Paint was missing from the Pages table, the summary box and the run page, and the run page lost its render-phase breakdown. Metric paths with bracket notation, like <code>paintTiming[&#39;first-contentful-paint&#39;]</code>, did not match anything after lodash.get was replaced. Configuration paths in the lodash style broke the same way #4910.<br>
- When the coach was on (the default), the scripts that other plugins add with <code>browsertime.scripts</code> were lost, so third-party plugins did not get their data #4908.<br>
- <code>--open</code> failed when the result path had spaces, and the shell interpreted special characters in the path #4912.<br>
- The pre-warm run on iOS now uses the device set with <code>--safari.deviceUDID</code>. Before, with several devices or simulators, it could run on a different device than the test #4909.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[browsertime 28.5.0]]></title>
            <link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#28.5.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#28.5.0</guid>
            <pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Updated the Docker image to Chrome 156 / Firefox 158 / Edge 156 and bumped <code>chromedriver</code> and <code>edgedriver</code> to 156 #2583 #2585.<br>
<br>
<strong>Fixed</strong><br>
- Updated WebPageReplay in the Docker image to the latest version from its new repository, together with its new inject script. The replay server prepares the injected HTML once when the archive loads, not on every request. The inject script also gives every page the same <code>navigator.connection</code> and <code>navigator.onLine</code> values, so pages that adapt to the connection behave the same in every run. Replayed metrics can change after you upgrade #2578.<br>
- The URL under test is now escaped in the navigation script. A URL with a quote, a backslash or a line break broke navigation, and a crafted URL could run its own script in the page #2582.<br>
- Loading a <code>.js</code> script as CommonJS overwrote and then deleted an existing <code>package.json</code> in the folder of the script. Browsertime now only creates and removes its own temporary file #2579.<br>
- The browser was not stopped after a failed iteration when Browsertime ran without connectivity settings, for example when used as a library #2580.<br>
- The pre-warm run on iOS now uses the device set with <code>--safari.deviceUDID</code>. Before, with several devices or simulators, it could run on a different device than the test #2581.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[onlinetest 6.1.0]]></title>
            <link>https://github.com/sitespeedio/onlinetest/blob/main/CHANGELOG.md#6.1.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/onlinetest/blob/main/CHANGELOG.md#6.1.0</guid>
            <pubDate>Thu, 22 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- The compare page no longer allows inline scripts. It now uses the same Content Security Policy as the rest of the web GUI, which closes the exception from #284 #294.<br>
- In compare, every run after the first lost its connect and SSL bars in the waterfall, and some filmstrip frames showed as broken images #294.<br>
- Opening compare with one test now compares its runs, instead of showing the start page with the URL filled in #294.<br>
- Browsers got new JavaScript and CSS only when the server version changed. A build with changed files and the same version, like a branch under test or a patched install, kept serving cached old files, and the new pages ran against old JavaScript. The cache buster is now a hash of the JavaScript and CSS content #292.<br>
<br>
<strong>Changed</strong><br>
- Updated the vendored compare app. When both tests have several runs of the same URL, compare uses all runs and marks a change only when a Mann-Whitney U test says it is significant and it is 2% or more. Video, filmstrip, visual progress and waterfall follow one timeline, unchanged metrics are folded, and you can draw on the waterfall and save it as an image #294.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[onlinetest 6.0.0]]></title>
            <link>https://github.com/sitespeedio/onlinetest/blob/main/CHANGELOG.md#6.0.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/onlinetest/blob/main/CHANGELOG.md#6.0.0</guid>
            <pubDate>Tue, 20 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- The server removes old test data from PostgreSQL once a day. Every test stored its HAR and browsertime result in the database forever, so the database grew without limit, while the result files in SeaweedFS already expire after 30 days. <code>retention.days</code> sets how many days to keep (0 keeps everything) and <code>retention.remove</code> is <code>test</code> (the default) to remove the whole test or <code>data</code> to keep the test in search and clear only the HAR and the browsertime result. The server removes data in small batches and never removes a test that waits or runs #289.<br>
- <code>disableScripting</code> has a new value <code>gui</code>, which is the default: scripting tests are off in the web GUI and on through the API. <code>true</code> turns them off everywhere and <code>false</code> turns them on everywhere. The server checks the setting for every test that it gets, so a request sent outside the web form cannot get around it. A value of <code>false</code> in <code>.env</code> now overrides the default in <code>server.yaml</code> #286.<br>
- The production docs show how to back up and restore PostgreSQL, and how to upgrade to a new major version, with the steps for 6.0.<br>
<br>
<strong>Fixed</strong><br>
- New installs got version 3.8.0 of the server and testrunner, from May 2026, without the security fixes in 4.x and 5.0, because <code>.env.example</code> and the README still pointed at version 3. They now point at the current major version, and the release script keeps them up to date #290.<br>
- <code>deploy/update.sh</code> did not give <code>.env</code> to Docker Compose. Newer Docker Compose versions only read <code>.env</code> next to the compose file, so the image tags were empty and the update stopped with <code>invalid reference format</code>.<br>
- Pages that do not exist are answered with 404 instead of 400 #287.<br>
- The server closes its Redis connection after it publishes a message, instead of keeping a new connection open for each message #288.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[onlinetest 5.0.0]]></title>
            <link>https://github.com/sitespeedio/onlinetest/blob/main/CHANGELOG.md#5.0.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/onlinetest/blob/main/CHANGELOG.md#5.0.0</guid>
            <pubDate>Mon, 19 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- New <code>disableScripting</code> setting (or <code>DISABLESCRIPTING=true</code> in <code>.env</code>) that turns off scripting tests. A scripting test runs Node.js code where sitespeed.io runs, so on a public instance anyone who can add a test can run code there. With the setting on, the server rejects scripting tests from the web form, the API and reruns, and the form does not show the scripting tab. It is off by default #282.<br>
<br>
<strong>Fixed</strong><br>
- Result storage uses SeaweedFS instead of MinIO. The MinIO community edition is archived, gets no security patches and its images are not on Docker Hub or quay.io anymore, so a new install could not start #215. SeaweedFS is Apache-2 licensed and does what MinIO did for us: S3 uploads from the testrunner, public read access to results and a 30 day expiry. The S3 API is still on port 9000, the <code>MINIO_USER</code>/<code>MINIO_PASSWORD</code> variables are the same and result URLs do not change. MinIO compressed html/css/js on disk; SeaweedFS does not, so results use more disk #270.<br>
- The storage container restarts automatically (<code>restart: always</code>) like Redis and PostgreSQL, so result links work again after a host reboot #270.<br>
- The API did not need a key by default, so anyone who could reach the server could add tests and choose the Docker image and the sitespeed.io configuration, including options that the web GUI blocks. The API now only accepts tests when a key is set #278.<br>
- The scripting test name was used as-is in the file path on the testrunner. A name with <code>../</code> or an absolute path could write the script outside the job folder, and the public form could do this without a key. Only the base name is used now #276.<br>
- The page shown while a test waits or runs added the test name and the job logs as HTML. A scripting test could use them to run JavaScript for everyone who opened its link. They are now added as text #279.<br>
- The server sent the browser to the result URL from the test&#39;s result file without a check. A test can change that file, so it could make the running page open a <code>javascript:</code> URL. Only http and https result URLs are followed now #280.<br>
- All JavaScript in the web GUI loads from <code>/js</code>, so the Content Security Policy no longer allows inline scripts or inline event handlers, and HTML injection cannot run JavaScript. The vendored compare app keeps the old policy on <code>/compare/</code> until the compare project removes its inline code #284.<br>
- Results are served from the same origin as onlinetest, and a scripting test can put its own HTML and JavaScript in its result. Caddy now sends a <code>Content-Security-Policy: sandbox</code> header with all results, so each result page gets its own origin and cannot act on the onlinetest site. The sitespeed.io report works the same in the sandbox #283.<br>
- Updated Express to 5.3.0 and the other server and testrunner dependencies to their latest minor and patch versions. This fixes the known advisories in <code>proxy-addr</code>, <code>path-to-regexp</code>, <code>body-parser</code> and <code>qs</code> #277, #281.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[sitespeed.io 42.9.0]]></title>
            <link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#42.9.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#42.9.0</guid>
            <pubDate>Thu, 15 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Browsertime 28.4.0. On Linux, <code>--connectivity.throttle.localhost</code> now also sets a download limit. Use it for WebPageReplay tests, for example <code>--connectivity.engine throttle --connectivity.throttle.localhost --connectivity.rtt 100 --connectivity.down 5000</code>. A ready-made profile like <code>--connectivity.profile 3g</code> also uses its download limit. Throttle 6.2.0 sets the loopback MTU to 1500, like a real network. With the old MTU, WebPageReplay metrics were a full round trip apart from run to run. Localhost metrics can become lower and more stable after you upgrade. See the Browsertime changelog.<br>
<br>
<strong>Fixed</strong><br>
- Updated WebPageReplay to the latest version from its new repository, together with its new inject script. The inject script changes the replayed HTML a little, so replay metrics can change after you upgrade #4907.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[sitespeed.io 42.8.0]]></title>
            <link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#42.8.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#42.8.0</guid>
            <pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Chrome 154, Firefox 156 and Edge 153 in the Docker container #4893 #4903.<br>
- New llms.txt and a guide for AI coding agents. Agents often use old flags and APIs. The guide shows the current way to do it #4901. The scripting docs do not show fixed sleeps or CommonJS anymore #4900.<br>
<br>
<strong>Fixed</strong><br>
- Browsertime 28.3.1 #4905. With WebPageReplay, Chrome sent HTTP requests on port 80 to the internet. Now the replay server gets them. Pages with <code>http://</code> resources can show different metrics. Chrome does not connect to <code>mtalk.google.com</code> and <code>clients2.google.com</code> during tests anymore. Chrome 153 does not know <code>iPhone 6</code> for <code>--chrome.mobileEmulation.deviceName</code>. Use a newer device, for example <code>iPhone 12 Pro</code>. See the Browsertime changelog.<br>
- Result page URLs use the <code>URL</code> API. Node deprecated <code>url.parse</code> #4904.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[throttle 6.2.0]]></title>
            <link>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#6.2.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#6.2.0</guid>
            <pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- On Linux, you can set a download limit on localhost: <code>throttle --rtt 200 --down 5000 --localhost</code>. The limit is for all traffic on loopback. Upload limits are not supported on localhost #116.<br>
<br>
<strong>Fixed</strong><br>
- <code>--profile</code> together with <code>--localhost</code> throttled the network interface, not localhost. Now it uses the download and RTT of the profile on localhost #116.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[throttle 6.1.0]]></title>
            <link>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#6.1.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#6.1.0</guid>
            <pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- On Linux, <code>--localhost</code> now sets the loopback MTU to 1500, like a real network. With the default MTU (65536), WebPageReplay runs were a full round trip apart from run to run. <code>--stop --localhost</code> sets the MTU back to 65536. Localhost metrics can change after you upgrade #115.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[browsertime 28.4.0]]></title>
            <link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#28.4.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#28.4.0</guid>
            <pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- On Linux, you can set a download limit with <code>--connectivity.throttle.localhost</code>, for example for WebPageReplay tests: <code>--connectivity.engine throttle --connectivity.throttle.localhost --connectivity.rtt 100 --connectivity.down 5000</code>. The limit is for all loopback traffic. A ready-made profile (like <code>--connectivity.profile 3g</code>) together with <code>--connectivity.throttle.localhost</code> now also uses the download limit of the profile #2577.<br>
<br>
<strong>Fixed</strong><br>
- Updated to Throttle 6.2.0. On Linux, <code>--connectivity.throttle.localhost</code> now sets the loopback MTU to 1500, like a real network. With the old MTU (65536), WebPageReplay metrics were a full round trip apart from run to run. Localhost metrics can change (become lower and more stable) after you upgrade #2576 #2577.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[browsertime 28.3.1]]></title>
            <link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#28.3.1</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#28.3.1</guid>
            <pubDate>Mon, 12 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- WebPageReplay runs sent plain HTTP requests to the real internet instead of the replay server. The <code>--host-resolver-rules</code> value carried literal quotes, and Chrome drops any rule it cannot parse, so the port 80 mapping was silently lost. Pages with <code>http://</code> resources measured with WebPageReplay can change now that those requests are replayed. The same quotes made Chrome skip the first and last host of the built-in phone-home block list on runs without WebPageReplay #2572.<br>
- The built-in phone-home hosts are blocked without opening a connection. They were mapped to 127.0.0.1, so Chrome still connected locally: a local server on that port received Chrome&#39;s background requests, and under WebPageReplay the recorder forwarded them to the real host. Now the name lookup fails inside Chrome (<code>^NOTFOUND</code>) #2573.<br>
- Chrome no longer keeps a push messaging connection to <code>mtalk.google.com</code> open during tests. It opened on every browser start, even with <code>--disable-background-networking</code>, and with WebPageReplay it went to the real internet on port 5228 while the page was measured #2574.<br>
- Chrome&#39;s network time check (<code>http://clients2.google.com/time/1/current</code>) is disabled. It ran on every browser start, outside the page under test #2575.<br>
- Updated the Docker image to Chrome 153 / Firefox 155 / Edge 153 #2569.<br>
- Bumped <code>chromedriver</code> and <code>edgedriver</code> to 153 and <code>geckodriver</code> to 0.37.1 #2567 #2568. Chrome 153 removed the old iPhone 4 to iPhone X entries from its device list, so <code>--chrome.mobileEmulation.deviceName &#39;iPhone 6&#39;</code> now fails with &quot;must be a valid device&quot;. The help text now suggests <code>iPhone 12 Pro</code>.<br>
- Dropped the <code>serve</code> dev dependency. The test suite already had a static file server, and <code>serve</code> added about 90 packages to every contributor and CI install #2564.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[onlinetest 4.0.2]]></title>
            <link>https://github.com/sitespeedio/onlinetest/blob/main/CHANGELOG.md#4.0.2</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/onlinetest/blob/main/CHANGELOG.md#4.0.2</guid>
            <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- Pull the MinIO images from <code>quay.io</code> instead of Docker Hub. MinIO removed its images from Docker Hub after archiving the community edition, so a fresh <code>docker compose up</code> could no longer start result storage. The quay.io mirror still serves the same pinned releases, and no <code>.env</code> changes are needed. This keeps 4.x deployable until result storage moves to SeaweedFS #270.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[sitespeed.io 42.7.0]]></title>
            <link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#42.7.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#42.7.0</guid>
            <pubDate>Fri, 11 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Chrome 152, Firefox 154 and Edge 151 in the Docker container #4891.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[sitespeed.io 42.6.0]]></title>
            <link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#42.6.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#42.6.0</guid>
            <pubDate>Thu, 06 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Browsertime 28.3.0 #4887. Single page app journeys measure better: a route change that makes no network requests used to wait out the whole page-complete timeout and lose its HAR page, now it finishes on quiet time and keeps the page. INP is reported as the slowest (p98) interaction like the web-vitals library does, where a journey with a 500 ms and a 150 ms click used to report 150. Chrome&#39;s built-in list of disabled phone-home features (Translate and friends) is back in default runs after a duplicated switch had silently replaced it, soft-navigation LCP works again on Chromium 151+ and multi-page scripts no longer get render-blocking and LCP annotations on the wrong HAR page. New <code>cpuPerformance</code> field (Chrome 152+) with the browser&#39;s own coarse device rating, which helps explain why the same page measures differently on different machines. See the Browsertime changelog for the full list of fixes.<br>
- Chrome 151 in the Docker container, and Chrome now runs natively in the arm64 image #4888.<br>
<br>
<strong>Fixed</strong><br>
- Following a deep link to a Compare metric row (from the verdict card&#39;s jump chips or a shared <code>#chart-</code> URL) mangled the targeted row: the distribution strip collapsed into the delta column and the chip wrapped under the metric name. The old fixed-header anchor offset inserted an invisible spacer box that a CSS grid container counts as an extra first item, pushing every cell one column over. The offset now uses scroll-margin, which moves the scroll position without creating a box, so any targeted card that is a grid or flex container keeps its layout #4886.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[browsertime 28.3.0]]></title>
            <link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#28.3.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#28.3.0</guid>
            <pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- New <code>cpuPerformance</code> field in <code>browserScripts.browser</code> (Chrome 152+): the browser&#39;s own coarse device rating (1 to 4) from <code>navigator.cpuPerformance</code>. Helps explain why the same page measures differently on different machines #2540.<br>
- SPA route changes that make no requests are now measured: the page-complete check finishes on quiet time instead of waiting out the whole timeout, and the HAR page is no longer lost. Closes #2001 #2550.<br>
<br>
<strong>Fixed</strong><br>
- INP is now the slowest (p98) interaction, like web-vitals reports it. With more than one interaction the fastest was picked, so a journey with 500 ms and 150 ms clicks reported 150 #2556.<br>
- Chrome&#39;s built-in list of disabled features was accidentally replaced by a later duplicated switch, so default runs kept Translate and other phone-home features enabled. User-supplied feature flags are now merged with the built-in list #2557.<br>
- Firefox <code>--block</code> and <code>--appendToUserAgent</code> were silently ignored unless <code>--requestheader</code> was also set #2542.<br>
- Soft-navigation LCP works again on Chromium 151+, where the API changed; older versions keep working #2538.<br>
- Edge runs using <code>--proxy.*</code> crashed on a broken import #2543.<br>
- A timeout in the page complete check escalated to a failed URL instead of logging and continuing to measure as documented #2544.<br>
- One video failing visual-metrics analysis gave all later pages in the iteration metrics from the wrong video and failed the whole iteration #2545.<br>
- Request header values containing a colon (like Referer URLs) were truncated at the first colon #2546.<br>
- Installs without the optional jimp dependency saved every screenshot twice #2547.<br>
- Recorded videos are now actually removed from Android devices; a doubled file path made cleanup silently fail on every run #2548.<br>
- The documented <code>commands.wait</code> byId, byXpath and bySelector commands are visible to TypeScript users again. Closes #2495 #2549.<br>
- Navigations with no network activity (cached pages, SPA routes) waited out the full timeout in the network idle check instead of finishing on idle time. Leftover CDP listeners are also cleaned up #2552.<br>
- Firefox log and gecko profile post-processing was not awaited, so results could be handed over mid-write and a failure crashed the process #2553.<br>
- When no viewport could be detected, the video was cropped to a sliver and produced garbage visual metrics; it is now analysed uncropped instead #2554.<br>
- Scripts measuring more than one page per iteration got <code>_renderBlocking</code> and <code>_isLCP</code> annotations on the wrong HAR page #2551.<br>
- <code>--android</code> swallowed the argument after it, so <code>browsertime --android url</code> dropped the URL and <code>--android false</code> still enabled Android #2560.<br>
- With <code>--chrome.timeline</code>, one page load failing mid-trace made every remaining iteration fail #2558.<br>
- The scripting stopWatch only worked as a single-use timer: <code>watch.start()</code> always threw, and so did stopping the same watch twice. Both work now #2559.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[sitespeed.io 42.5.1]]></title>
            <link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#42.5.1</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#42.5.1</guid>
            <pubDate>Wed, 29 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- The Compare tab merged metrics with identical run values into one stacked row, which read as if before-FCP and before-LCP element counts were one metric when they are different measurements that happen to agree whenever FCP and LCP are the same paint, and the stacked names broke the name column mid-word. Every metric is its own row again and counts separately in the verdict; a row whose values match an earlier one carries a quiet &quot;same values as X&quot; tag instead, so identical numbers don&#39;t read as a rendering mistake. Direction words now follow the unit (higher/lower for counts and unitless metrics like CLS, slower/faster for times), since a &quot;slower&quot; chip on an element count read as a bug, and the about-the-statistics fold spells out what negligible, small, medium and large effect mean in plain text #4885.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[sitespeed.io 42.5.0]]></title>
            <link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#42.5.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#42.5.0</guid>
            <pubDate>Tue, 28 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Every tested Compare row now shows how big the change is, not just how certain: the Hodges-Lehmann shift estimate with a 95% confidence interval (&quot;shift +7 (+4 to +9 ms)&quot;). A p-value kept being read as a size, but 21 fully separated runs give p = 1e-10 whether the shift is 1 ms or 100 ms. An interval away from zero is a real change of about that size, an interval straddling zero is noise no matter what the bare delta suggests. Added as a new additive field on the compare.pageSummary message, the graphite export is untouched #4882.<br>
- Compare catches regressions that change run-to-run behaviour without moving the median. The rank test is blind to a metric whose median holds while the runs split into a fast and a slow group, for example a race sending a third of the iterations down a slow path. Every compared metric now also runs a two-sample Kolmogorov-Smirnov test over the whole distributions; it only surfaces when the rank test saw nothing, marking the row amber with &quot;spread changed&quot; and the change in the middle-80% span, and the verdict card lists it as possible intermittent behaviour rather than a regression. The new statisticalTestKS field is additive #4883.<br>
- The Compare statistics explain themselves to engineers who are not statisticians: the setup strip carries a collapsed &quot;about the statistics&quot; fold naming every algorithm and what it contributes, the verdict card ends with a &quot;How to read the numbers&quot; primer, every p-value and effect line explains itself on hover and the spread verdict is worded from the data (&quot;spread changed&quot; when the median held, &quot;less steady&quot; when it moved but runs vary more) instead of citing test initials #4884.<br>
<br>
<strong>Fixed</strong><br>
- The compare plugin skipped the statistical test whenever either sample had zero variance, reporting &quot;No variability&quot;. In a WebPageReplay lab the most deterministic metrics are constant within a session, so the guard suppressed exactly the clearest regressions: every run shifting cleanly from 303 ms to 310 ms was never tested while noisy metrics always were. Constant samples now reach Mann-Whitney (which handles them fine), only truly identical datasets are short-circuited. Also fixes the compare CLI option definitions: the only non-default Mann-Whitney method choice was misspelled so picking it crashed scipy, three choices carried leading spaces and one misspelled describe key kept its help text from rendering #4881.<br>
- The Compare tab is honest about tiny, duplicate and hidden changes. A 0.0005 CLS shift rendered as &quot;0 → 0, Δ 0 (0 %)&quot; yet was flagged red as significantly slower; small values now keep two significant digits and a significant change whose medians display the same value gets an amber &quot;detectable, tiny&quot; tier so it cannot read as a regression. Before-FCP/before-LCP pairs with identical values merge into one row instead of rendering and counting twice (old #chart- anchors kept), runs piling on the same value render as counted pills instead of a single dot, the effect size gets its own line under a short verdict pill and a clear improvement under a one-sided test is called out as &quot;likely faster&quot; instead of &quot;no change&quot; #4880.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[sitespeed.io 42.4.0]]></title>
            <link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#42.4.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#42.4.0</guid>
            <pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Where the JavaScript and CSS bytes go: the Coverage tab opens with a plain-language lead and a treemap sized by bytes and tinted by unused share, so you can see at a glance which few files own most of the weight and how much never ran. Bundles with a module breakdown drill into a per-module treemap and back, the smallest files fold into one tile so nothing becomes an unclickable sliver#4875.<br>
- Cumulative Layout Shift is now actionable: the card leads with a verdict naming the element that took the biggest share of the shift, when it fired and the fix that always applies (reserve space). Each shift shows its exact share of CLS, a score coloured by how dominant it is, its timing and its selector, and a cause line appears only where the markup proves one (an image or embed with no width and height, unmistakable ad markup), never a guess from a loose substring #4874.<br>
- The Compare graphic shows run-to-run spread, not just the median: each series draws its middle-80% band (p10 to p90) behind the dots with a grey stripe marking where the two bands overlap, so a wide grey band means the shift sits inside run-to-run noise and a clean gap means it is real. Cliff&#39;s delta rides on every chip whether the change is significant or not, and the median percentage is shown only when the test calls the change real #4879.<br>
- Firefox 153 and Edge 150 in the Docker container #4876.<br>
<br>
<strong>Fixed</strong><br>
- A shared or bookmarked link to any Metrics-tab card opened on the default tab with the target hidden, so the card looked empty. Every Metrics-tab anchor now resolves to its tab so deep links land on the card they name #4874.<br>
- The Cumulative Layout Shift list showed sub-0.01 shifts that printed as &quot;0.000&quot; and &quot;0% of CLS&quot;, a row that reads like a bug, and disagreed with the screenshot beside it, which only highlights shifts above 0.01. The list now shows shifts of 0.01 and up while smaller ones stay counted in the score and the verdict, and a page whose whole CLS is tiny movements gets an honest empty state pointing at the video #4878.<br>
- The Coach Page info card was lopsided, stacking Document, DOM structure and Storage and connection in the left column while the right showed only a short Resource hints card. Storage and connection moved to the right column so the two end at roughly the same height, and the right column is no longer empty on pages that ship no resource hints #4872.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[sitespeed.io 42.3.0]]></title>
            <link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#42.3.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#42.3.0</guid>
            <pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- The per-URL summary page leads with an action-first hero (what the user saw, the Coach score and the top fixes) instead of a box of numbers #4867.<br>
- The CrUx tab opens with a Core Web Vitals verdict and draws the field-data breakdowns as donuts #4865.<br>
- The Axe tab sorts violations worst-first, leads with a verdict and shows a real clean state when nothing failed #4866.<br>
- The Coach Page info card groups the facts and explains each value in plain language #4870.<br>
- Report composition donuts and cleanups #4871:<br>
<br>
<strong>Fixed</strong><br>
- Score bands are inclusive at 80 and 90, so an exactly-80 score is no longer colored as a failure #4868.<br>
- The summary hero&#39;s verdict phrases no longer look spaced out before their commas #4869.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[sitespeed.io 42.2.0]]></title>
            <link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#42.2.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#42.2.0</guid>
            <pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Browsertime 28.2 #4862, with the report surfacing its new visual diagnostics #4863. <code>--videoParams.filmstripDiff</code> adds a Diff toggle in the filmstrip lightbox (working on file:// too, where a tainted canvas used to block it) and a heatmap that tells a restless element apart from sub-pixel noise that inflates Last Visual Change and Speed Index. <code>--videoParams.noiseTolerance</code> ignores that noise at the source.<br>
- The Rendering tab&#39;s &quot;Why was rendering delayed?&quot; section now opens with a verdict, and the render-blocking requests are one sortable table named by file (ResourceLoader <code>load.php</code> batches by their first module) with each download drawn on a clock ending at the paint, so a late-injected resource is visibly not the culprit Chrome&#39;s blocking flag makes it look like. Falls back to the pagexray shape without bars when the run has no HAR (Safari, old data) #4856 #4859.<br>
- The Rendering tab&#39;s style cards lead with a verdict on whether to act and where, and Chrome&#39;s raw invalidation reasons (<code>Affected by :has()</code>, <code>Inline CSS style declaration was mutated</code>) are translated to plain language with a one-line fix on the four a developer can act on #4857 #4861.<br>
- Web fonts, the classic &quot;document done, text late&quot; cause, appear in the render-blocking table as context rows flagged when they finished after a paint. With browsertime 28.2 the style-invalidation split uses the real first-paint boundary from the trace instead of guessing by reason category #4858.<br>
- The playback timeline marks when the main thread was busy: the run&#39;s long tasks draw as a thin red band under the axis, so a filmstrip stall shows whether the CPU was the cause without leaving the tab #4860.<br>
<br>
<strong>Fixed</strong><br>
- The CPU tab&#39;s bar lists now line up: each row was its own grid, so bars started at a different x position whenever the value text length changed #4855.<br>
- Shared links to the newer Rendering anchors (<code>#slow-ttfb</code>, <code>#recalculate-style</code>, <code>#reflows-before-paint</code>, <code>#main-thread-animations</code>) loaded onto the default tab with the target hidden #4859.<br>
- The render-blocking document row disappeared on sites that redirect to a trailing slash #4857.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[browsertime 28.2.0]]></title>
            <link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#28.2.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#28.2.0</guid>
            <pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- New <code>videoParams.noiseTolerance</code>: a percentage of a frame&#39;s pixels that is allowed to differ before duplicate-frame elimination still treats the frame as unchanged. Browsers re-rasterize a visually-done page long after it settles, leaving invisible sub-pixel noise on glyph edges that the default handful-of-pixels tolerance counts as real change, inflating Last Visual Change, VisualComplete95/99 and Speed Index. Off by default #2528.<br>
- New <code>videoParams.filmstripDiff</code> frame diffs: writes <code>diff_&lt;ms&gt;.png</code> next to each filmstrip frame (the frame dimmed with every changed pixel painted red, using the same per-pixel threshold report UIs use at runtime) plus a Frame Diffs metric. Report UIs cannot read frame pixels from <code>file://</code> results, so an exact &quot;what changed in this frame&quot; view was impossible exactly where people debug local results. Off by default #2531.<br>
- Visual instability heatmap: the same <code>videoParams.filmstripDiff</code> run now also writes one <code>instability.png</code> showing how many times each pixel changed across the video (amber for changed once, deep red for ten or more), plus a Frame Instability summary in the JSON. Answers &quot;which parts of the page keep changing&quot;, so invisible re-rasterization noise can be told apart from a genuinely restless element #2533.<br>
- <code>cpu.styleInvalidations</code> (Chrome only) now splits every reason, trigger and source at first paint: new <code>afterFirstPaint</code> counts and <code>styleRecalcsAfterFirstPaint</code> / <code>layoutInvalidationsAfterFirstPaint</code> totals separate building the page from churn on a page the user is already looking at. The fields only exist when the trace carried the FCP event, so absent means unknown rather than zero #2530.<br>
<br>
<strong>Fixed</strong><br>
- Visual metrics no longer require OpenCV and pyssim unless the metrics that need them are requested: OpenCV is only used by <code>--contentful</code> and pyssim only by <code>--perceptual</code>, so a default install now runs on just ffmpeg, Numpy and Pillow. The Docker image keeps installing everything so both metrics keep working there #2535.<br>
- <code>VisualComplete99</code> is now reset when the page repaints backward. Two copy-paste typos reset <code>VisualComplete95</code> twice and never reset <code>VisualComplete99</code>, so on a page that reaches 100%, repaints backward and then recovers, <code>VisualComplete99</code> could report a time earlier than <code>VisualComplete95</code> (99% complete before 95%, which cannot happen) #2537.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[browsertime 28.1.0]]></title>
            <link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#28.1.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#28.1.0</guid>
            <pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Long Animation Frames (<code>pageinfo.loaf</code>) now ship every per-script field the LoAF API exposes (<code>startTime</code>, <code>duration</code>, <code>executionStart</code>, <code>pauseDuration</code>) plus <code>startTime</code> and <code>firstUIEventTimestamp</code> per frame — enough to attribute blocking time to individual scripts, place each frame on the page timeline and spot frames where an input was waiting #2522 #2523 #2526.<br>
- New <code>pageinfo.loafSummary</code> key (<code>totalFrames</code>, <code>totalBlockingDuration</code>, <code>totalDuration</code>): <code>pageinfo.loaf</code> only ships the 10 frames with the most blocking, so totals computed from it understate busy pages #2524.<br>
- LoAF script URLs get the same ResourceLoader <code>label</code>s as <code>cpu.urls</code> (<code>load.php[startup]</code> and friends) #2525.<br>
- Multi-module <code>load.php</code> batches are labeled with their first module name — pages lazy-load several general batches, so the bare <code>load.php[scripts]</code> label collided as soon as there was more than one #2527.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[browsertime 28.0.0]]></title>
            <link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#28.0.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#28.0.0</guid>
            <pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- New <code>mainDocument</code> field per iteration (any browser with a HAR): final URL, status, redirect count and response headers of the main document, with sensitive headers always removed. Tag runs by cache state (<code>x-cache</code>, <code>age</code>) or experiment enrollment (<code>server-timing</code>) without HAR post-processing #2500.<br>
- New <code>cpu.blocking</code> and <code>cpu.domains</code> keys (Chrome/Edge, <code>--cpu</code>): long-task blocking time per script (whole trace and before LCP) plus first vs third party CPU totals. Answers &quot;which script should I fix first&quot; #2503.<br>
- <code>cpu.blocking</code> also splits blocking time by kind of work (<code>kinds</code>: script, style/layout, HTML parsing, …), and blocking HTML-parse tasks are attributed to the document URL instead of the anonymous <code>unknown</code> bucket. A page blocked by parsing its own large HTML needs a completely different fix than one blocked by JavaScript #2512.<br>
- New <code>cpu.functionCosts</code> key (Chrome/Edge): the slowest JS functions by main-thread self time, with total time, source position and the owning ResourceLoader module for bundled code, parsed from the V8 sampling profiler that <code>--enableProfileRun</code> already enables. Says which function is slow instead of stopping at &quot;this script used 300 ms&quot; #2511. Rows also carry <code>callees</code>, showing where an orchestrator&#39;s total went (for example which modules MediaWiki&#39;s <code>runScript</code> executed) #2515.<br>
- New <code>cpu.selectorStats</code> key (Chrome only, on <code>--enableProfileRun</code>): per-selector CSS matching cost, showing the slowest selectors by elapsed time plus the wasteful ones with thousands of match attempts and zero matches. The only signal that says which selectors the style-recalc time goes to #2517.<br>
- New <code>cpu.styleInvalidations</code> key (Chrome only, with <code>--chrome.timeline</code>): style/layout invalidations aggregated by reason, by trigger (which class/attribute keeps changing) and by source, resolved to the owning ResourceLoader module when coverage runs. The invalidation-tracking events were in every trace for years but never parsed #2516 #2521.<br>
- New <code>cpu.timers</code> key (Chrome only, with <code>--chrome.timeline</code>): setTimeout/setInterval pressure per script (installs, fires, fire time, timeout-0 and recurring counts) plus the individual timers grouped by install site, resolved to the owning ResourceLoader module when coverage runs. On Wikipedia the timeout-0 offender turns out to be jquery&#39;s deferred machinery #2518 #2519 #2520.<br>
- <code>cpu.nonCompositedAnimations</code> entries now include <code>failureReasons</code>, the <code>compositeFailed</code> bitmask decoded via Blink&#39;s FailureReason enum, so consumers can tell a harmless &quot;animation has no visible change&quot; from a real &quot;unsupported CSS property&quot; #2514.<br>
- New <code>cpu.frames</code> key (Chrome/Edge, <code>--cpu</code>): presented/partial/dropped frames, effective FPS and the longest gap between presented frames, from Chrome&#39;s PipelineReporter events. Counts only drops Chrome flags as smoothness-affecting #2506.<br>
- Per-module coverage for MediaWiki ResourceLoader bundles: <code>load.php</code> coverage entries get a <code>modules</code> array with used/unused bytes per module, derived from the <code>mw.loader.impl</code> boundaries in the bundle source. Automatic, Chrome only #2502.<br>
- New <code>cpu.moduleCosts</code> key: per-module main-thread CPU time inside ResourceLoader bundles, when both trace and coverage are collected. Per-module <code>selfTime</code> plus an <code>otherTime</code> bucket for whole-bundle work #2505.<br>
- Stable <code>label</code> fields (<code>load.php[startup]</code>, <code>load.php[scripts]</code>, …) on ResourceLoader URLs in <code>cpu.urls</code>, <code>cpu.blocking</code>, <code>scriptCosts</code>, <code>forcedReflows</code> and coverage entries #2504, and on <code>cpu.moduleCosts</code> #2507. The raw URLs embed a <code>version=</code> parameter that changes every deploy and breaks per-bundle time series. Additive: <code>url</code> is untouched.<br>
- Inline CSS coverage entries are labeled with the owning MediaWiki template (<code>TemplateStyles:rNNNNNNN</code>, from the style element&#39;s <code>data-mw-deduplicate</code> attribute). Inline sheets all share the document URL (or an empty one), so Wikipedia&#39;s CSS coverage collapsed into anonymous buckets and nobody could see which template ships the dead CSS #2509.<br>
- The <code>renderBlocking.recalculateStyle</code> summary (Chrome only) now includes the event <code>count</code> and the largest single event (<code>maxElements</code>, <code>maxDurationInMillis</code>), before FCP and LCP. Tells one massive style invalidation apart from thousands of small forced recalcs #2496.<br>
- Bumped <code>chromedriver</code> and <code>edgedriver</code> to 149 #2487.<br>
- Updated the Docker image to Chrome 149 / Firefox 151 / Edge 149 #2486 #2488.<br>
- Updated <code>@sitespeed.io/throttle</code> to 6.0.1 #2499.<br>
- Releases are now built and published from GitHub Actions with npm provenance and an SBOM, so the published package can be verified against the source it was built from #2491.<br>
<br>
<strong>Fixed</strong><br>
- <code>--enableProfileRun</code> no longer affects the measured runs: combined with <code>--cpu</code> it misnamed every measured trace as <code>trace-N-extra-run.json</code>, let the profile trace overwrite iteration 1&#39;s trace and suppressed the result log line #2508.<br>
- Navigation-script failures now include the URL and iteration number in the error message #2489.<br>
<br>
<strong>Changed</strong><br>
- Coverage from <code>--enableProfileRun</code> is now a single object marked <code>source: &#39;profileRun&#39;</code> instead of a one-element array keyed by iteration; indexing it by run number read <code>undefined</code> and reported no coverage. <code>--chrome.coverage</code> keeps the per-iteration array shape #2501.<br>
- Document body-loading events (<code>DocumentLoader::*</code>, <code>NavigationBodyLoader::*</code>, <code>URLLoader::*</code>) now count as parse time and V8 interrupt/housekeeping as script evaluation in <code>cpu.categories</code>, instead of falling into <code>other</code>. What remains in <code>other</code> is almost entirely Chrome&#39;s task-scheduling overhead (RunTask self time), so consumers can present the bucket honestly instead of as unexplained mystery time #2513.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[throttle 6.0.1]]></title>
            <link>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#6.0.1</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#6.0.1</guid>
            <pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- Make throttle work on GitHub Actions again: Linux throttling no longer fails with &quot;Exclusivity flag on, cannot modify&quot; when another tool already holds the ingress qdisc slot on the interface. GitHub-hosted Actions runners now come with an eBPF network-monitoring agent that attaches a clsact qdisc to the default interface (other eBPF-based security agents do the same), and since only one ingress/clsact qdisc can exist per device, throttle&#39;s <code>tc qdisc add ... ingress</code> failed and took the whole measurement run down with it. The original code path is unchanged and runs first; only when it fails does throttle fall back to attaching its redirect filters to the existing qdisc (on the clsact ingress hook when needed), with explicit filter priorities so stop removes exactly its own filters and leaves the other tool&#39;s qdisc and filters untouched. #108.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[browsertime 27.4.1]]></title>
            <link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#27.4.1</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#27.4.1</guid>
            <pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- <code>--chrome.coverage</code> no longer reports &quot;0 B unused&quot; for functions that executed at least once. The JS used-bytes calculation took the union of every V8 range with count &gt; 0, but V8 returns nested ranges — an outer range over the whole function body and inner ranges over sub-blocks. If a function ran at all, its outer range already covered the whole body and the inner count == 0 ranges (the actual dead branches) got absorbed into the union and contributed nothing. On modern bundles where module-evaluation top-level code runs for almost every function, the per-script unused-% collapsed to roughly zero across the board, leaving sitespeed.io rendering a &quot;0 B unused&quot; column on pages that obviously ship plenty of dead code. The calculation now walks the ranges as nested intervals, painting the innermost range&#39;s count at every byte (the same definition Chrome DevTools&#39; Coverage panel uses), so dead branches inside executed functions show up correctly. CSS rule-usage tracking returns flat, non-overlapping ranges and is unchanged #2484.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[browsertime 27.4.0]]></title>
            <link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#27.4.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#27.4.0</guid>
            <pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- JS/CSS coverage collection for Chrome. <code>--chrome.coverage</code> turns it on for every iteration for users who want the data and accept that detailed V8 coverage deoptimizes scripts and will skew their timing metrics. <code>--enableProfileRun</code> also turns coverage on for Chrome alongside the existing trace, so users who want coverage without affecting their timings can lean on the same extra-iteration pattern they already use for tracing — the result is merged back into the main <code>browsertime.json</code> so consumers like sitespeed.io see the data in the same place they read every other metric. Each entry has a per-file breakdown (<code>url</code>, <code>totalBytes</code>, <code>usedBytes</code>, <code>unusedBytes</code>, <code>unusedPercent</code>) #2480.<br>
<br>
<strong>Fixed</strong><br>
- HAR post-processing no longer throws when a page has no matching entries. Occasionally a HAR contains a page whose <code>pageref</code> has no entries — typically a navigation that didn&#39;t produce any requests, or an extension-injected page. <code>getDocumentRequests</code> and <code>getFinalURL</code> dereferenced <code>shift()</code> / <code>pop()</code> without a guard, and <code>getMainDocumentTimings</code> wrapped its entire per-page loop in a single try/catch so one bad page wiped out the main-document timings for every other page in the same HAR. Downstream this surfaced as a noisy triplet of warnings followed by an empty coach-data payload in sitespeed.io. The three crash points are now guarded and unresolvable pages are skipped #2483.<br>
- Bumped <code>geckodriver</code> to a version with native ARM-64 support #2482.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[onlinetest 4.0.1]]></title>
            <link>https://github.com/sitespeedio/onlinetest/blob/main/CHANGELOG.md#4.0.1</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/onlinetest/blob/main/CHANGELOG.md#4.0.1</guid>
            <pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- Compare page now renders screenshots, the filmstrip and the run video when the HAR points at a different sitespeed.io result server (e.g. wikiperformance comparing HARs that live on wikimedia.sitespeed.io). The helmet CSP only allowed <code>&#39;self&#39;</code> for images and — via the inherited <code>default-src</code> — for video, so the cross-origin URLs the HAR carries in <code>_meta.screenshot</code> / <code>_meta.filmstrip[].file</code> / <code>_meta.video</code> were blocked and the slots came up empty. <code>img-src</code> now also allows any <code>https:</code> origin and a new <code>media-src</code> does the same for video #269.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[browsertime 27.3.0]]></title>
            <link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#27.3.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#27.3.0</guid>
            <pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- <code>browsertime --help</code> is now navigable by topic. The default view shows a short curated list of common options plus the available topic names. <code>browsertime --help &lt;topic&gt;</code> shows just that topic, and <code>browsertime --help-all</code> reproduces the historical full dump for scripts and power users. The old single-screen dump of every option from all 13 topic groups was overwhelming for new users and slow to skim; the topic-filtered view follows the curl/ffmpeg pattern #2467.<br>
<br>
<strong>Fixed</strong><br>
- TypeScript types and IntelliSense for navigation scripts are tightened across the script-facing surface. A new <code>BrowsertimeScript</code> type alias lets scripts annotate their default export and get both <code>context</code> and <code>commands</code> typed in one line. The high-level command helpers (<code>navigate</code>, <code>find</code>, <code>getText</code>, <code>fill</code>, <code>hover</code>, <code>press</code>, <code>getTitle</code>, <code>waitForUrl</code>, …) now surface their JSDoc parameter and return types in IntelliSense instead of being typed as <code>Function</code>, and <code>commands.find</code> resolves to a real <code>WebElement</code> so chained calls get completion from selenium-webdriver #2476. <code>context.options</code>, <code>context.result</code>, and <code>context.taskData</code> are typed as <code>Record&lt;string, any&gt;</code> so editors offer completion on <code>context.options.</code> etc. #2478. <code>commands.mouse</code> is now a proper shape (selector typed as <code>string</code>, <code>singleClick</code>&#39;s options surface <code>waitForNavigation</code>) instead of an anonymous object literal, and <code>measure.stop</code> / <code>measure.clickAndMeasure</code> / <code>measure.stopAsError</code> return types are explicit (<code>Promise&lt;void&gt;</code> / <code>Promise&lt;unknown&gt;</code>) instead of <code>Promise&lt;any&gt;</code> #2479.<br>
- How Browsertime publishes its TypeScript types is now safer. <code>scripting.d.ts</code> moved to the repo root next to <code>package.json</code> so it can&#39;t be clobbered by a future <code>tsc</code> outDir change, the <code>types</code> condition comes first under <code>exports</code> to match TypeScript&#39;s documented resolution rules, and <code>publint</code> runs as part of <code>prepublishOnly</code> so common package.json mistakes fail before a release goes out #2477.<br>
- Replaced the direct <code>lodash.merge</code> dependency with a small in-tree <code>merge()</code> helper in <code>lib/support/util.js</code>. The helper matches lodash&#39;s actual semantics for the cases Browsertime relies on — arrays merged by index, <code>undefined</code> source values skipped unless the key is missing on the target, <code>Date</code>/<code>RegExp</code>/class instances passed by reference, prototype-pollution keys rejected — which finishes the lodash unbundling the same way sitespeed.io did #2468.<br>
- Bumped dependencies: <code>chrome-har</code> 1.3.1 #2469, <code>chrome-remote-interface</code> and <code>selenium-webdriver</code> #2475, <code>@sitespeed.io/log</code> 2.0 #2471, <code>chromedriver</code> / <code>edgedriver</code> / <code>geckodriver</code> #2472.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[chrome-har 1.3.1]]></title>
            <link>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#1.3.1</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#1.3.1</guid>
            <pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[onlinetest 4.0.0]]></title>
            <link>https://github.com/sitespeedio/onlinetest/blob/main/CHANGELOG.md#4.0.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/onlinetest/blob/main/CHANGELOG.md#4.0.0</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- New <code>failed_reason TEXT</code> and <code>finished_date TIMESTAMP</code> columns on <code>sitespeed_io_test_runs</code>. <code>failed_reason</code> is populated from three paths the DB previously knew nothing about: Bull&#39;s <code>global:failed</code> event (the testrunner threw), the queue-down submit path in <code>add-test.js</code> (Redis unreachable when the test was queued), and the result-queue path when sitespeed.io itself exits non-zero (testrunner now sends <code>Test runner exited with code N: &lt;last line of stderr&gt;</code>, capped at 500 chars). <code>finished_date</code> is stamped on every terminal transition, so end-to-end duration can be derived as <code>finished_date - added_date</code> and run duration as <code>finished_date - run_date</code> (which is the browsertime <em>start</em> timestamp, not finish) #264.<br>
- <code>server/database/migrations/</code> directory establishes the convention for schema changes against existing deployments — <code>setup.sql</code> only runs on a fresh Postgres data dir, so live databases need ALTERs applied separately. Each migration ships with a <code>.sh</code> helper (<code>check</code> / <code>backup</code> / <code>dry-run</code> / <code>apply</code> / <code>verify</code> / <code>rollback</code>) that runs <code>psql</code> inside the compose Postgres container, plus a README documenting the manual path. Existing deployments must run <code>001-add-failure-fields.sh apply</code> before rolling the server forward #264.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[onlinetest 3.8.0]]></title>
            <link>https://github.com/sitespeedio/onlinetest/blob/main/CHANGELOG.md#3.8.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/onlinetest/blob/main/CHANGELOG.md#3.8.0</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Default sitespeed.io Docker image bumped from 40 to 41 in <code>.env.example</code>. The README &quot;Update sitespeed.io version&quot; snippets now reference 41 / 42 as the current and next-major tags.<br>
- Vendored compare bundle rolled to pagexray 5.0.0 (HTTP/3 detection, case-insensitive <code>Cache-Control</code> directives, <code>missingCompression</code> over-count fix). The bundle shrinks from ~28 KB to ~17 KB thanks to pagexray&#39;s switch from uglify-es to terser #262.<br>
<br>
<strong>Fixed</strong><br>
- <code>/admin</code> &quot;failed&quot; pill is now a real health signal: it counts failed test runs in the last 24 h from Postgres instead of Bull&#39;s <code>getJobCounts()</code>, which was capped by <code>removeOnFail</code> and only decayed on a successful retry — so the pill accumulated weeks of stale failures and shouted &quot;13 failed&quot; next to activity cards that correctly showed 0 in 24 h #261.<br>
- Compare cookie list no longer renders domains like <code>.example.com\nUIDR=...</code> when a HAR concatenates multiple <code>Set-Cookie</code> response headers into one newline-joined value — the next cookie&#39;s name was leaking into the previous cookie&#39;s <code>Domain=</code> attribute. Picked up via the pagexray bump #262.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[pagexray 5.0.0]]></title>
            <link>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#5.0.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#5.0.0</guid>
            <pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- CLI can now read a HAR from stdin: <code>pagexray -</code> or piping into <code>pagexray</code> with no path argument #131.<br>
- CLI prints a friendly error to stderr and exits 1 when the file is missing or the input isn&#39;t valid JSON (previously threw a raw Node stack trace) #131.<br>
- README updated to drop the long-removed <code>cookieStats</code> example block and document fields added across 3.x / 4.x (<code>fullyLoaded</code>, <code>afterOnLoad</code>, <code>afterOnContentLoad</code>, <code>renderBlocking</code>, <code>googleWebVitals</code>, <code>cpu</code>, <code>firstPartyRegEx</code>) #130.<br>
<br>
<strong>Fixed</strong><br>
- Classify <code>HTTP/3</code> / <code>HTTP/3.0</code> connections as <code>h3</code> (previously only the lowercase <code>h3</code> / <code>h3-29</code> shorthand was recognised — the canonical form fell through to <code>h1</code>) #128.<br>
- Parse <code>Cache-Control</code> directives case-insensitively (RFC 7234 §5.2). <code>Max-Age=42</code> is now read as 42 instead of 0, and <code>No-Cache</code> / <code>No-Store</code> are honoured #128.<br>
- Replace the deprecated <code>url.parse</code> (Node DEP0169) with the WHATWG <code>URL</code> parser in <code>getHostname</code> #128.<br>
- Stop throwing in <code>getDocumentRequests</code> when a page has no matching entries — return an empty array instead #128.<br>
- <code>missingCompression</code> was flagging every large text asset, including gzipped ones, because <code>headers.flatten</code> wraps values in arrays and the encoding check compared the array to a string. Unwrap before comparing, accept compound codings (<code>br, gzip</code>), and recognise <code>zstd</code> #129.<br>
- Match the <code>Domain=</code> cookie attribute case-insensitively (RFC 6265 §5.2) so third-party cookies set with lowercase <code>domain=</code> are detected #129.<br>
- Recognise common two-label public suffixes (<code>.co.jp</code>, <code>.com.br</code>, <code>.com.au</code>, ...) in <code>getMainDomain</code> so the auto-generated first-party regex isn&#39;t wrong for non-<code>.co.uk</code> country domains #129.<br>
- <code>defaultContentTypes</code> now includes <code>favicon</code> so every page has a consistent shape (matches the example in the README) #129.<br>
- <code>xml</code> is now considered for <code>missingCompression</code> reporting #129.<br>
- <code>engines.node</code> bumped from <code>&gt;=8.9.0</code> to <code>&gt;=22.0.0</code> (the current Node.js LTS), and the GitHub Actions matrix now runs on Node 22 + 24 #132, #133.<br>
- Test runner switched from Mocha + Chai to AVA, matching the rest of the sitespeed.io / browsertime ecosystem. Test helpers no longer depend on bluebird or lodash #133.<br>
- ESLint upgraded from 8 to 9 with the new flat config (<code>eslint.config.js</code> replaces <code>.eslintrc.json</code> and <code>.eslintignore</code>) #133.<br>
- All devDependencies bumped to current major versions: prettier 3, browserify 17, browserify-banner 2, @babel/core + preset-env 7.29, jsdoc 4. The abandoned <code>uglify-es</code> is replaced by <code>terser</code>, and <code>mkdirp</code> is dropped in favour of native <code>fs.mkdirSync({recursive:true})</code> in the browserify script #133.<br>
<br>
<strong>Changed</strong><br>
- Node.js 22 is minumium.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/pagexray.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[onlinetest 3.7.0]]></title>
            <link>https://github.com/sitespeedio/onlinetest/blob/main/CHANGELOG.md#3.7.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/onlinetest/blob/main/CHANGELOG.md#3.7.0</guid>
            <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Per-queue 24 h sparkline on each <code>/admin</code> queue row, independently scaled so low- and high-traffic queues both show shape #256.<br>
- Subtle motion on <code>/admin</code>: one-time staggered bar-chart entrance, refresh-indicator pulse, and tweened number rollups when totals change. All honour <code>prefers-reduced-motion</code> #256.<br>
<br>
<strong>Fixed</strong><br>
- Queue defaults bumped to <code>removeOnComplete: 50 / removeOnFail: 100 / attempts: 2</code>; code-level fallbacks aligned with the yaml #255.<br>
- Internal queues (<code>testrunners</code>, <code>result</code>) no longer listed on <code>/admin</code> — they had no failures, no sparkline, and an inert Empty button #258.<br>
- Refresh indicator on <code>/admin</code> now sits in a fixed-width column so the version pill can&#39;t shift sideways each tick #258.<br>
- Testrunner setup duplicated on restart — registration was concatenating old + new instead of deduping #257.<br>
- Multi-type setups on one location (e.g. desktop + emulatedMobile) collapsed into the last entry after a restart; dedupe now keys on full setup identity, not just queue name #259.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[onlinetest 3.6.0]]></title>
            <link>https://github.com/sitespeedio/onlinetest/blob/main/CHANGELOG.md#3.6.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/onlinetest/blob/main/CHANGELOG.md#3.6.0</guid>
            <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Activity stats on <code>/admin</code>: totals for the last 24 hours and 7 days plus a stacked bar chart of tests per hour over the last 24 h (completed / failed / other). Pure server-rendered SVG, cached for 60 s so the auto-refresh doesn&#39;t beat on Postgres #252.<br>
<br>
<strong>Fixed</strong><br>
- Hide the Failed count for the internal <code>testrunners</code> and <code>result</code> queues — the number was unactionable because the queues don&#39;t appear in Recent failures #251.<br>
- Age labels in Recent failures now graduate to <code>d</code>/<code>mo</code> past 48 h instead of shouting <code>12608h ago</code> #251.<br>
- Long URLs no longer push the <code>/search/</code> results table past its container and shove the page off-centre. URL cells now wrap at any character; the form has <code>overflow-x: auto</code> as a safety net #253.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[onlinetest 3.5.0]]></title>
            <link>https://github.com/sitespeedio/onlinetest/blob/main/CHANGELOG.md#3.5.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/onlinetest/blob/main/CHANGELOG.md#3.5.0</guid>
            <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Health banner on <code>/admin</code>: Redis up/down, Postgres up/down, connected testrunners, totals for pending/running/failed jobs #247.<br>
- &quot;Currently running&quot; table on <code>/admin</code> — every active job with URL/script, queue, runner, and elapsed time. Runs over 10 minutes are highlighted #247.<br>
- &quot;Recent failures&quot; table on <code>/admin</code> with the error message and a one-click Retry button #248.<br>
- Active and Failed counts on the queue table, plus a red &quot;no worker&quot; badge when a queue has pending jobs but no testrunner serving it #246.<br>
- <code>/admin</code> auto-refreshes every 15 seconds. Pauses in background tabs #249.<br>
- Opt-in auto-refresh toggle on <code>/search/</code>, 60 seconds. Off by default. Pauses while any test is ticked, so Compare selections aren&#39;t lost. State remembered in <code>localStorage</code> #250.<br>
- <code>/admin</code> mobile layout reworked for the new tables — rows stack into name → counts → action on narrow screens #246 #247 #248.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[compare 2.0.0]]></title>
            <link>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#2.0.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#2.0.0</guid>
            <pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Swapped the waterfall renderer from PerfCascade to<br>
- Page X-ray table grouped into sections (Content, Render blocking,<br>
- Filmstrip section (when both HARs have one) with frames sampled from<br>
- Visual progress chart now shows per-HAR timing markers<br>
- Core Web Vitals row in the page X-ray table:<br>
- Render-blocking metrics from Chrome HARs (blocking, potentially<br>
- Long Tasks, Total Blocking Time and Max Potential FID under CPU.<br>
- <code>stripVersion</code> configuration flag (and a checkbox on the start page)<br>
- Support for <code>.har.gz</code> HAR files via the browser&#39;s native<br>
- Skip-to-content link, ARIA labels and visually-hidden table captions<br>
- Comment slot for the request/response diff section<br>
- First/third party support — PageXray now auto-detects the host page&#39;s<br>
<br>
<strong>Changed</strong><br>
- Build tooling moved to Vite. The build output<br>
- Styling rewritten in plain CSS (Sass dropped) with a small design-token<br>
- Templates rewritten as plain JS template literals (Template7 dropped).<br>
- Upgraded PageXray to 4.x.<br>
<br>
<strong>Removed</strong><br>
- The service worker / Workbox offline support. A one-time cleanup<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/compare.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[pagexray 4.5.0]]></title>
            <link>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.5.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.5.0</guid>
            <pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Surface page-level style recalculation work on <code>renderBlocking.recalculateStyle</code><br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/pagexray.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[chrome-har 1.3.0]]></title>
            <link>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#1.3.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#1.3.0</guid>
            <pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Lift CDP <code>renderBlockingStatus</code> onto entries as <code>_renderBlocking</code> (Chrome 108+) so downstream HAR consumers (waterfall-tools&#39;<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[chrome-har 1.2.1]]></title>
            <link>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#1.2.1</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#1.2.1</guid>
            <pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- Make sure not multiple pages are created for a soft nav #154<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[chrome-har 1.2.0]]></title>
            <link>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#1.2.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#1.2.0</guid>
            <pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Support for soft navigation coming from Browsertime #153<br>
<br>
<strong>Fixed</strong><br>
- Get Charset from response #152<br>
- Fix to parse postData #150<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[throttle 6.0.0]]></title>
            <link>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#6.0.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#6.0.0</guid>
            <pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Added IPv6 throttling support on macOS #94 and Linux #100.<br>
- Apply packet loss also to the upload interface #69.<br>
<br>
<strong>Fixed</strong><br>
- More robust detection of the default network interface on Linux, falling back to global IP address lookup when the default route is unavailable #104.<br>
- Fixed README profile values for DSL and Edge to match actual code, and fixed Node.js API examples to use named imports.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[chrome-har 1.1.1]]></title>
            <link>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#1.1.1</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#1.1.1</guid>
            <pubDate>Fri, 17 Oct 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- The option to clean header values was broken, this has been reverted for now.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[chrome-har 1.1.0]]></title>
            <link>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#1.1.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#1.1.0</guid>
            <pubDate>Thu, 16 Oct 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Add option to clean header values #141.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[chrome-har 1.0.1]]></title>
            <link>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#1.0.1</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#1.0.1</guid>
            <pubDate>Fri, 11 Oct 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- Try/catch broken dates #130.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[chrome-har 1.0.0]]></title>
            <link>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#1.0.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#1.0.0</guid>
            <pubDate>Tue, 08 Oct 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- Removed dayjs dependency #128.<br>
- Removed uuid dependency #127.<br>
- Updated to tough cookie 5.0.0 #126.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[throttle 5.0.1]]></title>
            <link>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#5.0.1</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#5.0.1</guid>
            <pubDate>Mon, 26 Aug 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- Smarter ifb0 handling on Linux #93.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[chrome-har 0.13.5]]></title>
            <link>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.13.5</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.13.5</guid>
            <pubDate>Fri, 12 Jul 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- Always take care of Network.responseReceivedExtraInfo even if its fired early, thank you ifduyue for PR #120.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[chrome-har 0.13.3]]></title>
            <link>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.13.3</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.13.3</guid>
            <pubDate>Fri, 05 Jul 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- Include early hints requests, thank you Ben Schwarz for PR #118.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[pagexray 4.4.4]]></title>
            <link>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.4.4</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.4.4</guid>
            <pubDate>Thu, 31 Aug 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- Added a safer header check #125.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/pagexray.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[pagexray 4.4.3]]></title>
            <link>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.4.3</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.4.3</guid>
            <pubDate>Thu, 31 Aug 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- If the meta section from a HAR file from Browsertime was missing, we didn&#39;t catch that. Fixed in #124.<br>
- Update to latest minimist #122.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/pagexray.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[throttle 5.0.0]]></title>
            <link>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#5.0.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#5.0.0</guid>
            <pubDate>Sat, 02 Jul 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Changed</strong><br>
- Dropped support for NodeJS 12 since it&#39;s unmaintaned.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[throttle 4.0.3]]></title>
            <link>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#4.0.3</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#4.0.3</guid>
            <pubDate>Wed, 29 Jun 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- Fixed <code>--version</code> so it actually shows the version again #75.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[throttle 4.0.2]]></title>
            <link>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#4.0.2</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#4.0.2</guid>
            <pubDate>Tue, 21 Jun 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- The E6 Module convertion in 4.0 broke version check (<code>--version</code>) making installs failed. PR #74 is a temporaty fix for that.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[throttle 4.0.1]]></title>
            <link>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#4.0.1</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#4.0.1</guid>
            <pubDate>Fri, 17 Jun 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- Removed the dependecy of route. Using <code>ip route</code> instead and we already have <code>ip</code> as a requirement.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[pagexray 4.4.2]]></title>
            <link>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.4.2</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.4.2</guid>
            <pubDate>Thu, 05 May 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- Added missing SSL timings to the time per domain #117<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/pagexray.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[throttle 4.0.0]]></title>
            <link>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#4.0.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#4.0.0</guid>
            <pubDate>Thu, 14 Apr 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- Updated dev dependencies to latest versions #68<br>
<br>
<strong>Changed</strong><br>
- Converting the project to ES6 module. If you run Throttle by command line it will work exactly as before except that we dropped support for NodeJS 10 #67. You can read Sindre Sorhus ESM package guide.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[pagexray 4.4.1]]></title>
            <link>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.4.1</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.4.1</guid>
            <pubDate>Tue, 05 Apr 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- Bumped minimist to 1.2.6<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/pagexray.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[pagexray 4.4.0]]></title>
            <link>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.4.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.4.0</guid>
            <pubDate>Fri, 04 Feb 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Fallback if mime types aren&#39;t mapped and use file endings. At the moment we fallback for some of the font types #109.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/pagexray.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[coach-core 7.0.0]]></title>
            <link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#7.0.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#7.0.0</guid>
            <pubDate>Wed, 01 Dec 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Updated to use latest Coach core and Browertime.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[coach 7.0.0]]></title>
            <link>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#7.0.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#7.0.0</guid>
            <pubDate>Wed, 01 Dec 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Updated to use latest Coach core and Browertime.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[coach-core 6.4.3]]></title>
            <link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.4.3</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.4.3</guid>
            <pubDate>Fri, 15 Oct 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Updated to use latest Browsertime with latest Chromedriver<br>
- Updated Docker container to use latest Chrome/Firefox<br>
- Use Browsertime 11.0.0<br>
- Use Coach-code 6.0<br>
- Use latest Firefox and Chrome<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[coach 6.4.3]]></title>
            <link>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#6.4.3</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#6.4.3</guid>
            <pubDate>Fri, 15 Oct 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Updated to use latest Browsertime with latest Chromedriver<br>
- Updated Docker container to use latest Chrome/Firefox<br>
- Use Browsertime 11.0.0<br>
- Use Coach-code 6.0<br>
- Use latest Firefox and Chrome<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[pagexray 4.3.1]]></title>
            <link>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.3.1</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.3.1</guid>
            <pubDate>Wed, 21 Jul 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Added missing in_body_parser_blocking render blocking info for Chrome.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/pagexray.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[pagexray 4.3.0]]></title>
            <link>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.3.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.3.0</guid>
            <pubDate>Wed, 02 Jun 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Include request method per asset #105.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/pagexray.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[coach-core 5.0.0]]></title>
            <link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#5.0.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#5.0.0</guid>
            <pubDate>Wed, 11 Mar 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Changed</strong><br>
- We moved out the core functionality to coach-core. This makes it easy to use the Coach in your own code.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[coach 5.0.0]]></title>
            <link>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#5.0.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#5.0.0</guid>
            <pubDate>Wed, 11 Mar 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Changed</strong><br>
- We moved out the core functionality to coach-core. This makes it easy to use the Coach in your own code.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[coach-core 4.5.0]]></title>
            <link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#4.5.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#4.5.0</guid>
            <pubDate>Thu, 20 Feb 2020 00:00:00 GMT</pubDate>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[coach 4.5.0]]></title>
            <link>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.5.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.5.0</guid>
            <pubDate>Thu, 20 Feb 2020 00:00:00 GMT</pubDate>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[coach-core 4.4.1]]></title>
            <link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#4.4.1</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#4.4.1</guid>
            <pubDate>Fri, 07 Feb 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- Upgraded to Browsertime 8.0.1<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[coach 4.4.1]]></title>
            <link>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.4.1</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.4.1</guid>
            <pubDate>Fri, 07 Feb 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- Upgraded to Browsertime 8.0.1<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[coach-core 4.4.0]]></title>
            <link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#4.4.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#4.4.0</guid>
            <pubDate>Wed, 05 Feb 2020 00:00:00 GMT</pubDate>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[coach 4.4.0]]></title>
            <link>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.4.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.4.0</guid>
            <pubDate>Wed, 05 Feb 2020 00:00:00 GMT</pubDate>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[humble 0.2.0]]></title>
            <link>https://github.com/sitespeedio/humble/blob/main/CHANGELOG.md#0.2.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/humble/blob/main/CHANGELOG.md#0.2.0</guid>
            <pubDate>Sat, 11 Jan 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Updated throttle frontend to latest version where you can see throttling profiles set by using the API and with custom throttling support.<br>
]]></description>
            <author>Sitespeed.io</author>
        </item>
        <item>
            <title><![CDATA[coach-core 4.3.1]]></title>
            <link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#4.3.1</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#4.3.1</guid>
            <pubDate>Fri, 10 Jan 2020 00:00:00 GMT</pubDate>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[coach 4.3.1]]></title>
            <link>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.3.1</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.3.1</guid>
            <pubDate>Fri, 10 Jan 2020 00:00:00 GMT</pubDate>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[coach-core 4.3.0]]></title>
            <link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#4.3.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#4.3.0</guid>
            <pubDate>Thu, 12 Dec 2019 00:00:00 GMT</pubDate>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[coach 4.3.0]]></title>
            <link>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.3.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.3.0</guid>
            <pubDate>Thu, 12 Dec 2019 00:00:00 GMT</pubDate>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[coach-core 4.2.0]]></title>
            <link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#4.2.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#4.2.0</guid>
            <pubDate>Sat, 02 Nov 2019 00:00:00 GMT</pubDate>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[coach 4.2.0]]></title>
            <link>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.2.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.2.0</guid>
            <pubDate>Sat, 02 Nov 2019 00:00:00 GMT</pubDate>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[compare 1.0.0]]></title>
            <link>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#1.0.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#1.0.0</guid>
            <pubDate>Wed, 28 Nov 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Added support for using Github gists see #34.<br>
- Added support for using a config file to configure which HARs to test.<br>
- Added support for copy/paste directly you HAR, configuration file or a gist URL or id.<br>
- Refactor the CSS into Sass, development build process now uses BrowserSync.<br>
- Service worker added for offline support. Workbox is used to achieve this.<br>
- Added support for showing changes in request/responses if you compare the same page #63.<br>
<br>
<strong>Changed</strong><br>
- New internal structure and use the new configuration object all the way.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/compare.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[compare 0.6.0]]></title>
            <link>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.6.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.6.0</guid>
            <pubDate>Wed, 17 Oct 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Sort CPU events by name to make it easier to spot regressions<br>
- Upgraded to latest release of template7<br>
- Added more Visual Metrics.<br>
- Upgrad to PageXray 2.4.0<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/compare.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[compare 0.5.1]]></title>
            <link>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.5.1</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.5.1</guid>
            <pubDate>Fri, 01 Jun 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- Layout -&gt; Rendering in latest Browsertime.<br>
- Upgraded to PerfCascade 2.5.2 fixiing Edge tab bug<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/compare.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[compare 0.5.0]]></title>
            <link>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.5.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.5.0</guid>
            <pubDate>Thu, 05 Apr 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- CPU metrics are now showed automatically.<br>
- Styled the PageXray info table to make it easier to read.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/compare.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[compare 0.4.1]]></title>
            <link>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.4.1</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.4.1</guid>
            <pubDate>Wed, 04 Apr 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- Major code refactoring to make it easier to do changes in the future.<br>
- Uploading files failed on Firefox.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/compare.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[compare 0.4.0]]></title>
            <link>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.4.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.4.0</guid>
            <pubDate>Mon, 02 Apr 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Upgraded to PerfCascade 2.4.1<br>
- You can change/upload HAR files when you already compare two HARs.<br>
<br>
<strong>Fixed</strong><br>
- The layout in the PageXray table was dependent of the length of the URL. That could make some pages look really bad.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/compare.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[compare 0.3.0]]></title>
            <link>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.3.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.3.0</guid>
            <pubDate>Fri, 30 Mar 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Automatically load the HAR files if both files are given in the URL . Thanks Ivru for the PR #15.<br>
- You can automatically load one HAR file by adding ?har1=URL&amp;compare=1 as the full URL.<br>
- Updated to PageXray 2.2.1<br>
- You can now drag and drop one HAR file with multiple pages and compare the pages with each others #16.<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/compare.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[compare 0.2.1]]></title>
            <link>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.2.1</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.2.1</guid>
            <pubDate>Sat, 03 Feb 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Fixed</strong><br>
- Upgraded to PerfCascade 2.2.2 that makes HAR files from WebPageTest Linux render<br>
- Log errors to the console<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/compare.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[compare 0.2.0]]></title>
            <link>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.2.0</link>
            <guid isPermaLink="false">https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.2.0</guid>
            <pubDate>Thu, 01 Feb 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[<strong>Added</strong><br>
- Upgraded to PageXray 2.1.0 and added more CPU metrics<br>
]]></description>
            <author>Sitespeed.io</author>
            <enclosure url="https://www.sitespeed.io/img/logos/compare.png" length="0" type="image/png"/>
        </item>
    </channel>
</rss>