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 RTT for latency-sensitive workloads and real-time APIs.
Consistent timing for VoIP, WebSockets, and collaborative apps.
Strong ingress capacity with low packet-delay side effects.
Reliable egress for backups, commits, and replication jobs.
Queueing stays controlled when download load ramps up.
Server CPU headroom indicates throughput is not CPU-capped.
Memory usage remains stable during both transfer phases.
Download throughput aligns with measured server transmit average.
Upload phase uses RX averages for accurate direction-aware analysis.
Everything you need to accurately measure network performance between your client and your own server.
Track download/upload rings alongside live server CPU, memory, and NIC TX/RX during each test phase.
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.
Scores now combine latency, jitter, throughput, bloat, CPU, memory, and NIC alignment. Save a fixed-width 640px report with dynamic height for consistent sharing across devices.
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.
A weighted 9-metric model combines network quality with CPU, memory, and phase-average NIC alignment. Save Report exports a stable 640px PNG with dynamic height.
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.