Self-hosted Speed Test for HTML5 and more. Easy setup, examples, configurable, mobile friendly. Supports PHP, Node, Multiple servers, and more https://librespeed.org
Find a file
copilot-swe-agent[bot] a1e0a77ab5
Fix TAGLINE sed delimiter and add apostrophe tagline E2E test
- Switch TAGLINE sed from '#' to '/' delimiter so html_escape'd
  apostrophes (') don't break the sed expression
- Add standalone-apostrophe Docker service with TAGLINE="It'd rather be fast!"
- Add standaloneApostrophe URL (port 18186) to env.js
- Add E2E test asserting the apostrophe tagline renders correctly

Agent-Logs-Url: https://github.com/librespeed/speedtest/sessions/ebe265a8-4b1e-49b5-959a-66133ea0ab3a

Co-authored-by: sstidl <12804296+sstidl@users.noreply.github.com>
2026-04-18 20:48:33 +00:00
.github chore(deps): bump actions/setup-node from 4 to 6 (#783) 2026-04-13 07:32:05 +02:00
.logo Fixed typo in results/index.php 2021-04-13 10:27:36 +02:00
backend fix: return client IPv6 address via cloudflared (#757) 2026-03-05 23:52:59 +01:00
docker Fix TAGLINE sed delimiter and add apostrophe tagline E2E test 2026-04-18 20:48:33 +00:00
examples fix: add aria-label to startStopBtn for screen reader accessibility (#785) 2026-04-13 07:56:17 +02:00
frontend Implement the new design from #649 (#694) 2026-04-11 23:07:05 +02:00
results Implement the new design from #649 (#694) 2026-04-11 23:07:05 +02:00
tests Fix TAGLINE sed delimiter and add apostrophe tagline E2E test 2026-04-18 20:48:33 +00:00
.eslintrc.json Implement the new design from #649 (#694) 2026-04-11 23:07:05 +02:00
.gitignore add e2e testing (#777) 2026-04-12 14:59:54 +02:00
.prettierignore add eslinter, update github actions (stale issues, dependabot), optimize docker image (#728) 2025-12-06 18:47:56 +01:00
.prettierrc.json Implement the new design from #649 (#694) 2026-04-11 23:07:05 +02:00
config.json Implement the new design from #649 (#694) 2026-04-11 23:07:05 +02:00
design-switch.js Implement the new design from #649 (#694) 2026-04-11 23:07:05 +02:00
DESIGN_SWITCH.md doc: design-switch 2026-04-12 11:09:02 +00:00
DEVELOPMENT.md add eslinter, update github actions (stale issues, dependabot), optimize docker image (#728) 2025-12-06 18:47:56 +01:00
doc.md chore(release): v6.0.2 2026-04-14 14:25:27 +02:00
doc_docker.md Add Docker TAGLINE env customization for modern UI slogan 2026-04-18 20:02:10 +00:00
Dockerfile Add Docker TAGLINE env customization for modern UI slogan 2026-04-18 20:02:10 +00:00
Dockerfile.alpine Add Docker TAGLINE env customization for modern UI slogan 2026-04-18 20:02:10 +00:00
favicon.ico Fixed typo in results/index.php 2021-04-13 10:27:36 +02:00
index-classic.html fix: add aria-label to startStopBtn for screen reader accessibility (#785) 2026-04-13 07:56:17 +02:00
index-modern.html Implement the new design from #649 (#694) 2026-04-11 23:07:05 +02:00
index.html Implement the new design from #649 (#694) 2026-04-11 23:07:05 +02:00
LICENSE Fixed typo in results/index.php 2021-04-13 10:27:36 +02:00
package.json chore(release): v6.0.2 2026-04-14 14:25:27 +02:00
playwright.config.js add e2e testing (#777) 2026-04-12 14:59:54 +02:00
README.md doc: design-switch 2026-04-12 11:09:02 +00:00
speedtest.js chore(release): v6.0.2 2026-04-14 14:25:27 +02:00
speedtest_worker.js Changed var to the let/const because it's completely supported by IE11 and all other browsers since 2015. (#656) 2024-08-16 18:07:26 +00:00

LibreSpeed Logo

LibreSpeed

No Flash, No Java, No Websocket, No Bullshit.

This is a very lightweight speed test implemented in Javascript, using XMLHttpRequest and Web Workers.

Try it

Take a speed test

Compatibility

All modern browsers are supported: IE11, latest Edge, latest Chrome, latest Firefox, latest Safari. Works with mobile versions too.

Features

  • Download
  • Upload
  • Ping
  • Jitter
  • IP Address, ISP, distance from server (optional)
  • Telemetry (optional)
  • Results sharing (optional)
  • Multiple Points of Test (optional)

Screenrecording of a running Speedtest

Server requirements

  • A reasonably fast web server with Apache 2 (nginx, IIS also supported)
  • PHP 5.4 or newer (other backends also available)
  • MariaDB or MySQL database to store test results (optional, Microsoft SQL Server, PostgreSQL and SQLite also supported)
  • A fast! internet connection

Installation

Assuming you have PHP and a web server installed, the installation steps are quite simple.

  1. Download the source code and extract it
  2. Copy the following files to your web server's shared folder (ie. /var/www/html/speedtest for Apache): index.html, speedtest.js, speedtest_worker.js, favicon.ico and the backend folder
  3. Optionally, copy the results folder too, and set up the database using the config file in it.
  4. Be sure your permissions allow execute (755).
  5. Visit YOURSITE/speedtest/index.html and voila!

Installation Video

This video shows the installation process of a standalone LibreSpeed server: Quick start installation guide for Debian 12

More videos will be added later.

Android app

A template to build an Android client for your LibreSpeed installation is available here.

CLI client

A command line client is available here.

.NET client

A .NET client library is available in the LibreSpeed.NET repo (NuGet), maintained by MemphiZ.

Development

If you want to contribute or develop with LibreSpeed, see DEVELOPMENT.md for information about using npm for development tasks, linting, and formatting.

Design switch

LibreSpeed supports both the classic and modern UI. The root index.html acts as a lightweight switcher and redirects to index-classic.html or index-modern.html based on config.json (useNewDesign) or URL overrides (?design=new / ?design=old). For architecture and deployment details (including Docker behavior), see DESIGN_SWITCH.md.

Docker

A docker image is available on GitHub, check our docker documentation for more info about it. The image is built every week to include an updated version of the ipinfo-DB used for ISP detection. Also this ensures, that the latest security patches in PHP are installed. Therefore we recommend to use the latest image.

Go backend

A Go implementation is available in the speedtest-go repo, maintained by Maddie Zhan.

Rust backend

A Rust implementation is available in the speedtest-rust repo, maintained by Sudo Dios.

Node.js backend

A partial Node.js implementation is available in the node branch, developed by dunklesToast. It's not recommended to use at the moment.

Donate

Donate with Liberapay Donate with PayPal

License

Copyright (C) 2016-2024 Federico Dossena

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this program. If not, see https://www.gnu.org/licenses/lgpl.