Skip to main content

Speedtest Monitor

Open-source project by Gauthier Painteaux

Your ISP promises a speed; Speedtest Monitor checks whether it delivers. It measures your connection at regular intervals with Cloudflare’s engine, keeps the full history and alerts you as soon as throughput or latency degrades.

  • Next.js
  • Bun
  • TypeScript
  • SQLite
View on GitHub(opens in a new tab)
Version
v1.23.11
Stars
4
License
MIT
Updated
Speedtest Monitor: download, upload and latency of the latest test, with their 24-hour history
of history on screen, across 5 selectable ranges
6 h–30 days
alert channels: webhook, ntfy, Discord, Slack, email
5
between tests, adjustable on the fly
1–1,440 min

How Speedtest Monitor works

  1. 1

    Scheduling

    A test starts at the chosen interval.

  2. 2

    Measurement

    Cloudflare Speed Test, over plain HTTP.

  3. 3

    Storage

    The result goes into SQLite.

  4. 4

    Push

    The dashboard receives it over WebSocket.

  5. 5

    Alerting

    Thresholds are checked after every test.

Speedtest Monitor highlights

  • Real-time dashboard

    Each result streams in live over WebSocket: download, upload, latency, jitter and bufferbloat, charted from the last 6 hours up to 30 days.

  • Built for multi-gigabit

    Download, upload, latency, jitter and bufferbloat measured with Cloudflare Speed Test, tunable to saturate multi-gigabit links.

  • Degradation alerts

    Set thresholds on throughput, latency, bufferbloat or consecutive failures. Alerts go out via webhook, ntfy, Discord, Slack or email, once per incident.

  • Accounts and SSO

    Admin and viewer roles, password or OIDC login, tested with Authelia, Authentik and Keycloak.

Screenshots

  • Speedtest Monitor dashboard: download, upload and latency, 24-hour history and latest tests

Speedtest Monitor tech stack

Next.js + Bun server
One server handles both the app and the WebSocket, so there’s a single container and a single port to expose.
SQLite + Drizzle
A single-file database with no extra service, and versioned migrations applied at startup.
Cloudflare Speed Test
Plain HTTP measurements, no browser needed, on Cloudflare’s global network.
Better Auth
Database-backed sessions and a generic OIDC provider, without reinventing authentication.

Install Speedtest Monitor

  1. 1

    Create a compose.yml using the image published on ghcr.io (amd64 and arm64).

  2. 2

    Generate the authentication secret, then start the container.

  3. 3

    Open http://localhost:3000/setup and create the first admin account.

compose.yml
services:
  speedtest:
    image: ghcr.io/greite/speedtest-monitor:latest
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      AUTH_SECRET: ${AUTH_SECRET}
      TZ: Europe/Paris
    volumes:
      - speedtest-data:/data

volumes:
  speedtest-data:
Commands
echo "AUTH_SECRET=$(openssl rand -base64 32)" > .env
docker compose up -d