FluxTest is a self-hosted network diagnosis tool that measures latency, download, and upload throughput between a browser and your infrastructure — not a third-party CDN.
Exceptional TTFB. Ideal for latency-sensitive APIs and real-time dashboards.
Highly consistent response times. Reliable for WebSocket connections, real-time collaboration features.
Ample ingress. Static assets and streaming payloads served without bottleneck.
Sufficient egress for most workloads. Monitor under concurrent heavy upload.
Negligible latency increase under load. Your network has proper queue management.
Everything you need to accurately measure network performance between your client and your own server.
Live speed rings, Mbps readout, elapsed timer, and byte counter updating at the display's native frame rate.
5 sequential pings compute average RTT and jitter (stddev). During download, concurrent pings detect bufferbloat — exposing connection stability under load.
Test against your own VPS, home-lab, edge node, or bare-metal server — not a third-party CDN.
Pre-built image on GHCR. One docker compose up command to deploy with Gunicorn and Traefik labels.
Streaming chunks prevent memory exhaustion. Server-side upload ceiling stops runaway workers. Cache-control on all data endpoints.
After every test, an A–F network score and per-metric diagnosis with actionable insights. Hit Save Report to export a ready to attach to a ticket or document a baseline.
Five /ping requests are fired sequentially. Average RTT is your latency; the standard deviation across those five samples is your jitter.
The server streams 1 MB random chunks. The browser reads the stream and computes live speed. Concurrently, periodic /bloat pings measure latency under load to detect bufferbloat.
The browser generates random 64 KB chunks via ReadableStream for 15 s, then closes. The server counts received bytes and returns the result.
Every metric is scored A–F and accompanied by a production-focused recommendation. Hit Save Report to export a branded PNG you can share or archive.
No configuration files to edit. One command and you're testing.
services: speedtest: image: ghcr.io/siddheshgunjal/flux-test:latest container_name: flux-test ports: - "4855:4855" environment: - SERVER_NAME=${HOSTNAME:-my-server} restart: unless-stopped deploy: resources: reservations: memory: 256M cpus: 0.5 labels: - "traefik.enable=true" - "traefik.http.routers.speedtest.rule=Host(`speedtest.example.com`)" - "traefik.http.routers.speedtest.entrypoints=websecure" - "traefik.http.routers.speedtest.tls.certresolver=letsencrypt"
# start docker compose up -d # stop docker compose down
docker run --rm \ -p 4855:4855 \ -e SERVER_NAME=${HOSTNAME} \ ghcr.io/siddheshgunjal/flux-test:latest
Access the UI at http://your-server-ip:4855. For HTTPS, place it behind a reverse proxy such as Traefik or Nginx with TLS termination.
Deploy in one command. No accounts, no data sent to third parties.