is an open source tool that helps you analyze and optimize your website speed and performance, based on performance best practices rules and collecting browser metrics using the Navigation Timing API and User Timings.
JavaScript CSS HTML Shell

Build status Downloads Docker Stars Changelog #212

Website | Documentation | Twitter

Welcome to the wonderful world of web performance!

This branch tracks the development of the upcoming version 4.0 of The current production version is developed in the 3.x.

Using you can:

  • test your web site against Web Performance best practices using the Coach.
  • Collect timing metrics like Navigation Timing API and User Timing API from Firefox/Chrome using Browsertime.
  • Run your custom made Javascript and collect whatever metric you need.
  • Test one or multiple page, one or many runs to get more accurate metrics.
  • Create HTML result pages or store the metrics in Graphite
  • Write your own plugins that can do whatever tests you want/need.

But what does it look like?

A summary report in HTML:

Individual page report:

Collected metrics from a URL in Graphite/Grafana:


Version 4.0 is a ground up rewrite for node.js 4.3 and newer. It builds on all our experience since shipping 3.0 in December 2014, the first version to use node.js. It's currently under active development, you can check the release schedule here. We're determined to make it the best version of to date.

Documentation and tests for the upcoming version aren't in place yet. Rest assured, it will be before 4.0 is released. If you would like to give the new version a spin, try the following (you'll need node.js and Firefox/Chrome installed):

npm i -g

Or clone the repo and test the latest changes:

> git clone
> cd
> npm install
> bin/sitespeed.js --help
> bin/sitespeed.js

Or using Docker:

> docker run --privileged --rm -v "$(pwd)":/ sitespeedio/

Why 4.0?

There's a lot of things that we want to improve since 3.0. Here's some of the most important changes:

  • We support HTTP/2! In 3.X we used PhantomJS and a modified version of YSlow to analyze best practice rules. We also had BrowserMobProxy in front of our browsers that made it impossible to collect metrics using H2. We now use the coach and Firefox/Chrome without a proxy. That makes it easier for us to adapt to browser changes and changes in best practices.

  • We now support the feature that people asked about the most: Measure a page as a logged in user. Use --browsertime.preScript to run a selenium task to before the page is analyzed. Documentation is coming soon.

  • New HAR files rock! In the old version we use BrowserMobProxy as a proxy in front of the browser to collect the HAR. In the new version we collect the HAR directly from the browser. For Firefox we use the HAR export trigger and in Chrome we generates it from the performance log.

  • Stability: We have a new completely rewritten version of Browsertime that makes it easier for us to catch errors from the browser, drivers and environment problems.

  • Speed: Yep we dropped Java (it was needed for BrowserMobProxy) and most things are happening in parallel with the new version.

  • Don't overload Graphite: One thing that was annoying with 3.x was that it by default sent a massive amount of metrics to Graphite. That's cool in a way but it was too much. We now send curated metrics by default and you can choose to send more.

  • You can collect metrics from Chrome on an Android phone. In the current version you need to have it connected using USB to the server running, lets see how we can make it better in the future.

  • Using our Docker container you will get support getting SpeedIndex and startRender using VisualMetrics. This is highly experimental at this stage.

There are new things that will come also that isn't 100% implemented yet and you can help us.

  • InfluxDB support. We have started with a POC but need to implement it properly, see 889.

I want to help!

We have a special page for you!