MySpeed
Speed test history. It runs a test on a cron schedule, keeps the results for as long as you tell it to, and draws the graph — so you can answer "is it slow right now, or has it been slow every evening for a fortnight?"
Pairs with librespeed rather than competing with it: that one is an on-demand test you open when you want a number, this one is the unattended recorder. MySpeed can even use LibreSpeed as its measurement backend — it offers Ookla, LibreSpeed and Cloudflare as test providers, so the instance next door can be the thing it measures against.
Quick start
cp .env.example .env # optional -- every value has a default
docker compose up -d
Open http://<host>:5216. Everything — schedule, retention, provider, alerts —
is configured in the web UI, not in this file.
Ports
| Port | Proto | Purpose |
|---|---|---|
| 5216 | http | Web UI and API |
Why it looks like this
A bind mount instead of upstream's named volume. The official install is
docker run -v myspeed:/myspeed/data, a Docker-managed volume. Here it is
${DATA_PATH:-./data}, so the history database sits next to the compose file
where you can see it and a backup job can find it without knowing Docker's
layout. Same reasoning as jellyfin's /config.
MySpeed itself takes no environment configuration — no PUID, no TZ, no
options. State and settings both live in the SQLite database in that one
directory, which makes the stack trivially portable and the backup story simple:
copy the directory. The variables in .env.example are therefore Compose-level
only: the image tag, the host port, and where that directory lives.
Gotchas
-
latestis a build from May 2024. The project is alive — the repository was pushed to in September 2026 — but the last tagged release isv1.0.9and Docker Hub'slateststill points at that same image:Tag Pushed Size Digest development2026-08-02 102 MB sha256:043c2f00…latest2024-05-21 59 MB sha256:3a3e774b…1.0.92024-05-21 59 MB sha256:3a3e774b…So
latesthere does not mean recent — it means "the newest release", and there hasn't been one since May 2024. It will start moving again if upstream tags one. Until then, "update to the newest version" meansMYSPEED_TAG=development, which is a choice to make knowingly rather than adocker compose pullaway. -
Scheduled tests run on container time. The whole feature is cron expressions, and the image documents no
TZvariable — so "run at 03:00" is 03:00 UTC unless you tell the container otherwise. The two clock mounts are incompose.yaml, commented out; uncomment them to follow the host instead. They are off by default because turning them on shifts every existing schedule by your UTC offset. Same class of trap as the cron container in firefly. -
A speed test measures the path from this box. If MySpeed runs on the NAS, the graph is the NAS's connectivity — which is usually what you want, but it is not your laptop's Wi-Fi. And a low-power host can cap the result on CPU before the link saturates; see librespeed for the same caveat.
-
Back up the data directory. Months of measurements and every setting are in there, and nothing regenerates.
What else it does
Worth knowing about before you go looking for another tool:
- Health checks with alerting — email, Signal, WhatsApp or Telegram when a test fails or the line goes down.
- Prometheus and Grafana export, if you would rather graph this beside everything else.
- Multiple servers on one instance, so a single dashboard can watch more than one site.
- Configurable retention, from a few days to forever.
Exposing it
- Reverse proxy with Caddy — fine; the UI is just a dashboard, and the tests run server-side regardless of how you reach it.
- Cloudflare Tunnel — fine for the dashboard, unlike librespeed: the measurements do not travel through the tunnel, only the page does.
- Single sign-on with Authentik — forward auth suits it: browser-only, no accounts of its own. MySpeed has no authentication built in, so anyone who reaches the port can change the schedule and read the history.
Links
- Upstream: https://github.com/gnmyt/MySpeed
- Website and docs: https://myspeed.dev · https://docs.myspeed.dev/setup/linux
- Image: https://hub.docker.com/r/germannewsmaker/myspeed